經(jīng)典verilog代碼標(biāo)準(zhǔn)_第1頁(yè)
已閱讀1頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  一、工程建立規(guī)范:</b></p><p><b>  1、工程的組成:</b></p><p><b>  一個(gè)頂層文件夾</b></p><p>  頂層文件夾下,至少包括以下四個(gè)子文件夾</p><p>  project文件夾:存放ISE工

2、程文件,包括ise、bit、mac等文件</p><p>  source文件夾:存放verilog源文件</p><p>  explain文件件:存放注釋說(shuō)明文檔</p><p>  test文件夾:存放測(cè)試程序代碼,可進(jìn)一步分為軟件調(diào)試程序、硬件調(diào)試程序</p><p><b>  工程的命令:</b></p

3、><p>  定層文件夾命令為top_xxx,xxx為工程的識(shí)別名稱</p><p>  頂層文件夾的子文件夾分別命名為:project、source、explain、test</p><p>  RTL CODE 規(guī)范</p><p><b>  1.標(biāo)準(zhǔn)的文件頭</b></p><p>  在每一

4、個(gè)版塊的開(kāi)頭一定要使用統(tǒng)一的文件頭,其中包括作者名,模塊名,創(chuàng)建日期,概要,更改記錄,版權(quán)等必要信息。</p><p>  統(tǒng)一使用以下的文件頭:</p><p>  // **************************************************************</p><p>  // COPYRIGHT(c)2005, His

5、licon Technologies Co, Ltd</p><p>  // All rights reserved.</p><p><b>  //</b></p><p>  // IP LIB INDEX : IP lib index just sa UTOPIA_B</p><p>  // IP Name

6、 : the top module_name of this ip, usually, is same</p><p>  // as the small ip classified name just as UTOPIA</p><p>  // File name : file_name of the file just as “t

7、x_fifo.v”</p><p>  // Module name : module_name of this file just as “TX_FIFO”</p><p>  // Full name : complete Emglish nme of this abbreviated</p><p><b>  //</b>

8、</p><p>  // Author : Athor/ID </p><p>  // Email : Author’s email</p><p>  // Data : </p><p>  // Version : V 1.0 </p><p

9、><b>  // </b></p><p>  //Abstract :</p><p>  // Called by : Father Module</p><p><b>  // </b></p><p>  // Modification history&

10、lt;/p><p>  // ------------------------------------------------------------------------------------------------------</p><p><b>  // //</b></p><p><b>  // $Log$</b

11、></p><p><b>  //</b></p><p>  // *********************************************************************</p><p>  2. 標(biāo)準(zhǔn)的module 格式 (module 整體結(jié)構(gòu))</p><p>  對(duì)于

12、模塊的書(shū)寫采用統(tǒng)一的格式便于項(xiàng)目?jī)?nèi)部成員的理解和維護(hù),我們用批處理建立了一個(gè)MODULE模塊,其內(nèi)容解釋如下:</p><p>  端口定義按照輸入,輸出,雙向的順序:</p><p>  模塊名、模塊例化名統(tǒng)一,例化名前加大寫U_以區(qū)分 ( 多次例化另加標(biāo)識(shí) ),三者關(guān)系:</p><p>  文件名 :xxx .v (小寫)</p><

13、p>  模塊名 :Xxx (首字母大寫)</p><p>  例化名 :U1_xxx (首字母大寫)</p><p>  IP 內(nèi)部所有的模塊名都要加IP名或者IP名簡(jiǎn)稱作前綴,如USB_CTRL、USB_TX_FIFO。</p><p>  // *****************************</p><p>  /

14、/ DEFINE MODULE PORT //</p><p>  // ******************************</p><p><b>  //</b></p><p>  // module MODULE_NAME (</p><p><b>  // INPUT</b&

15、gt;</p><p>  input_port_1,</p><p><b>  …</b></p><p>  input_port_m, </p><p><b>  // OUTPUT</b></p><p>  output_port_1,</p>&

16、lt;p><b>  …</b></p><p>  output_port_m, </p><p><b>  );</b></p><p>  // *****************************</p><p>  // DEFINE PARAMETER //</p

17、><p>  // ******************************</p><p>  parameter…</p><p>  // ******************************</p><p>  // DEFINE INPUT</p><p>  // *****************

