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

下載本文檔

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

文檔簡介

VerilogHDL編程規(guī)范目的本規(guī)范的目的是提高書寫代碼的可讀性、可修改性、可重復(fù)性,優(yōu)化代碼綜合和仿真的結(jié)果,規(guī)范化公司的ASIC設(shè)計輸入。從而做到:①邏輯功能正確,②可快速仿真,③綜合結(jié)果最優(yōu),④可讀性較好。范圍本規(guī)范涉及VerilogHDL編碼風(fēng)格,編碼中應(yīng)注意的問題,Testbench的編碼等。本規(guī)范適用于Verilogmodel的任何一級(RTL,behavioral,gate_level),也適用于出于仿真、綜合或二者結(jié)合的目的而設(shè)計的模塊。定義FSM:有限狀態(tài)機偽路徑::靜態(tài)時序分析(STA)認為是時序失敗,而設(shè)計者認為是正確的路徑。規(guī)范內(nèi)容VerilogHDL編碼風(fēng)格本規(guī)范適用于Verilogmodel的任何一級(RTL,behavioral,gate_level),也適用于出于仿真、綜合或二者結(jié)合的目的而設(shè)計的模塊。命名的習(xí)慣命名包含信號或變量出處、有效狀態(tài)等基本含義。有效而有意義的名字有效的命名并不一定要求將功能描述出來。如For(I=0;I<1024;I=I+1)指針I(yè)就沒有必要用loop_index作為指針名。用連貫的縮寫例如:Addraddress;Patr poiter;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所示。表14.1.2Modules.頂層模塊應(yīng)只是內(nèi)部模塊間的互連。在沒有被調(diào)用的(頂層)模塊中,除了內(nèi)部的互連和模塊的調(diào)用外,盡量再做中間邏輯,如不能再出現(xiàn)對reg變量的賦值等。目的是為了更有效的綜合,因為頂層模塊中出現(xiàn)了中間邏輯,Synopsys的designcompoler就不能把子模塊中的邏輯綜合到最優(yōu)。模塊應(yīng)在開始處注明文件名、功能描述、引用模塊、設(shè)計者、設(shè)計時間及版權(quán)信息等。例如:/*=====================*\Filename:RX_MUX.vAuthor:DongShengLiuDescription:Calledby:TopmoduleRevisionHistory:2005-4-4Revision1.0Company:whicc\*=====================*/不要對Input進行驅(qū)動,在module內(nèi)不要存在沒有驅(qū)動的信號,更不能在模塊端口中出現(xiàn)沒有驅(qū)動的輸出信號,避免在elaborate和compile時產(chǎn)生warning,干擾錯誤定位。!!!每行限制在80個字符以內(nèi)。用一個時鐘的上升沿或下降沿采樣信號,不能一會用上升沿,一會用下降沿。如果既要用上升沿,又要用下降沿,則應(yīng)分成兩個模塊設(shè)計。建議在頂層模塊中對Clock做一非門,在層次模塊中如果要用時鐘下降沿可以用非門產(chǎn)生的PosedgeClk_,這樣做的好處使得在整個設(shè)計中采用同一種時鐘沿觸發(fā),有利于綜合。在模塊中要用明了的注釋。對信號、參量、引腳、模塊、函數(shù)及進程等加以說明,便于閱讀和維護。Module名要大寫,且應(yīng)與文件名一致。如:ModuleCRC();模塊輸出寄存器化(如圖1所示),使得輸出的驅(qū)動強度和輸入的延遲可以預(yù)測,從而使得模塊額綜合過程簡單。圖1.輸出驅(qū)動強度都等于平均的觸發(fā)器驅(qū)動強度;.輸入延遲始終等于通過觸發(fā)器的路徑,近于相等。.將關(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)化邏輯。.電路中調(diào)用的module名用TRxx標(biāo)示。NetandRegister.一個reg變量只能在一個always語句中賦值。.對任何一個Register的賦值要加單位延遲,對異步復(fù)位可以不加。.向量的有效位的順序一般是從大到小。盡管有效位的順序是自由的。但不利代碼的維護。如Data[-4:0],則LSB[-1][-2][-3][-4]MSB,或Data[0:4],則LSB[4][3][2][1]MSB.推薦用Data[4:0]。.對net和register類型的輸出要做聲明。否則,Verilog將假定它是一個寬的wire變量。Expression.用括號來表示執(zhí)行的優(yōu)先級。方便閱讀。.用一個函數(shù)(function)來代替表達式的多次重復(fù)。如果代碼中發(fā)現(xiàn)多次使用一個特殊的表達式,那么就用一個函數(shù)來代替,這樣在以后的版本升級時更便利,這種概念在行為級的代碼設(shè)計時同樣使用,經(jīng)常使用的一組描述可以寫到一個任務(wù)(task)中。IF語句.每個If語句都應(yīng)有一個else語句和它對應(yīng)。沒有else語句會使綜合出的邏輯和RTL級的邏輯不同。如果條件為假時,則用一條空語句。例如:If(a==b)beginV1=2’b01;V2=2’b02;EndElse:;.如果變量在If-else語句或case語句中做非完全賦值,則應(yīng)該沒有賦值的變量一個缺省值。case語句case語句通常綜合成一級多路復(fù)用器,如圖2的右邊部分所示,而If語句則綜合成優(yōu)先編碼的串接的多個多路復(fù)用器,如圖2的左邊部分所示。通常,使用case語句比if語句快,優(yōu)先編碼的結(jié)構(gòu)僅在信號的到達有先后時使用。Case語句比if條件賦值語句快。所有的case語句應(yīng)該有一個defaultcase,允許空語句Default:;Writingfunctions.在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級仿真的差異。如:'"瑜I"兩防sg%r[7:0]Lmgthtl^9i(f(ByteS^護哪品冷呷E毗《//compartfoww1byU.…上述程序中使用了全局變量ByteSel可能無意在別處修改了,導(dǎo)致錯誤結(jié)果,最好直接在端口加以定義。 啊如知也牖一期臃蛔prn.?4.1.8AssignmentVerilog支持兩種賦值:過程賦值(procedural)和連續(xù)賦值。過程賦值用于過程代碼(intial,always,taskorfunction)中給reg和integer變量賦值,而連續(xù)賦值一般給wire變量賦值。always@(敏感表),敏感表要完整,否則會引起仿真和綜合的結(jié)果不一致。aiwayB@(<iOTC10打田”總以上語句在行為級仿真時,e的變化將不會使仿真器進入該進程,導(dǎo)致仿真結(jié)果錯誤。A.Assign/deassign僅用于仿真加速B.Force/release僅用于debugC.避免使用DisableD.對任何reg賦值用非阻塞賦值代替阻塞賦值,reg的非阻塞賦值要加單位延遲,但異步復(fù)位可不加。Hpnoritizethe*ifconditiou.inifstatement加oa_bla*inganigElseif(Softjst_aU)

