VERILOG語言編寫規(guī)范--精選文檔_第1頁
VERILOG語言編寫規(guī)范--精選文檔_第2頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、VERILOG語言編寫規(guī)范1 目的本規(guī)范的目的是提高書寫代碼的可讀性 可修改性 可重用性,優(yōu)化代碼綜合和仿真結(jié)果,指導(dǎo)設(shè)計工程師使用VerilogHDL規(guī)范代碼和優(yōu)化電路 ,規(guī)范化公司的ASIC設(shè)計輸入 從而做到 1. 邏輯功能正確 2.可快速仿真 3. 綜合結(jié)果最優(yōu) 如果是hardware model)4. 可讀性較好。2 范圍本規(guī)范涉及Verilog HDL編碼風(fēng)格, 編碼中應(yīng)注意的問題, Testbench的編碼等。本規(guī)范適用于Verilog model的任何一級( RTL behavioral, gate_level), 也適用于出于仿真,綜合或二者結(jié)合的目的而設(shè)計的模塊。3 定義Ve

2、rilog HDL : Verilog 硬件描述語言FSM : 有限狀態(tài)機偽路徑 : 靜態(tài)時序分析( STA) 認(rèn)為是時序失敗, 而設(shè)計者認(rèn)為是正確的路徑4 引用標(biāo)準(zhǔn)和參考資料下列標(biāo)準(zhǔn)包含的條文 通過在本標(biāo)準(zhǔn)中引用而構(gòu)成本標(biāo)準(zhǔn)的條文 在標(biāo)準(zhǔn)出版時 所示版本均為有效 所有標(biāo)準(zhǔn)都會被修訂 使用本標(biāo)準(zhǔn)的各方應(yīng)探討 使用下列標(biāo)準(zhǔn)最新版本的可能性Actel HDLCoding Style GuiderSun MicrosystemsRevision 1.0VerilogStyle and Coding Guidelines5 規(guī)范內(nèi)容5.1 Verilog 編碼風(fēng)格本章節(jié)中提到的Verilog編碼規(guī)則和

3、建議適應(yīng)于 Verilog model的任何一級( RTL behavioral,gate_level) 也適用于出于仿真, 綜合或二者結(jié)合的目的而設(shè)計的模塊。5.1.1 命名規(guī)范選擇有意義的信號和變量名, 對設(shè)計是十分重要的。 命名包含信號或變量諸如出處, 有效狀態(tài)等基本含義 下面給出一些命名的規(guī)則。1. 用有意義而有效的名字有效的命名有時并不是要求將功能描述出來 如For ( I = 0; I < 1024; I = I + 1 )MemI<= #1 32b0;For 語句中的循環(huán)指針I(yè) 就沒必要用loop_index作為指針名。2. 用連貫的縮寫長的名字對書寫和記憶會帶來不便

4、, 甚至帶來錯誤 采用縮寫時應(yīng)注意同一信號在模塊中的一致性。 縮寫的例子如下:Addr address Pntr pointerClk clockRst reset3. 用名字前加小寫n表示低電平有效 高電平有效的信號不得以下劃線表示 短暫的引擎信號建議采用高有效如 nRst, nTrdy, nIrdy nIdsel.4. 大小寫原則名字一般首字符大寫 ,其余小寫 (但parameter, integer 定義的數(shù)值名可全部用大寫),兩個詞之間要用下劃線連接(或第二個單詞首字母大寫)如 :Packet_addr, Data_in, Mem_wr , Mem_ce_Or: PacketAddr,

5、 DataIn, MemWr , MemCe5.全局信號名字中應(yīng)包含信號來源的一些信息如: D_addr7:2 這里的 D 指明了地址是解碼模塊(Decoder module)中的地址.6. 同一信號在不同層次應(yīng)保持一致性7. 自己定義的常數(shù) 類型等用大寫標(biāo)識如: parameter CYCLE=100.8 避免使用保留字如 in out x z等不能夠做為變量 端口或模塊名9. 添加有意義的后綴 使信號名更加明確 常用的后綴如下芯片的雙向信號 -xbio芯片的三態(tài)輸出 _xz芯片的漏極開路輸出 _xod芯片原始輸出信號 _xo芯片原始輸入信號 _xi下降沿有效的寄存器 _f連到三態(tài)輸出的信號