18、*************</p><p>  input rst_n ; // reset, active low .</p><p>  input clk_* ; // clock signal , 50M .</p><p>  input [n:0] a_din ; // **

19、***</p><p>  input [k:0] b_din ; // *****</p><p>  // ******************************</p><p>  // DEFINE OUTPUT //</p><p>  // ******************************&

20、lt;/p><p>  output [m:0] a_dout ; // *****</p><p>  output [i:0] b_dout ; // *****</p><p>  // ******************************</p><p>  // OUTPUT ATRRIBU

21、TE //</p><p>  // ******************************</p><p><b>  // REGS</b></p><p>  reg [m:0] a_dout ; // *****</p><p><b>  //WIRES</b>

22、;</p><p>  wire [i:0] b_dout ; // *****</p><p>  // ******************************</p><p>  // INSTSNCE MODULE //</p><p>  // *****************************

23、*</p><p>  MODULE_NAME_A U_MODULE_NAME_A(</p><p>  .A (A ),</p><p>  .B (B ),</p><p>  .C (C ),</p><p><b>  ); …

24、</b></p><p>  // ******************************</p><p>  //MAIN CODE //</p><p>  // ******************************</p><p><b>  … …</b></p><

25、;p><b>  … …</b></p><p><b>  … …</b></p><p>  // ****************************** //</p><p><b>  Endmodule</b></p><p><b>  3.

26、一致的排版</b></p><p><b>  A. 一致的縮排</b></p><p>  統(tǒng)一的縮排取4個(gè)空格寬度</p><p>  輸入輸出信號(hào)的寬度定義與關(guān)鍵字之間,信號(hào)名與寬度之間要用空格分開(kāi);所有寬度定義對(duì)所有信號(hào)名對(duì)齊,代碼風(fēng)格統(tǒng)一如下:</p><p>  input [3:0]

27、input_a ; // *****</p><p>  input input_b ; // *****</p><p><b>  …</b></p><p>  output [128:0] output_a ;</p><p>  output [15:0] outp

28、ut_b ;</p><p>  output output_c ;</p><p>  一致的 begin end 書(shū)寫方式</p><p>  always 中,一定要用begin end 區(qū)分,格式和代碼風(fēng)格統(tǒng)一如下:</p><p>  always @ (postedge clk or negedge rst_n)

29、</p><p><b>  begin</b></p><p>  if (rst_n==1’b0)</p><p>  syn_rst<= ‘DLY 1’b0;</p><p><b>  else</b></p><p><b>  begin</

30、b></p><p><b>  if (a==b)</b></p><p>  syn_rst<= ‘DLY 1’b1;</p><p><b>  else</b></p><p>  syn_rst<= ‘DLY 1’b0;</p><p><b

31、>  end</b></p><p><b>  end</b></p><p>  if else 中僅有一個(gè)語(yǔ)句行時(shí),不要使用begin end; 如果有多個(gè)語(yǔ)句行時(shí),begin end和if ()或else ()空四個(gè)格。</p><p><b>  格式如下:</b></p><

32、;p><b>  if (…)</b></p><p><b>  …</b></p><p>  else if (…)</p><p><b>  else </b></p><p>  ***************************************

33、*****************************</p><p><b>  if (…)</b></p><p><b>  …</b></p><p>  else if (…)</p><p><b>  begin</b></p><p&

34、gt;<b>  …</b></p><p><b>  …(</b></p><p><b>  end</b></p><p><b>  else</b></p><p>  4. 一致的信號(hào)命名風(fēng)格</p><p>  簡(jiǎn)潔

35、,清晰,有效是基本的信號(hào)命名規(guī)則,詳見(jiàn)命名規(guī)范。</p><p>  端口、信號(hào)、變量名的所有字母小寫:函數(shù)名、宏定義、參數(shù)定義用大寫</p><p>  使用簡(jiǎn)稱、縮略詞(加上列表)</p><p>  基于含義命名(避免以數(shù)字命名的簡(jiǎn)單做法),含義可分段(最多分三段),每一小段之間加下劃線”_”,如tx_data_val;命名長(zhǎng)度一般限制在20個(gè)字符以內(nèi)。<

36、;/p><p>  低電平有效信號(hào),加后綴”_n”,如 rst_n</p><p>  無(wú)條件寄存的寄存信號(hào)在原信號(hào)上加ff1、ff2… 如原信號(hào) data_in, 寄存一拍data_in_ff1,寄存兩拍data_in_ff2</p><p>  不能用 ”reg”,作為最后的后綴名,因?yàn)榫C合工具會(huì)給寄存器自動(dòng)加上_reg, 如果命名里就用_reg作為后綴名則擾亂了網(wǎng)

