VerilogHDL-編程規(guī)范培訓(xùn)_第1頁(yè)
VerilogHDL-編程規(guī)范培訓(xùn)_第2頁(yè)
VerilogHDL-編程規(guī)范培訓(xùn)_第3頁(yè)
VerilogHDL-編程規(guī)范培訓(xùn)_第4頁(yè)
VerilogHDL-編程規(guī)范培訓(xùn)_第5頁(yè)
已閱讀5頁(yè),還剩7頁(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)介

VerilogHDL編程規(guī)范目的本規(guī)范的目的是提高書(shū)寫代碼的可讀性、可修改性、可重復(fù)性,優(yōu)化代碼綜合和仿真的結(jié)果,規(guī)范化公司的ASIC設(shè)計(jì)輸入。從而做到:①邏輯功能正確,②可快速仿真,③綜合結(jié)果最優(yōu),④可讀性較好。范圍本規(guī)范涉及VerilogHDL編碼風(fēng)格,編碼中應(yīng)注意的問(wèn)題,Testbench的編碼等。本規(guī)范適用于Verilogmodel的任何一級(jí)(RTL,behavioral,gate_level),也適用于出于仿真、綜合或二者結(jié)合的目的而設(shè)計(jì)的模塊。定義FSM:有限狀態(tài)機(jī)偽路徑::靜態(tài)時(shí)序分析(STA)認(rèn)為是時(shí)序失敗,而設(shè)計(jì)者認(rèn)為是正確的路徑。規(guī)范內(nèi)容VerilogHDL編碼風(fēng)格本規(guī)范適用于Verilogmodel的任何一級(jí)(RTL,behavioral,gate_level),也適用于出于仿真、綜合或二者結(jié)合的目的而設(shè)計(jì)的模塊。命名的習(xí)慣命名包含信號(hào)或變量出處、有效狀態(tài)等基本含義。有效而有意義的名字有效的命名并不一定要求將功能描述出來(lái)。如For(I=0;I<1024;I=I+1)指針I(yè)就沒(méi)有必要用loop_index作為指針名。用連貫的縮寫例如:Addraddress;Patr poiter;Clkclock;Rstreset用最右邊的字符下劃線表示低電平有效,高電平有效的信號(hào)不得用下劃線表示。如:Rst_,Trdy_,Irdy,Idel大小寫原則名字的首字符大寫,其余小寫(但是parameter,integer定義的數(shù)值名要全部大寫,例如parameterCYCCLE=10.),兩個(gè)詞之間要用下劃線。例如:Data_in全局信號(hào)的名字中應(yīng)包含信號(hào)來(lái)源的一些信息。如:D_addr[7:2]中的"D”指明了地址是解碼模塊(Decodermodule)中的地址。同一信號(hào)在不同層次上應(yīng)保持一致性。避免使用保留字。如:in、out、x、z等不能作為變量、端口或模塊名。添加有意義的后綴,使信號(hào)更加明確。如表1所示。表14.1.2Modules.頂層模塊應(yīng)只是內(nèi)部模塊間的互連。在沒(méi)有被調(diào)用的(頂層)模塊中,除了內(nèi)部的互連和模塊的調(diào)用外,盡量再做中間邏輯,如不能再出現(xiàn)對(duì)reg變量的賦值等。目的是為了更有效的綜合,因?yàn)轫攲幽K中出現(xiàn)了中間邏輯,Synopsys的designcompoler就不能把子模塊中的邏輯綜合到最優(yōu)。模塊應(yīng)在開(kāi)始處注明文件名、功能描述、引用模塊、設(shè)計(jì)者、設(shè)計(jì)時(shí)間及版權(quán)信息等。例如:/*=====================*\Filename:RX_MUX.vAuthor:DongShengLiuDescription:Calledby:TopmoduleRevisionHistory:2005-4-4Revision1.0Company:whicc\*=====================*/不要對(duì)Input進(jìn)行驅(qū)動(dòng),在module內(nèi)不要存在沒(méi)有驅(qū)動(dòng)的信號(hào),更不能在模塊端口中出現(xiàn)沒(méi)有驅(qū)動(dòng)的輸出信號(hào),避免在elaborate和compile時(shí)產(chǎn)生warning,干擾錯(cuò)誤定位。!!!每行限制在80個(gè)字符以內(nèi)。用一個(gè)時(shí)鐘的上升沿或下降沿采樣信號(hào),不能一會(huì)用上升沿,一會(huì)用下降沿。如果既要用上升沿,又要用下降沿,則應(yīng)分成兩個(gè)模塊設(shè)計(jì)。建議在頂層模塊中對(duì)Clock做一非門,在層次模塊中如果要用時(shí)鐘下降沿可以用非門產(chǎn)生的PosedgeClk_,這樣做的好處使得在整個(gè)設(shè)計(jì)中采用同一種時(shí)鐘沿觸發(fā),有利于綜合。在模塊中要用明了的注釋。對(duì)信號(hào)、參量、引腳、模塊、函數(shù)及進(jìn)程等加以說(shuō)明,便于閱讀和維護(hù)。Module名要大寫,且應(yīng)與文件名一致。如:ModuleCRC();模塊輸出寄存器化(如圖1所示),使得輸出的驅(qū)動(dòng)強(qiáng)度和輸入的延遲可以預(yù)測(cè),從而使得模塊額綜合過(guò)程簡(jiǎn)單。圖1.輸出驅(qū)動(dòng)強(qiáng)度都等于平均的觸發(fā)器驅(qū)動(dòng)強(qiáng)度;.輸入延遲始終等于通過(guò)觸發(fā)器的路徑,近于相等。.將關(guān)鍵路徑邏輯和非關(guān)鍵路徑邏輯放在不同模塊。保證DC可以對(duì)關(guān)鍵路徑模塊實(shí)現(xiàn)速度優(yōu)化,而對(duì)非關(guān)鍵路徑模塊實(shí)施面積優(yōu)化。在同一模塊DC無(wú)法實(shí)現(xiàn)不同的策略。.將相關(guān)的組合邏輯放在同一模塊。有助于DC對(duì)其進(jìn)行優(yōu)化,因?yàn)镈C通常不能越過(guò)模塊的邊界來(lái)優(yōu)化邏輯。.電路中調(diào)用的module名用TRxx標(biāo)示。NetandRegister.一個(gè)reg變量只能在一個(gè)always語(yǔ)句中賦值。.對(duì)任何一個(gè)Register的賦值要加單位延遲,對(duì)異步復(fù)位可以不加。.向量的有效位的順序一般是從大到小。盡管有效位的順序是自由的。但不利代碼的維護(hù)。如Data[-4:0],則LSB[-1][-2][-3][-4]MSB,或Data[0:4],則LSB[4][3][2][1]MSB.推薦用Data[4:0]。.對(duì)net和register類型的輸出要做聲明。否則,Verilog將假定它是一個(gè)寬的wire變量。Expression.用括號(hào)來(lái)表示執(zhí)行的優(yōu)先級(jí)。方便閱讀。.用一個(gè)函數(shù)(function)來(lái)代替表達(dá)式的多次重復(fù)。如果代碼中發(fā)現(xiàn)多次使用一個(gè)特殊的表達(dá)式,那么就用一個(gè)函數(shù)來(lái)代替,這樣在以后的版本升級(jí)時(shí)更便利,這種概念在行為級(jí)的代碼設(shè)計(jì)時(shí)同樣使用,經(jīng)常使用的一組描述可以寫到一個(gè)任務(wù)(task)中。IF語(yǔ)句.每個(gè)If語(yǔ)句都應(yīng)有一個(gè)else語(yǔ)句和它對(duì)應(yīng)。沒(méi)有else語(yǔ)句會(huì)使綜合出的邏輯和RTL級(jí)的邏輯不同。如果條件為假時(shí),則用一條空語(yǔ)句。例如:If(a==b)beginV1=2’b01;V2=2’b02;EndElse:;.如果變量在If-else語(yǔ)句或case語(yǔ)句中做非完全賦值,則應(yīng)該沒(méi)有賦值的變量一個(gè)缺省值。case語(yǔ)句case語(yǔ)句通常綜合成一級(jí)多路復(fù)用器,如圖2的右邊部分所示,而If語(yǔ)句則綜合成優(yōu)先編碼的串接的多個(gè)多路復(fù)用器,如圖2的左邊部分所示。通常,使用case語(yǔ)句比if語(yǔ)句快,優(yōu)先編碼的結(jié)構(gòu)僅在信號(hào)的到達(dá)有先后時(shí)使用。Case語(yǔ)句比if條件賦值語(yǔ)句快。所有的case語(yǔ)句應(yīng)該有一個(gè)defaultcase,允許空語(yǔ)句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行為級(jí)仿真和gate級(jí)仿真的差異。如:'"瑜I"兩防sg%r[7:0]Lmgthtl^9i(f(ByteS^護(hù)哪品冷呷E毗《//compartfoww1byU.…上述程序中使用了全局變量ByteSel可能無(wú)意在別處修改了,導(dǎo)致錯(cuò)誤結(jié)果,最好直接在端口加以定義。 啊如知也牖一期臃蛔prn.?4.1.8AssignmentVerilog支持兩種賦值:過(guò)程賦值(procedural)和連續(xù)賦值。過(guò)程賦值用于過(guò)程代碼(intial,always,taskorfunction)中給reg和integer變量賦值,而連續(xù)賦值一般給wire變量賦值。always@(敏感表),敏感表要完整,否則會(huì)引起仿真和綜合的結(jié)果不一致。aiwayB@(<iOTC10打田”總以上語(yǔ)句在行為級(jí)仿真時(shí),e的變化將不會(huì)使仿真器進(jìn)入該進(jìn)程,導(dǎo)致仿真結(jié)果錯(cuò)誤。A.Assign/deassign僅用于仿真加速B.Force/release僅用于debugC.避免使用DisableD.對(duì)任何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.如果一個(gè)事件持續(xù)幾個(gè)時(shí)鐘周期,設(shè)計(jì)時(shí)就有時(shí)序邏輯代替組合邏輯。如:如*WimCt_2<?4;如*WimCt_2<?4;//itccarriesinfo.LastoverseveralclockcycleiAssignCt_24_?4■(count8bil(7^]8%24)&(count8bit[7^]<=那么這種設(shè)計(jì)轎球合出兩個(gè)8比特的加法叁,而且?產(chǎn)生毛剌,對(duì)于這樣的電路.要采用時(shí)序設(shè)計(jì),代碼如下:Always@(powdd^Clkorneg0dteRstJH"J?wJCiJUjUolW;Ebeifgn曬網(wǎng)7期?-82)期第if(cm翻嬲<7期-/M3)Ct24?4G樨蜘Eate.;.在simulationpattern或reportfile中,盡量不用內(nèi)部信號(hào),如果要用就把它們引到端口,這樣做并不增加芯片的面積。.內(nèi)部總線不要懸空。在defult狀態(tài),要把它上拉或下拉。小球酸 |必|oe3XAssign tempi 煙:鵬■卻2732張郵蛇f:盟%XHLSSK ”Macros.為了保持代碼的可讀性,常用“define”做常數(shù)聲明。把“define”放在一個(gè)獨(dú)立的文件中。.參數(shù)(parameter)必須在一個(gè)模塊中定義,不要傳送參數(shù)到模塊,“define”可以在任何地方定義,要把所有的“define”定義在一個(gè)文件中,在編譯源代碼時(shí),首先要把這個(gè)文件讀入。如果需要宏的定義域在一個(gè)模塊中,就用參數(shù)代替。comments對(duì)更新的內(nèi)容要做注釋;在語(yǔ)法塊的結(jié)尾要做標(biāo)記;每個(gè)模塊都應(yīng)在模塊的開(kāi)始做模塊級(jí)的注釋(參考前面標(biāo)準(zhǔn)模塊頭)在模塊端口列表中出現(xiàn)的端口信號(hào),都應(yīng)做簡(jiǎn)要的功能描述。FSMVerilogHDL狀態(tài)機(jī)的狀態(tài)分配;VerilogHDL描述狀態(tài)機(jī)必須由parameter分配好狀態(tài)。組合邏輯和時(shí)序邏輯要分開(kāi)用不同的進(jìn)程。組合邏輯包括狀態(tài)譯碼和輸出,時(shí)序邏輯則是狀態(tài)寄存器的切換;必須包括對(duì)所有狀態(tài)都處理,不能出現(xiàn)無(wú)法處理的狀態(tài),使?fàn)顟B(tài)機(jī)失控。Mealy機(jī)的狀態(tài)和輸入有關(guān),而Moore機(jī)的狀態(tài)轉(zhuǎn)換和輸入無(wú)關(guān)。Mealy狀態(tài)機(jī)的例子如下: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)的問(wèn)題.在for-loop中包括不變的表達(dá)式,浪費(fèi)運(yùn)算時(shí)間紳gUDb^gbfSigi^SitS;,enuffor-loop中的第一條語(yǔ)句始終不變,浪費(fèi)運(yùn)行時(shí)間。資源共享問(wèn)題條件算子中不存在條避共生如雷竭依徽卻才作今財(cái),伍+蜘癖演使用兩個(gè)搦法㈱;而等數(shù)的條件值加加e喳包幽典型晏,如…ei-? ■ 一.MfCW?-.etee+褥只要加法壽的輸入*復(fù)用Jit可以實(shí)融接舞的共享,使用一個(gè)加速II實(shí)現(xiàn)由于組合邏輯的位置的不同而引起過(guò)多的觸發(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)旗號(hào)了,若Ph

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

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論