Begin軸黎s#ujflyHpnoritizethe*ifconditiou.inifstatement加oa_bla*inganigElseif(Softjst_aU)

Begin軸黎s#ujflyRegjbotfujdly朝Bfoe謝瞞Rega<-#u_dlylUgb<=#u?dlyEnd物頻融加Re野v=#u_&yReg<=#L<fiyEado;iniVe”

麗幻鵬薇;Reg??I;SU;"addunitdehyAlwajv^(pcMedgeClkornegedgeRstJ「*Be血IfCRfitJWgmRegi<=0;llfgb<^9;Eradf!endkegn,Rcgt>assignment4.1.9CombinatorialVsSequentialLogicErad1.如果一個事件持續(xù)幾個時鐘周期,設(shè)計時就有時序邏輯代替組合邏輯。如:如*WimCt_2<?4;如*WimCt_2<?4;//itccarriesinfo.LastoverseveralclockcycleiAssignCt_24_?4■(count8bil(7^]8%24)&(count8bit[7^]<=那么這種設(shè)計轎球合出兩個8比特的加法叁,而且?產(chǎn)生毛剌,對于這樣的電路.要采用時序設(shè)計,代碼如下:Always@(powdd^Clkorneg0dteRstJH"J?wJCiJUjUolW;Ebeifgn曬網(wǎng)7期?-82)期第if(cm翻嬲<7期-/M3)Ct24?4G樨蜘Eate.;.在simulationpattern或reportfile中,盡量不用內(nèi)部信號,如果要用就把它們引到端口,這樣做并不增加芯片的面積。.內(nèi)部總線不要懸空。在defult狀態(tài),要把它上拉或下拉。小球酸 |必|oe3XAssign tempi 煙:鵬■卻2732張郵蛇f:盟%XHLSSK ”Macros.為了保持代碼的可讀性,常用“define”做常數(shù)聲明。把“define”放在一個獨立的文件中。.參數(shù)(parameter)必須在一個模塊中定義,不要傳送參數(shù)到模塊,“define”可以在任何地方定義,要把所有的“define”定義在一個文件中,在編譯源代碼時,首先要把這個文件讀入。如果需要宏的定義域在一個模塊中,就用參數(shù)代替。comments對更新的內(nèi)容要做注釋;在語法塊的結(jié)尾要做標(biāo)記;每個模塊都應(yīng)在模塊的開始做模塊級的注釋(參考前面標(biāo)準模塊頭)在模塊端口列表中出現(xiàn)的端口信號,都應(yīng)做簡要的功能描述。FSMVerilogHDL狀態(tài)機的狀態(tài)分配;VerilogHDL描述狀態(tài)機必須由parameter分配好狀態(tài)。組合邏輯和時序邏輯要分開用不同的進程。組合邏輯包括狀態(tài)譯碼和輸出,時序邏輯則是狀態(tài)寄存器的切換;必須包括對所有狀態(tài)都處理,不能出現(xiàn)無法處理的狀態(tài),使?fàn)顟B(tài)機失控。Mealy機的狀態(tài)和輸入有關(guān),而Moore機的狀態(tài)轉(zhuǎn)換和輸入無關(guān)。Mealy狀態(tài)機的例子如下:Curr?*tStat:?z OvtlfP*raa?t?r,0-0.517,*lwa>w?(p0??d0?ClJtox*a?g?tfg?JWt_J//?tat?v^tftorflip-tlopgifn*me)-curr?n忸eat-Mgo:?4■Curr*nt5t?t?<■<u_dlyMucCSfca“‘*Zway??(IniorIn2gCurrants//output?ad?eat?vwecord?ootf?fcrcaU>iji?ei(MMl)??>>fcumuntsm)tfO;b?91nIfuKtStM<?ihi_dlymOutl<-fu_dly1*bOi*ndSI;if(ini)b^gin<->u_dlySO;gE**i_(Uy3’?I<?beginMuctSt?t?<-fu_dly52/Outl<**n_dly7zn2/aodendow?ncfnodul*4.2代碼編寫中常出現(xiàn)的問題.在for-loop中包括不變的表達式,浪費運算時間紳gUDb^gbfSigi^SitS;,enuffor-loop中的第一條語句始終不變,浪費運行時間。資源共享問題條件算子中不存在條避共生如雷竭依徽卻才作今財,伍+蜘癖演使用兩個搦法㈱;而等數(shù)的條件值加加e喳包幽典型晏,如…ei-? ■ 一.MfCW?-.etee+褥只要加法壽的輸入*復(fù)用Jit可以實融接舞的共享,使用一個加速II實現(xiàn)由于組合邏輯的位置的不同而引起過多的觸發(fā)器綜合,如下面的例子:MukCOUNT恤豳與g毒康Ofs^vt A^^s;Avwr CSk^XUg MBtafRtg: ZW Gnutt;i寫建碑J.做一件物3CiMMtf.電與Cwwtf+I;2瞋小喊融f<*電聞.COWU;Esii,4在遴程里的人■鬻糠暫網(wǎng)旗號了,若Ph

痂<晦曲球必門面B珈=則TOC\o"1-5"\h\z: ④"翱S]Input K帆 AMtB^SfJ^r m國 。<吟Mw^P5 <Wbegin//synchronous貧迷通0^^4枚_曲,;the5^4他的S??tf土巖■蝙冊圈?,aasH^£^bm?ZMCOUNT船告逐耨單開且有3個觸發(fā)著.謹慎使用異步邏輯??紤]綜合的執(zhí)行時間;避免點到點的例外;避免偽路徑;避免使用門控時鐘;避免使用內(nèi)部產(chǎn)生的時鐘;避免使用內(nèi)部的復(fù)位信號的執(zhí)行時間;逋常會推薦將模塊劃分/越小越好,事實上要從實除

溫馨提示

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

評論

0/150

提交評論