37、表的可讀性。</p><p>  5.統(tǒng)一的表達(dá)式書(shū)寫</p><p><b>  A. 括號(hào)的使用</b></p><p>  如果一個(gè)表達(dá)式的分組情況不是很明顯時(shí),加上括號(hào)有助于理解。</p><p>  例如下面的代碼加上括號(hào)就清晰很多。</p><p>  if (&a==1’b1

38、&&!flag==1’b1 || b==1’b1) //</p><p><b>  改為:</b></p><p>  if ((&a==1’b1)&&(!flag==1’b1)||( b==1’b1)) //</p><p><b>  適當(dāng)?shù)氖褂每崭?l

39、t;/b></p><p>  一般表達(dá)式在運(yùn)算符的兩側(cè)要各留出一個(gè)空格,但定義比較長(zhǎng)的表達(dá)式,去掉預(yù)先級(jí)高的運(yùn)算符前的空格,使其與運(yùn)算對(duì)象緊連在一起,可以更清晰的顯示表達(dá)式結(jié)構(gòu)。</p><p><b>  還是上面的例子:</b></p><p>  if ((&a==1’b1)&&(!flag==1’b1)|

40、|( b==1’b1)) //</p><p><b>  改為:</b></p><p>  if ((&a == 1’b1)&&(!flag == 1’b1)||( b == 1’b1)) //</p><p>  ”<=”, ”==”前后都要加空格。</p><p>&

41、lt;b>  賦值要指明比特寬度</b></p><p>  賦值或者條件判斷時(shí)要注明比特寬度,注意表達(dá)式的位寬匹配。如:</p><p>  reg [4:0] signal_a;</p><p>  錯(cuò)誤: 1 signal_a <= 5;</p><p>  if(signal_a == 5)</p&

42、gt;<p>  signal_a <= signal_b[3:0]+4;</p><p>  正確: 1 signal_a <= 5d5</p><p>  if(signal_a == 5d5)</p><p>  signal_a <= {1’b0, signal_b[3:0]+5d4</p><p&g

43、t;  因?yàn)楣ぞ吣J(rèn)是32位寬,如果不注明位寬,工具檢查會(huì)報(bào)warning,而且這樣增加了設(shè)計(jì)的嚴(yán)謹(jǐn)性。</p><p>  6.統(tǒng)一的語(yǔ)句書(shū)寫――條件判斷結(jié)構(gòu)書(shū)寫方式</p><p><b>  A. 條件的完整性</b></p><p>  If else搭配使用,對(duì)于缺省的條件要寫”else;”;</p><p>

44、  If elsed 條件判別式要全面,比如if(a == 1’b0);</p><p>  Case中的缺省條件要寫”default”;</p><p>  B.”if else”結(jié)構(gòu):適用于復(fù)雜條件判斷的語(yǔ)句</p><p>  但對(duì)于復(fù)雜的條件判斷,使用?:如果不仔細(xì)分析條件的每一條路徑,就讓讀代碼搞不清它是到底要做什么。例如:</p><

45、;p>  C = (!Ic&&!rc)?0(Ic?rc:Ic) // (?:)</p><p><b>  改為:</b></p><p>  always @(Ic or rc) // if else</p><

46、p><b>  begin </b></p><p>  if ((Ic==0)&&(rc==0))</p><p><b>  c = 0;</b></p><p>  else if (Ic==1)</p><p><b>  c = rc;</b>&

47、lt;/p><p><b>  else</b></p><p><b>  c = Ic;</b></p><p><b>  end</b></p><p>  即使是簡(jiǎn)單的條件判斷,我們也必須使用IF-ELSE,當(dāng)涉及復(fù)雜的條件判斷,使用IF-ELSE結(jié)構(gòu)以獲得清晰的結(jié)構(gòu)便于

