VerilogHDL-編程規(guī)范培訓(xùn)050719_第1頁
VerilogHDL-編程規(guī)范培訓(xùn)050719_第2頁
VerilogHDL-編程規(guī)范培訓(xùn)050719_第3頁
VerilogHDL-編程規(guī)范培訓(xùn)050719_第4頁
VerilogHDL-編程規(guī)范培訓(xùn)050719_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

VerilogHDL編程規(guī)范目的本規(guī)范的目的是提高書寫代碼的可讀性、可修改性、可重復(fù)性,優(yōu)化代碼綜合和仿真的結(jié)果,規(guī)范化公司的ASIC設(shè)計(jì)輸入。從而做到:①邏輯功能正確,②可快速仿真,③綜合結(jié)果最優(yōu),④可讀性較好。范圍本規(guī)范涉及VerilogHDL編碼風(fēng)格,編碼中應(yīng)注意的問題,Testbench的編碼等。本規(guī)范適用于Verilogmodel的任何一級(RTL,behavioral,gate_level),也適用于出于仿真、綜合或二者結(jié)合的目的而設(shè)計(jì)的模塊。定義FSM:有限狀態(tài)機(jī)偽路徑::靜態(tài)時序分析(STA)認(rèn)為是時序失敗,而設(shè)計(jì)者認(rèn)為是正確的路徑。規(guī)范內(nèi)容4.1VerilogHDL編碼風(fēng)格本規(guī)范適用于Verilogmodel的任何一級(RTL,behavioral,gate_level),也適用于出于仿真、綜合或二者結(jié)合的目的而設(shè)計(jì)的模塊。命名的習(xí)慣命名包含信號或變量出處、有效狀態(tài)等基本含義。有效而有意義的名字有效的命名并不一定要求將功能描述出來。如For(I=0;I<1024;I=I+1)指針I(yè)就沒有必要用loop_index作為指針名。用連貫的縮寫例如:Addraddress;Patrpoiter;Clkclock;Rstreset用最右邊的字符下劃線表示低電平有效,高電平有效的信號不得用下劃線表示。如:Rst_,Trdy_,Irdy,Idel大小寫原則名字的首字符大寫,其余小寫(但是parameter,integer定義的數(shù)值名要全部大寫,例如parameterCYCCLE=10.),兩個詞之間要用下劃線。例如:Data_in全局信號的名字中應(yīng)包含信號來源的一些信息。如:D_addr[7:2]中的”D”指明了地址是解碼模塊(Decodermodule)中的地址。同一信號在不同層次上應(yīng)保持一致性。避免使用保留字。如:in、out、x、z等不能作為變量、端口或模塊名。添加有意義的后綴,使信號更加明確。如表1所示。表1Modules1.頂層模塊應(yīng)只是內(nèi)部模塊間的互連。在沒有被調(diào)用的(頂層)模塊中,除了內(nèi)部的互連和模塊的調(diào)用外,盡量再做中間邏輯,如不能再出現(xiàn)對reg變量的賦值等。目的是為了更有效的綜合,因?yàn)轫攲幽K中出現(xiàn)了中間邏輯,Synopsys的designcompoler就不能把子模塊中的邏輯綜合到最優(yōu)。2.模塊應(yīng)在開始處注明文件名、功能描述、引用模塊、設(shè)計(jì)者、設(shè)計(jì)時間及版權(quán)信息等。例如:/*=====================*\Filename:RX_MUX.vAuthor:DongShengLiuDescription:Calledby:TopmoduleRevisionHistory:2005-4-4Revision1.0Company:whicc\*=====================*/3.不要對Input進(jìn)行驅(qū)動,在module內(nèi)不要存在沒有驅(qū)動的信號,更不能在模塊端口中出現(xiàn)沒有驅(qū)動的輸出信號,避免在elaborate和compile時產(chǎn)生warning,干擾錯誤定位。!!!對net和register類型的輸出要做聲明。否則,Verilog將假定它是一個寬的wire變量。Expression用括號來表示執(zhí)行的優(yōu)先級。方便閱讀。用一個函數(shù)(function)來代替表達(dá)式的多次重復(fù)。如果代碼中發(fā)現(xiàn)多次使用一個特殊的表達(dá)式,那么就用一個函數(shù)來代替,這樣在以后的版本升級時更便利,這種概念在行為級的代碼設(shè)計(jì)時同樣使用,經(jīng)常使用的一組描述可以寫到一個任務(wù)(task)中。IF語句1.每個If語句都應(yīng)有一個else語句和它對應(yīng)。沒有else語句會使綜合出的邏輯和RTL級的邏輯不同。如果條件為假時,則用一條空語句。例如:If(a==b)beginV1=2’b01;V2=2’b02;EndElse:;2.如果變量在If-else語句或case語句中做非完全賦值,則應(yīng)該沒有賦值的變量一個缺省值。case語句case語句通常綜合成一級多路復(fù)用器,如圖2的右邊部分所示,而If語句則綜合成優(yōu)先編碼的串接的多個多路復(fù)用器,如圖2的左邊部分所示。通常,使用case語句比if語句快,優(yōu)先編碼的結(jié)構(gòu)僅在信號的到達(dá)有先后時使用。Case語句比if條件賦值語句快。所有的case語句應(yīng)該有一個defaultcase,允許空語句Default:;圖2Writingfunctions在function的最后給function賦值。FuntionCompareVectors;//(Vector1,Vector2,Length)Input[199:0]Vector1,Vector2;Input[31:0]Length;//localvariablesIntegeri;RegEqual;Begini=0;Equal=1While((i<Length)&&Equal)beginIf(Vector2[i]!==1’bx)beginIf(Vector1[i]!==Vector2[i]);Else;EndI=i+1;EndCompareVectos=Equal;Endfunction函數(shù)中避免使用全局變量,否則容易引起HDL行為級仿真和gate級仿真的差異。如:上述程序中使用了全局變量ByteSel可能無意在別處修改了,導(dǎo)致錯誤結(jié)果,最好直接在端口加以定義。AssignmentVerilog支持兩種賦值:過程賦值(procedural)和連續(xù)賦值。過程賦值用于過程代碼(intial,always,taskorfunction)中給reg和integer變量賦值,而連續(xù)賦值一般給wire變量賦值。always@(敏感表),敏感表要完整,否則會引起仿真和綜合的結(jié)果不一致。以上語句在行為級仿真時,e的變化將不會使仿真器進(jìn)入該進(jìn)程,導(dǎo)致仿真結(jié)果錯誤。A.Assign/deassign僅用于仿真加速B.Force/release僅用于debugC.避免使用DisableD.對任何reg賦值用非阻塞賦值代替阻塞賦值,reg的非阻塞賦值要加單位延遲,但異步復(fù)位可不加。CombinatorialVsSequentialLogic如果一個事件持續(xù)幾個時鐘周期,設(shè)計(jì)時就有時序邏輯代替組合邏輯。如:在simulationpattern或reportfile中,盡量不用內(nèi)部信號,如果要用就把它們引到端口,這樣做并不增加芯片的面積。內(nèi)部總線不要懸空。在defult狀態(tài),要把它上拉或下拉。Macros為了保持代碼的可讀性,常用“define”做常數(shù)聲明。把“define”放在一個獨(dú)立的文件中。參數(shù)(parameter)必須在一個模塊中定義,不要傳送參數(shù)到模塊,“define”可以在任何地方定義,要把所有的“define”定義在一個文件中,在編譯源代碼時,首先要把這個文件讀入。如果需要宏的定義域在一個模塊中,就用參數(shù)代替。comments對更新的內(nèi)容要做注釋;在語法塊的結(jié)尾要做標(biāo)記;每個模塊都應(yīng)在模塊的開始做模塊級的注釋(參考前面標(biāo)準(zhǔn)模塊頭)在模塊端口列表中出現(xiàn)的端口信號,都應(yīng)做簡要的功能描述。FSMVerilogHDL狀態(tài)機(jī)的狀態(tài)分配;VerilogHDL描述狀態(tài)機(jī)必須由parameter分配好狀態(tài)。組合邏輯和時序邏輯要分開用不同的進(jìn)程。組合邏輯包括狀態(tài)譯碼和輸出,時序邏輯則是狀態(tài)寄存器的切換;必須包括對所有狀態(tài)都處理,不能出現(xiàn)無法處理的狀態(tài),使?fàn)顟B(tài)機(jī)失控。Mealy機(jī)的狀態(tài)和輸入有關(guān),而Moore機(jī)的狀態(tài)轉(zhuǎn)換和輸入無關(guān)。Mealy狀態(tài)機(jī)的例子如下:4.2代碼編寫中常出現(xiàn)的問題4.2.1.在for-loop中包括不變的表達(dá)式,浪費(fèi)運(yùn)算時間for-loop中的第一條語句始終不變,浪費(fèi)運(yùn)行時間。4.2.2資源共享問題由于組合邏輯的位置的不同而引起過多的觸發(fā)器綜合,如下面的例子:謹(jǐn)慎使用異步邏輯??紤]綜合的執(zhí)行時間;避免點(diǎn)到點(diǎn)的例外;避免偽路徑;避免使用門控時鐘;避免使用內(nèi)部產(chǎn)生的時鐘

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論