6、 _z寄存前的信號 _next時鐘信號 _Clk5.1.2 Modules1.頂層模塊應(yīng)只是內(nèi)部模塊間的互連Verilog設(shè)計一般都是層次型的設(shè)計, 也就是在設(shè)計中會出現(xiàn)一個或多個模塊, 模塊間的調(diào)用在所難免。 可把設(shè)計比喻成樹, 被調(diào)用的模塊就是樹葉, 沒被調(diào)用的模塊就是樹根, 那么在這個樹根模塊中, 除了內(nèi)部的互連和模塊的調(diào)用外, 盡量避免再做邏輯, 如:不能再出現(xiàn)對reg變量賦值等, 這樣做的目的是為了更有效的綜合, 因為在頂層模塊中出現(xiàn)中間邏輯 ,Synopsys 的design compiler 就不能把子模塊中的邏輯綜合到最優(yōu)。2. 每一個模塊應(yīng)在開始處注明文件名 功能描述 引用模

7、塊 設(shè)計者 設(shè)計時間及版權(quán)信息等如 /* = *Filename SPI_M.vAuthor whqDescription File descriptionCalled by Top module Revision History time yy-mm-ddRevision 1.0Email wuhaoqian1Copyright(c)1999, ,All right reserved/* = *3. 不要對Inpu t進行驅(qū)動, 在module 內(nèi)不要存在沒有驅(qū)動的信號, 更不能在模塊端口中出現(xiàn)沒有驅(qū)動的輸出信號, 避免在仿真或綜合時產(chǎn)生warning, 干擾錯誤定位4. 每行應(yīng)限制在80個

8、字符以內(nèi) 以保持代碼的清晰 美觀和層次感一條語句占用一行 如果較長,超出80個字符 則要換行。5. 電路中調(diào)用的 module 名用 Uxx 標(biāo)示。 向量大小表示要清晰, 采用基于名字(name_based) 的調(diào)用而非基于順序的 (order_based)。Instance UInstance2(.DataOut (DOUT ),.DataIn (DIN ),.Cs_ (Cs_ );6. 用一個時鐘的上沿或下沿采樣信號, 不能一會兒用上沿, 一會兒用下沿。 如果既要用上沿又要用下沿, 則應(yīng)分成兩個模塊設(shè)計。 建議在頂層模塊中對Clock做一非門,在層次模塊中如果要用時鐘下沿就可以用非門產(chǎn)生的

9、PosedgeClk_ , 這樣的好處是在整個設(shè)計中采用同一種時鐘沿觸發(fā), 有利于綜合。 基于時鐘的綜合策略7. 在模塊中增加注釋對信號, 參量, 引腳, 模塊, 函數(shù)及進程等加以說明, 便于閱讀與維護。8. Module 名要用大寫標(biāo)示, 且應(yīng)與文件名保持一致。如 Module DFF_ASYNC_RST(Reset,Clk,Data,Qout);嚴(yán)格芯片級模塊的劃分只有頂層包括IO引腳(pads), 中間層是時鐘產(chǎn)生模塊, JTAG, 芯片的內(nèi)核(CORE),這樣便于對每個模塊加以約束仿真, 對時鐘也可以仔細(xì)仿真。模塊輸出寄存器化對所有模塊的輸出加以寄存( 如圖1) 使得輸出的驅(qū)動強度和輸

10、入的延遲可以預(yù)測, 從而使得模塊的綜合過程更簡單- 輸出驅(qū)動的強度都等于平均的觸發(fā)器驅(qū)動強度圖19.將關(guān)鍵路徑邏輯和非關(guān)鍵路徑邏輯放在不同模塊保證DC可以對關(guān)鍵路徑模塊實現(xiàn)速度優(yōu)化, 而對非關(guān)鍵路徑模塊實施面積優(yōu)化 在。同一模塊DC無法實現(xiàn)不同的綜合策略,將相關(guān)的組合邏輯放在同一模塊,有助于DC對其進行優(yōu)化 因為DC通常不能越過模塊的邊界來優(yōu)化邏輯。5.1.3 Net and Register1. 一個reg變量只能在一個always語句中賦值2. 向量有效位順序的定義一般是從大數(shù)到小數(shù)盡管定義有效位的順序很自由, 但如果采用毫無規(guī)則的定義勢必會給作者和讀代碼的人帶來困惑 ,如 Data-4:

11、 0, 則 LSB0-1-2-3-4MSB, 或 Data0: 4 則LSB43210MSB 這兩種情況的定義都不太好, 推薦Data4: 0這種格式的定義。3.對net和register類型的輸出要做聲明 在PORT中。如果一個信號名沒做聲明 Verilog將假定它為一位寬的wire變量。4. 線網(wǎng)的多種類型。 寄存器的類型。5.1.4 Expressions1. 用括號來表示執(zhí)行的優(yōu)先級盡管操作符本身有優(yōu)先順序, 但用括號來表示優(yōu)先級對讀者更清晰, 更有意義。If (alpha < beta) && (gamma >= delta). 比下面的表達更合意If (

12、alpha < beta && gamma >= delta).(判斷邏輯應(yīng)是化簡過后的最簡形式?。?. 用一個函數(shù)(function)來代替表達式的多次重復(fù)如果代碼中發(fā)現(xiàn)多次使用一個特殊的表達式 ,那么就用一個函數(shù)來代替, 這樣在以后的版本升級時更便利, 這種概念在做行為級的代碼設(shè)計時同樣使用, 經(jīng)常使用的一組描述可以寫到一個任務(wù)(task)中。5.1.5 IF 語句1. 向量比較時 比較的向量要相等當(dāng)比較向量時 verilog將對位數(shù)小的向量做0 擴展以使它們的長度相匹配 它的自動擴展為隱式的 建議采用顯示擴展 這個規(guī)律同樣適用于向量同常量的比較Reg Abc7

13、:0;Reg Bca3:0;.If (Abc= = 4b0, Bca)begin.If (Abc= = 8b0) begin2. 每一個If 都應(yīng)有一個else 和它相對應(yīng)在做硬件設(shè)計時, 常要求條件為真時執(zhí)行一種動作而條件為假時執(zhí)行另一動作 即使認(rèn)為條件為假不可能發(fā)生, 沒有else可能會使綜合出的邏輯和,RTL級的邏輯不同。如果條件為假時不進行任何操作, 則用一條空語句。always (Cond)beginif (Cond)DataOut<= DataIn;End/ Else以上語句DataOut會綜合成鎖存器.3. 應(yīng)注意If .else if .else if .else 的優(yōu)先

14、級4. 如果變量在If-else 或case 語句中做非完全賦值 則應(yīng)給變量一個缺省值。即V1 = 2b00;V2 = 2b00;V3 = 2b00;If (a = = b) beginV1 = 2b01; /V3 is not assignedV2 = 2b10;EndElse if (a = = c) beginV2 = 2b10; /V1 is not assignedV3 = 2b11;EndElse 5.1.6 case 語句1. case語句通常綜合成一級多路復(fù)用器 (圖的右邊部分), 而if-then-else則綜合成優(yōu)先編碼的串接的多個多路復(fù)用器, 如圖的左邊部分 通常 使用c

15、ase 語句要比if語句快, 優(yōu)先編碼器的結(jié)構(gòu)僅在信號的到達有先后時使用。 條件賦值語句也能綜合成多路復(fù)用器, 而case 語句仿真要比條件賦值語句快。2 所有的Case 應(yīng)該有一個default case 允許空語句Default : ;5.1.7 Writing functions1. 在function的最后給function賦值Function CompareVectors;/ (Vector1, Vector2,Length)Input 199:0 Vector1, Vector2;Input 31:0 Length;/local variablesInteger i;RegEqua

16、l;Begini= 0;Equal = 1;While (i<Length)&& Equal) beginIf (Vector 2i != 1bx)beginIf (Vector1i!= Vector2i)Equal = 0;Else ;Endi= i+ 1;EndCompareVectors= Equal;EndEndfunction /compareVectors/比較器3. 函數(shù)中避免使用全局變量否則容易引起HDL行為級仿真和門級仿真的差異。如function ByteCompareinput 15:0 Vector1input 15:0 Vector2input

17、7:0 Lengthbeginif (ByteSel)/ compare the upper byteelse/ compare the lower byteendendfunction/ ByteCompare中使用了全局變量ByteSel 可能無意在別處修改了, 導(dǎo)致錯誤結(jié)果 。最好直接在端口加以定義。 ( 注意 函數(shù)與任務(wù)的調(diào)用均為靜態(tài)調(diào)用。)5.1.8 Assignment1. Verilog 支持兩種賦值 過程賦值(procedural) 和連續(xù)賦值(continuous。 過程賦值用于過程代碼( initial, always, task or function) 中給reg 和

18、integer 變量timrealtimereal賦值, 而連續(xù)賦值一般給wire 變量賦值。2. Always (敏感表) 敏感表要完整, 如果不完整, 將會引起仿真和綜合結(jié)果不一致always (d or Clr)if (Clr)q = 1'b0;else if (e)q = d;以上語句在行為級仿真時e的變化將不會使仿真器進入該進程,導(dǎo)致仿真結(jié)果錯誤3. Assign/deassign 僅用于仿真加速 僅對寄存器有用4. Force/release 僅用于debug 對寄存器和線網(wǎng)均有用5. 避免使用Disable6.對任何reg賦值用非阻塞賦值代替阻塞賦值 reg 的非阻塞賦值

19、要加單位延遲 但異步復(fù)位可加可不加 =與 =的區(qū)別Always (posedge Clkor negedge Rst_)BeginIf (!Rst_)/ prioritize the “if conditions”in if statementBeginRega <=0; /non_blockingassignmentRegb <=0;EndElse if (Soft_rst_all)BeginRega <= #u_dly0; /add unit delayRegb <= #u_dly0;EndElse if (Load_init)BeginRega <= #u_

20、dly init_rega;Regb <= #u_dly init_regb;EndElseBeginRega <= #u_dly Rega<< 1;Regb <= #u_dly St_1;EndEnd/ end Rega, Regbassignment.5.1.9 Combinatorial Vs Sequential Logic1. 如果一個事件持續(xù)幾個時鐘周期 ,設(shè)計時就用時序邏輯代替組合邏輯。如 Wire Ct_24_e4; /it ccarriesinfo. Last over several clock cyclesAssign Ct_24_e4= (

21、count8bit7:0>= 8h24) & (count8bit7:0<= 8he4);那么這種設(shè)計將綜合出兩個8 比特的加法器 而且會產(chǎn)生毛刺, 對于這樣的電路, 要采用時序設(shè)計, 代碼如下;Reg Ct_24_e4;Always (poseddge Clk or negedge Rst_)BeginIf (!Rst_)Ct_24_e4<= 1b0;Else if (count8bit7:0= = 8he4)Ct_24_e4<= #u_dly1b0;Else if (count8bit7:0= = 8h23)Ct_24_e4<= #u_dly1b1;E

22、sle; 2. 內(nèi)部總線不要懸空 在default狀態(tài) 要把它上拉或下拉Wire OE_default;Assign OE_default= !(oe1| oe2| oe3);Assign bus31:0= oe1? Data131:0:oe2? Data231:0:oe3? Data331:0:oe_default? 32h0000_0000 :32hzzzz_zzzz;5.1.10Macros1. 為了保持代碼的可讀性, 常用 “define” 做常數(shù)聲明2. 把“define”放在一個獨立的文件中參數(shù)( parameter) 必須在一個模塊中定義, 不要傳替參數(shù)到模塊( 仿真測試向量例外

23、)“define”可以在任何地方定義, 要把所有的“define”定義在一個文件中. 在編譯原代碼時首先要把這個文件讀入, 如果希望宏的作用域僅在一個模塊中, 就用參數(shù)來代替。5.1.11Comments1. 對更新的內(nèi)容更新要做注釋2. 在語法塊的結(jié)尾做標(biāo)記/style 1If (OE_&& (state != PENDING) begin.End / if enable = = tureand ready/style 2 - identical lableson begin and endIf (OE_&& (state != PENDING) begin

24、/drive data.End /drive data/ Comment end<unit>with the name of the <unit>Function Calcparity /Data, ParityErr.Endfunction/ Calcparity3. 每一個模塊都應(yīng)在模塊開始處做模塊級的注釋, 參考前面標(biāo)準(zhǔn)模塊頭。4. 在模塊端口列表中出現(xiàn)的端口信號 都應(yīng)做簡要的功能描述。5.1.12FSM1. VerilogHDL狀態(tài)機的狀態(tài)分配。VerilogHDL描述狀態(tài)機時必須由parameter分配好狀態(tài),這與VHDL不同 VHDL狀態(tài)機狀態(tài)可以在綜合時分

25、配產(chǎn)生。2. 組合邏輯和時序邏輯分開用不同的進程組合邏輯包括狀態(tài)譯碼和輸出, 時序邏輯則是狀態(tài)寄存器的切換。3. 必須包括對所有狀態(tài)都處理, 不能出現(xiàn)無法處理的狀態(tài), 使?fàn)顟B(tài)機失控。4. Mealy機的狀態(tài)和輸入有關(guān),而Moore機的狀態(tài)轉(zhuǎn)換和輸入無關(guān)Mealy 狀態(tài)機的例子如下:.reg CurrentState, NextState, Out1;Parameter S0=0,S1=1;always (posedge Clkor negedge Rst_)/ state vector flip-flops (sequential)if (!Reset)CurrentState= S0;els

26、eCurrentState<= #u_dly NextState;always (In1or In2or CurrentState)/ output and state vector decode (combinational)case (CurrentState)S0: beginNextState<= #u_dly S1;Out1<= #u_dly1'b0;endS1: if (In1)beginNextState<= #u_dly S0;Out1<= #u_dly In2;endelse beginNextState<= #u_dly S1;O

27、ut1<= #u_dly !In2;endendcaseendmodule5.2 代碼編寫中容易出現(xiàn)的問題1. 在for-loop中包括不變的表達式 浪費運算時間for (i=0;i<4;i=i+1)beginSig1= Sig2;DataOuti= DataIni;endfor-loop中第一條語句始終不變,浪費運算時間.2. 資源共享問題條件算子中不存在資源共享 如z = (cond)? (a + b) : (c + d);必須使用兩個加法器;而等效的條件if-then-else語句則可以資源共享 如:if (Cond)z = a + b;elsez = c + d;只要加法器

28、的輸入端復(fù)用,就可以實現(xiàn)加法器的共享,使用一個加法器實現(xiàn)3. 由于組合邏輯的位置不同而引起過多的觸發(fā)器綜合 如下面兩個例子moduleCOUNT (AndBits, Clk, Rst);Output Andbits;Input Clk,Rst;Reg AndBits;/internal regReg 2:0 Count;always (posedge Clk)beginbeginif (Rst)Count <= #u_dly0;elseCount <= #u_dlyCount + 1;End /end ifAndBits <= #u_dly & Count;End/e

29、nd alwaysendmodule在進程里的變量都綜合成觸發(fā)器了,有4個;moduleCOUNT (AndBits, Clk, Rst);Output AndBits;Input Clk,Rst;Reg AndBits;/internal regReg 2:0 Count;always (posedge Clk)begin /synchronousif (Rst)Count <= #u_dly0;elseCount <= #u_dly Count + 1;End/end alwaysalways (Count)begin /asynchronousAndBits= & C

30、ount;End/end alwaysEndmodule/end COUNT組合邏輯單開,只有3個觸發(fā)器.4. 謹(jǐn)慎使用異步邏輯module COUNT (Z, Enable, Clk, Rst);Output 2:0 Z;Input Rst,Enable,Clk;reg2:0 Z;always (posedge Clk)beginif (Rst)beginZ <= #u_dly1'b0;endelse if (Enable = 1'b1) beginIf (Z = 3'd7) beginZ <= #u_dly1'b0;Endelse beginZ

31、<= #u_dlyZ + 1'b1;endEndElse ;End/end alwaysEndmodule/end COUNT是同步邏輯,而下例則使用了組合邏輯作時鐘,以及異步復(fù)位.實際的運用中要加以避免.module COUNT (Z, Enable, Clk, Rst);Output 2:0 Z;Input Rst,Enable,Clk;Reg 2:0 Z;/internal wirewire GATED_Clk= Clk& Enable;always (posedge GATED_Clkor posedge Rst)beginif (Rst)beginZ <=

32、 #u_dly1'b0;endelse beginif (Z = 3'd7) beginZ <= #u_dly1'b0;endelse beginZ <= #u_dlyZ + 1'b1;endEnd/end ifEnd/end alwaysEndmodule /end module5. 對組合邏輯的描述有多種方式 ,其綜合結(jié)果是等效的c = a &b;等效于c3:0 = a3:0 & b3:0;等效于c3 = a3 & b3;c2 = a2 & b2;c1 = a1 & b1;c0 = a0 & b0;

33、等效于for ( i=0; i<=3; i= i+ 1)ci= ai& bi;可以選擇簡潔的寫法.6. 考慮綜合的執(zhí)行時間通常會推薦將模塊劃分得越小越好, 事實上要從實際的設(shè)計目標(biāo) 面積和時序要求出發(fā) 好的時序規(guī)劃和合適的約束條件要比電路的大小對綜合時間的影響要大, 要依照設(shè)計的目標(biāo)來劃分模塊, 對該模塊綜合約束的scripts也可以集中在該特性上, 要選擇合適的約束條件, 過分的約束將導(dǎo)致漫長的綜合時間 最好在設(shè)計階段就做好時序規(guī)劃 通過綜合的約束scripts來滿足時序規(guī)劃 。這樣就能獲得既滿足性能的結(jié)果, 又使得綜合時間最省, 從代碼設(shè)計講 5005000行的長度是合適的。

34、7. 避免點到點的例外所謂點到點例外 Point-to-point exception 就是從一個寄存器的輸出到另一個寄存器的輸入的路徑不能在一個周期內(nèi)完成 多周期路徑就是其典型情況, 多周期路徑比較麻煩 在靜態(tài)時序分析中要標(biāo)注為例外, 這樣可能會因為人為因素將其他路徑錯誤地標(biāo)注為例外, 從而對該路徑?jīng)]有分析 造成隱患 避免使用多周期路徑 。如果確實要用, 應(yīng)將它放在單獨一個模塊, 并且在代碼中加以注釋。8. 避免偽路徑(False path)偽路徑是那些靜態(tài)時序分析 (STA) 認(rèn)為是時序失敗, 而設(shè)計者認(rèn)為是正確的路徑。 通常會人為忽略這些warning, 但如果數(shù)量較多時, 就可能將其他

35、真正的問題錯過了。9. 避免使用Latch使用Latch 必須有所記錄, 可以用All_registers -level_sensitive 來報告設(shè)計中用到的Latch。 不希望使用Latch時, 應(yīng)該對所有輸入情況都對輸出賦值, 或者將條件賦值語句寫全, 如在if語句最后加一個else, case語句加defaults。當(dāng)你必須使用Latch時, 為了提高可測性, 需要加入測試邏輯。不完整的if和case語句導(dǎo)致不必要的latch的產(chǎn)生, 下面的語句中, DataOut會被綜合成鎖存器。 如果不希望在電路中使用鎖存器, 它就是錯誤。always (Cond)beginif (Cond)Da

36、taOut<= DataInend10. 避免使用門控時鐘使用門控時鐘(Gated clock)不利于移植, 可能引起毛刺, 帶來時序問題, 同時對掃描鏈的形成帶來問題。 門控鐘在低功耗設(shè)計中要用到, 但通常不要在模塊級代碼中使用。 可以借助于Power compiler來生成, 或者在頂層產(chǎn)生。11. 避免使用內(nèi)部產(chǎn)生的時鐘在設(shè)計中最好使用同步設(shè)。 如果要使用內(nèi)部時鐘, 可以考慮使用多個時鐘。 因為使用內(nèi)部時鐘的電路要加到掃描鏈中比較麻煩 ,降低了可測性, 也不利于使用約束條件來綜合。12. 避免使用內(nèi)部復(fù)位信號模塊中所有的寄存器最好同時復(fù)。 如果要使用內(nèi)部復(fù)位, 最好將其相關(guān)邏輯放在

37、單獨的模塊中, 這樣可以提高可閱讀性。13. 如果確實要使用內(nèi)部時鐘, 門控時鐘, 或內(nèi)部的復(fù)位信號 將它們放在頂層將這些信號的產(chǎn)生放在頂層的一個獨立模塊 這樣所有的子模塊分別使用單一的時鐘和復(fù)位信號 一般情況下內(nèi)部門控時鐘可以用同步置數(shù)替代 例如:module COUNT (Reset Enable Clk Qout) module COUNT (Reset EnableClk Qout)input Reset Enable Clk input Reset Enable Clkoutput 2:0 Qout output 2:0 Qoutreg2:0 Qout reg2:0 Qoutwire

38、 GATED_Clk= Clk& Enable always (posedge Clk)begin if (Reset) begin always (posedge GATED_Clkor posedgeReset) Qout= 1'b0begin end if (Reset) begin else if (Enable = 1'b1) begin Qout= 1'b0 if (Qout= 3'd7) begin end Qout= 1'b0else begin end if (Qout= 3'd7) begin else begin Q

39、out=1'b0 Qout= Qout+ 1'b1end endelse begin end Qout= Qout+ 1'b1 end end endmoduleend endendmodule6 附錄6.1 Module 編寫示例/* *Filename Author Description Called by Revision History mm/dd/yyRevision 1.0Email MCompany HuaweiTechnology .IncCopyright(c)1999, HuaweiTechnology Inc,All right reserved

40、* */Module module_name(Output_ports,/comment ; port descriptionInput_ports,/comment ; port descriptionIo_ports,/comment ; port descripttionClk_port,/comment ; port descriptionRst_port/comment ; port description);/port declarationsOutput 31:;0 Dataout;Input 31:0 Datain;Inout Bi_dir_signal;Input input1,Input2;/interrnal wire/regdeclarationsWire 31

溫馨提示

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

評論

0/150

提交評論