48、理解和維護(hù)。因此必須使用IF-ELSE。</p><p>  C.”IF ELSE”結(jié)構(gòu)VS”CASE”結(jié)構(gòu)</p><p>  IF ELSE結(jié)構(gòu)綜合的結(jié)構(gòu)可能是與或非門構(gòu)成的,也可能是一組多路選擇器,而case結(jié)構(gòu)綜合結(jié)果一般會(huì)是多路選擇器,但對(duì)于可以優(yōu)化的case綜合工具會(huì)綜合出更簡(jiǎn)單的結(jié)構(gòu)。</p><p>  所有對(duì)于可以寫出平行結(jié)構(gòu)的條件,優(yōu)先寫成cas

49、e結(jié)構(gòu),例如地址譯碼等,條件之間有重復(fù)和嵌套的情況則是寫成if else結(jié)構(gòu)。</p><p>  D. Finite State Machine</p><p>  不允許有模糊不清的狀態(tài)機(jī)模式,所有的狀態(tài)機(jī)必須清晰明了。</p><p>  我們要求將狀態(tài)機(jī)的時(shí)序部分和組合邏輯部分分開(kāi)。</p><p><b>  例如:<

50、;/b></p><p>  module state4 (</p><p><b>  clock</b></p><p><b>  reset</b></p><p><b>  out</b></p><p><b>  );&l

51、t;/b></p><p>  input reset </p><p>  input clock;</p><p>  output [1:0] out;</p><p>  parameter [1:0] stateA=2’b00;</p><p>  paramete

52、r [1:0] stateB=2’b01;</p><p>  parameter [1:0] stateC=2’b10;</p><p>  parameter [1:0] stateD=2’b11;</p><p>  reg [1:0] state;</p><p>  reg [1:0] nextstat

53、e;</p><p>  reg [1:0] out;</p><p>  always @ (posedge clock)</p><p><b>  begin </b></p><p>  if (reset ==1,0’b0)</p><p>  state <= sta

54、teA;</p><p><b>  else</b></p><p>  state <= nextstate;</p><p><b>  end</b></p><p>  always @ (state)</p><p><b>  begin <

55、;/b></p><p>  case (state)</p><p>  stateA: begin</p><p>  nextstate = stateB;</p><p><b>  end</b></p><p>  stateB: begin</p><p&g

56、t;  nextstate = stateC;</p><p><b>  end</b></p><p>  stateC: begin</p><p>  nextstate = stateD;</p><p><b>  end</b></p><p>  stateD

57、: begin</p><p>  nextstate = stateA;</p><p><b>  end</b></p><p><b>  endcase</b></p><p><b>  end</b></p><p>  always@(p

58、ostdge clock or negedge reset)</p><p><b>  begin </b></p><p>  if (reset==1’b0)</p><p>  out <= 2’b0;</p><p>  else begin</p><p>  if (state

59、==…)</p><p><b>  out <= …;</b></p><p><b>  else</b></p><p><b>  out <= …;</b></p><p><b>  end</b></p><p

60、><b>  end</b></p><p>  endmodule </p><p>  7. 統(tǒng)一格式的always程序塊的書(shū)寫</p><p>  A. always 中的變量的賦值方式――阻塞與非阻塞賦值</p><p>  當(dāng)進(jìn)行時(shí)序邏輯建模時(shí),always塊中使用非阻塞賦值――NON_BL

61、OCKING;</p><p><b>  參加如下代碼:</b></p><p>  always @(posedge clk or negedge rst_n)</p><p><b>  begin </b></p><p>  if (rst_n == 1’b0;</p>&l

62、t;p>  myreg <= 1’b0;</p><p><b>  else</b></p><p>  myreg <= ‘DLY1’b1;</p><p><b>  end</b></p><p>  always塊中使用的NON_BLOCKING賦值時(shí)在”<=”前要

63、加上#‘DLY,如上例;</p><p>  當(dāng)使用always語(yǔ)句進(jìn)行組合邏輯建模時(shí),always塊中使用阻塞賦值――BLOCKING;</p><p><b>  參見(jiàn)如下代碼:</b></p><p>  always @(addr)</p><p><b>  begin</b></p

64、><p>  case (addr)</p><p>  2’b00 : cs0_n=1’b0;</p><p>  2’b01 : cs0_n=1’b1;</p><p>  2’b10 : cs0_n=1’b0;</p><p>  2’b11 : cs0_n=1’b1;</p><p>  d

65、efault: cs0_n=1’b1;</p><p><b>  endcase</b></p><p><b>  end</b></p><p>  如果要使用always語(yǔ)句同時(shí)進(jìn)行時(shí)序與組合邏輯建模時(shí),一定使用非阻塞賦值;例如:</p><p>  //組合邏輯與時(shí)序邏輯在同一個(gè)alway

66、s塊中</p><p>  always@(posedge clk or negedge reset_n)</p><p><b>  begin</b></p><p>  if(reset_n==1’b0)</p><p>  out<=1’b0;</p><p><b>  

67、else</b></p><p><b>  begin</b></p><p>  case(count)</p><p>  2’b00 : out<= `DLY in_a;</p><p>  2’b01 : out<= `DLY in_b;</p><p>  2’

68、b10 : out<= `DLY in_c;</p><p>  2’b11 : out<= `DLY in_c;</p><p>  default: out<= `DLY in_a;</p><p><b>  end</b></p><p><b>  end</b><

69、/p><p>  B.a(chǎn)lways中變量賦值的唯一性</p><p>  組合always塊一定要注意敏感量列表中的觸發(fā)項(xiàng)完整且不冗余;如果不是這樣,綜合的電路會(huì)與實(shí)際設(shè)計(jì)不符合,會(huì)報(bào)warning;</p><p>  不要再多個(gè)always模塊中對(duì)同一個(gè)reg型變量進(jìn)行賦值;</p><p>  更不能再同一個(gè)always中隨一個(gè)變量雙重賦值

70、;</p><p><b>  例如:</b></p><p>  always@(posedge clk or posedge reset_n)</p><p><b>  begin</b></p><p>  if(reset_n==1’b0)</p><p>  ou

71、t<=1’b0;</p><p><b>  else</b></p><p>  out<= `DLY1’b1; //out 1 0</p><p>  out<= `DLY1’b0;</p><p><b>  end</b></p>

72、<p>  推薦不要在一個(gè)always塊里給多個(gè)變量賦值。如果將一組條件相同的變量寫在一個(gè)always塊中更有利于可讀性的提高和功能的實(shí)現(xiàn)時(shí)候,可有例外情況,但請(qǐng)盡量多加注釋,以增加可讀性,并注意在組合always塊中不要出現(xiàn)LATCH(不如對(duì)狀態(tài)機(jī)的組合always塊及它對(duì)條件相似的多個(gè)變量賦值);</p><p>  C.a(chǎn)lways中復(fù)位的書(shū)寫</p><p>  復(fù)位的

73、條件表達(dá)式及命名要和always敏感列表中的描述相統(tǒng)一,并且一定要使用異步復(fù)位。所有的復(fù)位必須低有效。</p><p><b>  例如:</b></p><p><b>  //</b></p><p>  always@(posedge clk ot negedge rst_n) //</p><p

74、><b>  begin</b></p><p>  if(rst_n==1’b0)</p><p><b>  …</b></p><p><b>  else</b></p><p><b>  …</b></p><p>

75、;<b>  end</b></p><p>  D.a(chǎn)lways的注釋</p><p>  要在每一個(gè)always塊之前加一段注釋,增加可讀性和便于調(diào)試。</p><p>  //cm carry count which …</p><p>  always@(posedge clk_xc or negedge rs

76、t_n)</p><p><b>  begin</b></p><p>  if(rst_n==1’b0)</p><p>  cm_carry_cnt<=1’b0;</p><p><b>  else</b></p><p>  cm_carry_cnt<=

77、#`DLY1’b1;</p><p><b>  end</b></p><p><b>  8.合理的注釋</b></p><p>  代碼中應(yīng)采用英文作詳細(xì)的注釋,注釋量應(yīng)達(dá)到代碼總量的50%以上。</p><p>  指示應(yīng)該與代碼一致,修改程序的時(shí)候一定要修改相應(yīng)的注釋;</p>

78、<p>  注釋不應(yīng)重復(fù)代碼已經(jīng)表明的內(nèi)容,而是簡(jiǎn)介的點(diǎn)明程序的突出特征;</p><p>  注釋應(yīng)該整個(gè)一個(gè)程序的線索和關(guān)鍵詞,它連接整個(gè)程序中分散的信息并它幫助理解程序中不能表明的部分。</p><p><b>  9.重用化設(shè)計(jì)</b></p><p><b>  層次結(jié)構(gòu)與模塊劃分</b></

79、p><p>  層次設(shè)計(jì)的原理以簡(jiǎn)單為主――盡量避免不必要的層次;層次結(jié)構(gòu)設(shè)計(jì)得好,在綜合中就不需要太多的優(yōu)化過(guò)程;</p><p>  模塊的劃分根據(jù)層次設(shè)計(jì)來(lái)決定――模塊化對(duì)于布線有很大幫助,模塊化的設(shè)計(jì)中要盡量減少全局信號(hào)的使用;</p><p>  通用的部分盡量提取出來(lái)作為一個(gè)共用模塊,同時(shí)為了適應(yīng)需求的更改也應(yīng)提供用戶定制模塊入庫(kù)的方式。</p>

80、<p><b>  參數(shù)傳遞</b></p><p>  需要傳遞參數(shù)的模塊,在多次例化的時(shí)候統(tǒng)一都傳遞參數(shù),不要例化同一個(gè)模塊,有的傳參數(shù),有的不傳。</p><p><b>  模塊劃分的技巧:</b></p><p>  將不同的時(shí)鐘域分離開(kāi)來(lái);</p><p>  按照不同的設(shè)

81、計(jì)目標(biāo)劃分成塊,分塊式應(yīng)在數(shù)據(jù)流方向上切分;</p><p>  在同一模塊中實(shí)現(xiàn)邏輯資源和算術(shù)資源的共享。</p><p>  二.關(guān)于REVIEW</p><p>  1.Review目的</p><p><b>  發(fā)現(xiàn)缺陷</b></p><p><b>  降低成本</b

82、></p><p><b>  提高質(zhì)量</b></p><p><b>  2.流程</b></p><p>  完成第一個(gè)字模塊時(shí),請(qǐng)?zhí)峤辉撃K代碼,進(jìn)行規(guī)范檢查評(píng)審。</p><p>  Coding 期間 每?jī)尚瞧?提交依次代碼和review報(bào)告。</p><p&g

83、t;  Review報(bào)告主要包括內(nèi)容:</p><p>  Review工作時(shí),review的代碼模塊</p><p><b>  參與人</b></p><p>  發(fā)現(xiàn)的缺陷和解決情況。</p><p><b>  Review建議:</b></p><p>  制定re

84、view計(jì)劃;(2) 每次review代碼不超過(guò)500行。</p><p><b>  ANNEX</b></p><p>  CODE STYLE TEMPLATE</p><p>  This a template of verilog code file, including file header and the main body o

85、f code in which some coding rules are demonstrated.</p><p>  //********************************************************</p><p><b>  //</b></p><p>  // Copyright(c)2005

86、, Hisilicon Technologies Co., Ltd</p><p>  // All rights reserved</p><p><b>  //</b></p><p>  // IP LIB INDEX : IP lib index just as UTOPIA_B</p><p&g

87、t;  // IP Name : the top module_name of this ip, usually, is same as</p><p>  the small ip classified name just as UTOPIA</p><p>  // File name : file_name of this file ju

88、st as tx_fifo.v</p><p>  // Module name : module_name of this file just as TX_FIFO</p><p>  // Full name : complete English name of the abbreviated module_name</p><

89、p>  // Author : Author</p><p>  // Email : Author’s email</p><p>  // Data : 2005/07/20</p><p>  // Version : current versi

90、on, just this: v1.0, must same as the CVS version</p><p><b>  //</b></p><p>  // Abstract : </p><p><b>  //</b></p><p>  // Called

91、 by : Father module just as TX_PROC</p><p><b>  //</b></p><p>  // Modification history</p><p>  // -------------------------------------------------------

92、---------------------</p><p>  // Version Data(yyyy/mm/dd) name</p><p>  // Description</p><p><b>  //</b></p><p><b>  // $Log$</b></

93、p><p><b>  //</b></p><p>  //*************************************************************</p><p>  //*******************</p><p>  //DEFINE(s)</p><p

94、>  //*******************</p><p>  //`define UDLY 1 //Unit delay, for non-blocking assignments in sequential logic</p><p>  //*******************</p><p>  //DEFINE MODULE PORT&

95、lt;/p><p>  //*******************</p><p>  module MODULE_NAME(</p><p><b>  //INPUT</b></p><p>  rest_n ,</p><p>  clk_* ,</p&g

96、t;<p>  a_din ,</p><p>  b_din ,</p><p><b>  //OUTPUT</b></p><p>  a_dout ,</p><p><b>  b_dout</b></p>&

97、lt;p><b>  );</b></p><p>  //*******************</p><p>  //DEFINE PARAMETER</p><p>  //*******************</p><p>  //Parameter(s)</p><p>  

98、//*******************</p><p>  //DEFINE INPUT</p><p>  //*******************</p><p>  input rst_n ; //reset, active low .</p><p>  input

99、 clk_* ; //clock signal, 50M .</p><p>  input [n:0] a_din ; //*****</p><p>  input [k:0] b_din ; //*****</p><p>  //*******************

100、</p><p>  //DEFINE OUTPUT</p><p>  //*******************</p><p>  output [m:0] a_dout ; //*****</p><p>  output [i:0] b_dout ; //*****</p>

101、;<p>  //********************</p><p>  //OUTPUT ATTRIBUTE</p><p>  //********************</p><p><b>  //REGS</b></p><p>  reg [m:0] a_dout

102、; //*****</p><p><b>  //WIRES</b></p><p>  wire [i:0] b_dout ; //*****</p><p>  //*********************</p><p>  //INNER SIGNAL DECLARATION&

103、lt;/p><p>  //*********************</p><p><b>  //REGS</b></p><p>  reg [3:0] counter ; //*****</p><p><b>  //WIRES</b></p>&

104、lt;p>  wire [7:0] temp1 ; //*****</p><p>  //*********************</p><p>  //INSTANTCE MODULE</p><p>  //*********************</p><p>  //***********

105、***************************************************</p><p>  //instance of module MODULE_NAME_A filename:module_name_a.v</p><p>  //**************************************************************

106、</p><p>  MODULE_NAME_A U_MUDULE_NAME_A(</p><p>  .A (A ),</p><p>  .B (B ),</p><p>  .C (C

107、 )</p><p><b>  );</b></p><p>  //*********************</p><p>  //MAIN CORE</p><p>  //*********************</p><p>  //Sequential logic s

108、tyle</p><p>  always@(posedge clk_* or negedge rest_n)</p><p>  begin : SEQ_BLOCK_NAME</p><p>  if (rst_n==1’b0)</p><p>  counter<=4’b0;</p><p><b>

109、;  else</b></p><p><b>  begin</b></p><p>  if (expression)</p><p>  counter <= #`DLY siginal_b;</p><p><b>  else;</b></p><p&

110、gt;<b>  end</b></p><p>  end // SEQ_BLOCK_NAME</p><p>  //Combinational logic style</p><p>  always@(signal_a or signal_b)</p><p>  begin:COM_BLOCK-NAME<

111、/p><p>  case (expression)</p><p>  item1 :begin</p><p>  signal_c=*****;</p><p><b>  end</b></p><p>  item2 : //statement;</p><p

112、>  default ://statement;</p><p><b>  endcase</b></p><p>  end // COM_BLOCK_NAME</p><p>  //*********************</p><p><b>  endmodule</b>&

113、lt;/p><p>  MACRO DEFINE TEMPLATE</p><p>  //********************************************************</p><p><b>  //</b></p><p>  // Copyright(c)2005, Hisili

114、con Technologies Co., Ltd</p><p>  // All rights reserved</p><p><b>  //</b></p><p>  // IP LIB INDEX : IP lib index just as UTOPIA_B</p><p>  //

115、 IP Name : the top module_name of this ip, usually, is same as</p><p>  the small ip classified name just as UTOPIA</p><p>  // File name : macro.v</p><p>  //

116、 Module name : </p><p>  // Full name : complete English name of the abbreviated module_name</p><p>  // Author : Author</p><p>  // Email

117、 : Author’s email</p><p>  // Data : 2005/07/20</p><p>  // Version : current version, just this: v1.0, must same as the CVS version</p><p><b>  

118、//</b></p><p>  // Abstract : </p><p><b>  //</b></p><p>  // Called by : Father module .</p><p><b>  //</b></p

119、><p>  // Modification history</p><p>  // ----------------------------------------------------------------------------</p><p>  // Version Data(yyyy/mm/dd) name</p>

120、<p>  // Description</p><p><b>  //</b></p><p><b>  // $Log$</b></p><p><b>  //</b></p><p>  //*******************************

121、******************************</p><p>  //*******************</p><p>  //DEFINE(s)</p><p>  //*******************</p><p>  `define UDLY 1 //Unit delay,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論