




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VERILOG語言編寫規(guī)范1目的本規(guī)范的目的是提升書寫代碼的可讀性結(jié)果,指導(dǎo)設(shè)計(jì)工程師使用VerilogHDL計(jì)輸入進(jìn)而做到可改正性可重用性,優(yōu)化代碼綜合和仿真規(guī)范代碼和優(yōu)化電路,規(guī)范化企業(yè)的ASIC設(shè)邏輯功能正確2.可迅速仿真3.綜合結(jié)果最優(yōu)假如是hardwaremodel)4.可讀性較好。2范圍本規(guī)范波及VerilogHDL編碼風(fēng)格,編碼中應(yīng)注意的問題,Testbench的編碼等。本規(guī)范合用于Verilogmodel的任何一級(jí)(RTLbehavioral,gate_level)用于出于仿真,綜合或兩者聯(lián)合的目的而設(shè)計(jì)的模塊。,也適3定義VerilogHDL:Verilog硬件描繪語言FSM
2、:有限狀態(tài)機(jī)偽路徑:靜態(tài)時(shí)序剖析(STA)以為是時(shí)序失敗,而設(shè)計(jì)者以為是正確的路徑引用標(biāo)準(zhǔn)和參照資料以下標(biāo)準(zhǔn)包含的條則經(jīng)過在本標(biāo)準(zhǔn)中引用而組成本標(biāo)準(zhǔn)的條則在標(biāo)準(zhǔn)第一版時(shí)所示版本均為有效所有標(biāo)準(zhǔn)都會(huì)被訂正使用本標(biāo)準(zhǔn)的各方應(yīng)商討使用以下標(biāo)準(zhǔn)最新版本的可能性ActelHDLCodingStyleGuiderSunMicrosystemsRevisionVerilogStyleandCodingGuidelines5規(guī)范內(nèi)容Verilog編碼風(fēng)格本章節(jié)中提到的Verilogbehavioral,gate_level)編碼規(guī)則和建議適應(yīng)于Verilogmodel的任何一級(jí)(也合用于出于仿真,綜合或兩者聯(lián)
3、合的目的而設(shè)計(jì)的模RTL塊。命名規(guī)范選擇存心義的信號(hào)和變量名,對(duì)設(shè)計(jì)是十分重要的。命名包含信號(hào)或變量諸如出處,有效狀態(tài)等基本含義下邊給出一些命名的規(guī)則。用存心義而有效的名字有效的命名有時(shí)其實(shí)不是要求將功能描繪出來如For(I=0;I1024;I=I+1)MemI=#132b0;For語句中的循環(huán)指針I(yè)就沒必需用loop_index作為指針名。用連結(jié)的縮寫長(zhǎng)的名字對(duì)書寫和記憶會(huì)帶來不便,甚至帶來錯(cuò)誤采納縮寫時(shí)應(yīng)注意同一信號(hào)在模塊中的一致性??s寫的例子以下:AddraddressPntrpointerClkclockRstreset用名字前加小寫n表示低電平有效高電平有效的信號(hào)不得以下劃線表示短暫
4、的引擎信號(hào)建議采納高有效如nRst,nTrdy,nIrdynIdsel.4.大小寫原則名字一般首字符大寫,其余小寫(但parameter,integer大寫),兩個(gè)詞之間要用下劃線連結(jié)(或第二個(gè)單詞首字母大寫)定義的數(shù)值名可所有用如:Packet_addr,Data_in,Mem_wr,Mem_ce_Or:PacketAddr,DataIn,MemWr,MemCe全局信號(hào)名字中應(yīng)包含信號(hào)根源的一些信息如:D_addr7:2這里的D指了然地點(diǎn)是解碼模塊(Decodermodule)中的地點(diǎn).同一信號(hào)在不一樣層次應(yīng)保持一致性自己定義的常數(shù)種類等用大寫表記如:parameterCYCLE=100.8
5、防止使用保存字如inoutxz等不可以夠做為變量端口或模塊名增添存心義的后綴使信號(hào)名更為明確常用的后綴以下芯片的雙向信號(hào)-xbio芯片的三態(tài)輸出_xz芯片的漏極開路輸出_xod芯片原始輸出信號(hào)_xo芯片原始輸入信號(hào)_xi降落沿有效的存放器_f連到三態(tài)輸出的信號(hào)_z存放前的信號(hào)_next時(shí)鐘信號(hào)_ClkModules頂層模塊應(yīng)不過內(nèi)部模塊間的互連Verilog設(shè)計(jì)一般都是層次型的設(shè)計(jì),也就是在設(shè)計(jì)中會(huì)出現(xiàn)一個(gè)或多個(gè)模塊,模塊間的調(diào)用在所不免??砂言O(shè)計(jì)比喻成樹,被調(diào)用的模塊就是樹葉,沒被調(diào)用的模塊就是樹根,那么在這個(gè)樹根模塊中,除了內(nèi)部的互連和模塊的調(diào)用外,盡量防止再做邏輯,如:不可以再出現(xiàn)對(duì)re
6、g變量賦值等,這樣做的目的是為了更有效的綜合,因?yàn)樵陧攲幽K中出現(xiàn)中間邏輯,Synopsys的designcompiler就不可以把子模塊中的邏輯綜合到最優(yōu)。每一個(gè)模塊應(yīng)在開始處注明文件名功能描繪引用模塊設(shè)計(jì)者設(shè)計(jì)時(shí)間及版權(quán)信息等如FilenameAuthorwhqDescriptionFiledescriptionCalledbyTopmoduleRevisionHistorytimeyy-mm-ddRevisionEmailCopyright(c)1999,Allrightreserved3.不要對(duì)Input進(jìn)行驅(qū)動(dòng),在端口中出現(xiàn)沒有驅(qū)動(dòng)的輸出信號(hào),module內(nèi)不要存在沒有驅(qū)動(dòng)的信號(hào),防
7、止在仿真或綜合時(shí)產(chǎn)生warning更不可以在模塊,擾亂錯(cuò)誤定位每行應(yīng)限制在80個(gè)字符之內(nèi)以保持代碼的清楚雅觀和層次感一條語句占用一行假如較長(zhǎng),高出80個(gè)字符則要換行。5.電路中調(diào)用的module名用Uxx(name_based)的調(diào)用而非鑒于次序的標(biāo)示。向量大小表示要清楚,(order_based)。采納鑒于名字InstanceUInstance2(.DataOut(DOUT),.DataIn(DIN),.Cs_(Cs_);6.用一個(gè)時(shí)鐘的上沿或下沿采樣信號(hào),不可以一會(huì)兒用上沿,一會(huì)兒用下沿。假如既要用上沿又要用下沿,則應(yīng)分紅兩個(gè)模塊設(shè)計(jì)。建議在頂層模塊中對(duì)Clock做一非門,在層次模塊中假如
8、要用時(shí)鐘下沿就能夠用非門產(chǎn)生的PosedgeClk_,這樣的好處是在整個(gè)設(shè)計(jì)中采納同一種時(shí)鐘沿觸發(fā),有益于綜合。鑒于時(shí)鐘的綜合策略在模塊中增添說明對(duì)信號(hào),參量,引腳,模塊,函數(shù)及進(jìn)度等加以說明,便于閱讀與保護(hù)。Module名要用大寫標(biāo)示,且應(yīng)與文件名保持一致。如ModuleDFF_ASYNC_RST(Reset,Clk,Data,Qout);嚴(yán)格芯片級(jí)模塊的區(qū)分只有頂層包含IO引腳(pads),中間層是時(shí)鐘產(chǎn)生模塊,JTAG,芯片的內(nèi)核(CORE),這樣便于對(duì)每個(gè)模塊加以拘束仿真,對(duì)時(shí)鐘也能夠認(rèn)真仿真。模塊輸出存放器化對(duì)所有模塊的輸出加以存放(如圖1)使得輸出的驅(qū)動(dòng)強(qiáng)度和輸入的延緩能夠展望,從
9、而使得模塊的綜合過程更簡(jiǎn)單輸出驅(qū)動(dòng)的強(qiáng)度都等于均勻的觸發(fā)器驅(qū)動(dòng)強(qiáng)度圖1將重點(diǎn)路徑邏輯和非重點(diǎn)路徑邏輯放在不一樣模塊保證DC能夠?qū)χ攸c(diǎn)路徑模塊實(shí)現(xiàn)速度優(yōu)化,而對(duì)非重點(diǎn)路徑模塊實(shí)行面積優(yōu)化在。同一模塊DC沒法實(shí)現(xiàn)不一樣的綜合策略,將有關(guān)的組合邏輯放在同一模塊,有助于DC對(duì)其進(jìn)行優(yōu)化因?yàn)镈C往常不可以超出模塊的界限來優(yōu)化邏輯。NetandRegister一個(gè)reg變量只好在一個(gè)always語句中賦值向量有效位次序的定義一般是從大數(shù)到小數(shù)只管定義有效位的次序很自由,但假如采納毫無規(guī)則的定義必然會(huì)給作者和讀代碼的人帶來疑惑4則,如Data-4:0,則LSB0-1-2-3-4MSB,或Data0:LSB4
10、3210MSB這兩種狀況的定義都不太好,介紹Data4:0這類格式的定義。3.對(duì)netVerilog和register種類的輸出要做申明將假設(shè)它為一位寬的wire變量。在PORT中。假如一個(gè)信號(hào)名沒做申明4.線網(wǎng)的多種種類。存放器的種類。Expressions用括號(hào)來表示履行的優(yōu)先級(jí)只管操作符自己有優(yōu)先次序,但用括號(hào)來表示優(yōu)先級(jí)對(duì)讀者更清楚,更存心義。If(alpha=delta).比下邊的表達(dá)更合意If(alpha=delta).(判斷邏輯應(yīng)是化簡(jiǎn)事后的最簡(jiǎn)形式?。┯靡粋€(gè)函數(shù)(function)來取代表達(dá)式的多次重復(fù)假如代碼中發(fā)現(xiàn)多次使用一個(gè)特別的表達(dá)式,那么就用一個(gè)函數(shù)來取代,后的版本升級(jí)
11、時(shí)更便利,這類觀點(diǎn)在做行為級(jí)的代碼設(shè)計(jì)時(shí)相同使用,一組描繪能夠?qū)懙揭粋€(gè)任務(wù)(task)中。這樣在以常常使用的IF語句向量比較時(shí)比較的向量要相等當(dāng)比較向量時(shí)verilog將對(duì)位數(shù)小的向量做0擴(kuò)展以使它們的長(zhǎng)度相般配它的自動(dòng)擴(kuò)展為隱式的建議采納顯示擴(kuò)展這個(gè)規(guī)律相同合用于向量同常量的比較RegAbc7:0;RegBca3:0;.If(Abc=4b0,Bca)begin.If(Abc=8b0)begin每一個(gè)If都應(yīng)有一個(gè)else和它相對(duì)應(yīng)在做硬件設(shè)計(jì)時(shí),常要求條件為真時(shí)履行一種動(dòng)作而條件為假時(shí)履行另一動(dòng)作即便以為條件為假不行能發(fā)生,沒有else可能會(huì)使綜合出的邏輯和,RTL級(jí)的邏輯不一樣。假如條件為
12、假時(shí)不進(jìn)行任何操作,則用一條空語句。always(Cond)beginif(Cond)DataOut=8h24)&(count8bit7:0=8he4);那么這類設(shè)計(jì)將綜合出兩個(gè)8比特的加法器并且會(huì)產(chǎn)生毛刺,關(guān)于這樣的電路,要采用時(shí)序設(shè)計(jì),代碼以下;RegCt_24_e4;Always(poseddgeClkornegedgeRst_)BeginIf(!Rst_)Ct_24_e4=1b0;Elseif(count8bit7:0=8he4)Ct_24_e4=#u_dly1b0;Elseif(count8bit7:0=8h23)Ct_24_e4=#u_dly1b1;Esle;內(nèi)部總線不要懸空在de
13、fault狀態(tài)要把它上拉或下拉WireOE_default;AssignOE_default=!(oe1|oe2|oe3);Assignbus31:0=oe1Data131:0:oe2Data231:0:oe3Data331:0:oe_default32h0000_0000:32hzzzz_zzzz;為了保持代碼的可讀性,常用“define”做常數(shù)申明把“define”放在一個(gè)獨(dú)立的文件中參數(shù)(parameter)一定在一個(gè)模塊中定義,不要傳替參數(shù)到模塊(仿真測(cè)試向量例外)“define”能夠在任何地方定義,要把所有的“define”定義在一個(gè)文件中.在編譯原代碼時(shí)第一要把這個(gè)文件讀入,假如希
14、望宏的作用域僅在一個(gè)模塊中,就用參數(shù)來取代。對(duì)更新的內(nèi)容更新要做說明2.在語法塊的結(jié)尾做標(biāo)志.End.End.Endfunction每一個(gè)模塊都應(yīng)在模塊開始處做模塊級(jí)的說明,參照前面標(biāo)準(zhǔn)模塊頭。4.在模塊端口列表中出現(xiàn)的端口信號(hào)都應(yīng)做簡(jiǎn)要的功能描繪。VerilogHDL狀態(tài)機(jī)的狀態(tài)分派。VerilogHDL描繪狀態(tài)機(jī)時(shí)一定由parameter分派好狀態(tài),這與VHDL不一樣VHDL狀態(tài)機(jī)狀態(tài)能夠在綜合時(shí)分派產(chǎn)生。組合邏輯和時(shí)序邏輯分開用不一樣的進(jìn)度組合邏輯包含狀態(tài)譯碼和輸出,時(shí)序邏輯則是狀態(tài)存放器的切換。3.一定包含對(duì)所有狀態(tài)都辦理,不可以出現(xiàn)沒法辦理的狀態(tài),使?fàn)顟B(tài)機(jī)失控。Mealy機(jī)的狀態(tài)和輸
15、入有關(guān),而Moore機(jī)的狀態(tài)變換和輸入沒關(guān)Mealy狀態(tài)機(jī)的例子以下:.regCurrentState,NextState,Out1;ParameterS0=0,S1=1;always(posedgeClkornegedgeRst_)在for-loop中包含不變的表達(dá)式浪費(fèi)運(yùn)算時(shí)間for(i=0;i4;i=i+1)beginSig1=Sig2;DataOuti=DataIni;endfor-loop中第一條語句一直不變,浪費(fèi)運(yùn)算時(shí)間.資源共享問題條件算子中不存在資源共享如z=(cond)(a+b):(c+d);一定使用兩個(gè)加法器;而等效的條件if-then-else語句則能夠資源共享如:if(
16、Cond)z=a+b;elsez=c+d;只需加法器的輸入端復(fù)用,就能夠?qū)崿F(xiàn)加法器的共享,使用一個(gè)加法器實(shí)現(xiàn)3.因?yàn)榻M合邏輯的地點(diǎn)不一樣而惹起過多的觸發(fā)器綜合moduleCOUNT(AndBits,Clk,Rst);OutputAndbits;InputClk,Rst;RegAndBits;以下邊兩個(gè)例子慎重使用異步邏輯moduleCOUNT(Z,Enable,Clk,Rst);Output2:0Z;InputRst,Enable,Clk;reg2:0Z;always(posedgeClk)beginif(Rst)beginZ=#u_dly1b0;endelseif(Enable=1b1)be
17、ginIf(Z=3d7)beginZ=#u_dly1b0;EndelsebeginZ=#u_dlyZ+1b1;endEndElse;End際的運(yùn)用中要加以防止.moduleCOUNT(Z,Enable,Clk,Rst);Output2:0Z;InputRst,Enable,Clk;Reg2:0Z;對(duì)組合邏輯的描繪有多種方式,其綜合結(jié)果是等效的c=a&b;等效于c3:0=a3:0&b3:0;等效于c3=a3&b3;c2=a2&b2;c1=a1&b1;c0=a0&b0;等效于for(i=0;i=3;i=i+1)ci=ai&bi;能夠選擇簡(jiǎn)短的寫法.考慮綜合的履行時(shí)間往常會(huì)介紹將模塊區(qū)分得越小越好,
18、事實(shí)上要從實(shí)質(zhì)的設(shè)計(jì)目標(biāo)面積和時(shí)序要求出發(fā)好的時(shí)序規(guī)劃和適合的拘束條件要比電路的大小對(duì)綜合時(shí)間的影響要大,要依據(jù)設(shè)計(jì)的目標(biāo)來區(qū)分模塊,對(duì)該模塊綜合拘束的scripts也能夠集中在該特征上,要選擇適合的拘束條件,過分的拘束將致使漫長(zhǎng)的綜合時(shí)間最幸虧設(shè)計(jì)階段就做好時(shí)序規(guī)劃經(jīng)過綜合的拘束scripts來知足時(shí)序規(guī)劃。這樣就能獲取既知足性能的結(jié)果,又使得綜合時(shí)間最省,從代碼設(shè)計(jì)講5005000行的長(zhǎng)度是適合的。防止點(diǎn)到點(diǎn)的例外所謂點(diǎn)到點(diǎn)例外Point-to-pointexception就是從一個(gè)存放器的輸出到另一個(gè)存放器的輸入的路徑不可以在一個(gè)周期內(nèi)達(dá)成多周期路徑就是其典型狀況,多周期路徑比較麻煩在靜
19、態(tài)時(shí)序剖析中要標(biāo)明為例外,這樣可能會(huì)因?yàn)槿藶橐貙⑵溆嗦窂藉e(cuò)誤地標(biāo)明為例外,進(jìn)而對(duì)該路徑?jīng)]有剖析造成隱患防止使用多周期路徑。假如的確要用,應(yīng)將它放在單唯一個(gè)模塊,并且在代碼中加以說明。8.防止偽路徑(Falsepath)偽路徑是那些靜態(tài)時(shí)序剖析(STA)以為是時(shí)序失敗,而設(shè)計(jì)者以為是正確的路徑。往常會(huì)人為忽視這些warning,但假如數(shù)目許多時(shí),便可能將其余真實(shí)的問題錯(cuò)過了。9.防止使用Latch使用Latch一定有所記錄,能夠用All_registers-level_sensitive來報(bào)告設(shè)計(jì)頂用到的Latch。不希望使用Latch時(shí),應(yīng)當(dāng)對(duì)所有輸入狀況都對(duì)輸出賦值,或許將條件賦值語句寫全
20、,如在if語句最后加一個(gè)else,case語句加defaults。當(dāng)你一定使用Latch時(shí),為了提升可測(cè)性,需要加入測(cè)試邏輯。不完好的if和case語句致使不用要的latch的產(chǎn)生,下邊的語句中,DataOut會(huì)被綜合成鎖存器。假如不希望在電路中使用鎖存器,它就是錯(cuò)誤。always(Cond)beginif(Cond)DataOut=DataInend10.防止使用門控時(shí)鐘使用門控時(shí)鐘(Gatedclock)不利于移植,可能惹起毛刺,帶來時(shí)序問題,同時(shí)對(duì)掃描鏈的形成帶來問題。門控鐘在低功耗設(shè)計(jì)中要用到,但往常不要在模塊級(jí)代碼中使用。能夠借助于Powercompiler來生成,或許在頂層產(chǎn)生。防
21、止使用內(nèi)部產(chǎn)生的時(shí)鐘在設(shè)計(jì)中最好使用同步設(shè)。假如要使用內(nèi)部時(shí)鐘,能夠考慮使用多個(gè)時(shí)鐘。因?yàn)槭褂脙?nèi)部時(shí)鐘的電路要加到掃描鏈中比較麻煩,降低了可測(cè)性,也不利于使用拘束條件來綜合。防止使用內(nèi)部復(fù)位信號(hào)模塊中所有的存放器最好同時(shí)復(fù)。假如要使用內(nèi)部復(fù)位,最好將其有關(guān)邏輯放在獨(dú)自的模塊中,這樣能夠提升可閱讀性。假如的確要使用內(nèi)部時(shí)鐘,門控時(shí)鐘,或內(nèi)部的復(fù)位信號(hào)將它們放在頂層將這些信號(hào)的產(chǎn)生放在頂層的一個(gè)獨(dú)立模塊這樣所有的子模塊分別使用單調(diào)的時(shí)鐘和復(fù)位信號(hào)一般狀況下內(nèi)部門控時(shí)鐘能夠用同步置數(shù)代替比如:moduleCOUNT(ResetEnableClkQout)moduleCOUNT(ResetEnable
22、ClkQout)inputResetEnableClkinputResetEnableClkoutput2:0Qoutoutput2:0Qoutreg2:0Qoutreg2:0QoutwireGATED_Clk=Clk&Enablealways(posedgeClk)beginif(Reset)beginalways(posedgeGATED_ClkorposedgeReset)Qout=1b0beginendif(Reset)beginelseif(Enable=1b1)beginQout=1b0if(Qout=3d7)beginendQout=1b0elsebeginendif(Qout=3d7)beginelsebeginQout=1b0Qout=Qout+1b1endendelsebeginendQout=Qout+1b1endendendmoduleendendendmodule附錄Module編寫示例FilenameAuthorDescriptionCalle
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二年級(jí)下冊(cè)數(shù)學(xué)教案- 撥一撥 北師大版
- 2025年中學(xué)職務(wù)崗位聘用合同
- 五年級(jí)下冊(cè)數(shù)學(xué)教案-6.5 圖形與幾何(平面圖形的周長(zhǎng)和面積(復(fù)習(xí))) ▏滬教版
- 人教版數(shù)學(xué)三年級(jí)上冊(cè)單元練習(xí)卷(易錯(cuò)題)-第五單元-倍的認(rèn)識(shí)(含答案)
- 2024年快速熱處理設(shè)備項(xiàng)目資金籌措計(jì)劃書代可行性研究報(bào)告
- 2024年灌裝包裝設(shè)備項(xiàng)目投資申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2025年廣西金融職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫審定版
- 2025年貴州建設(shè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫帶答案
- 2025屆黑龍江省“六校聯(lián)盟”高三上學(xué)期聯(lián)考生物試題及答案
- 別墅家裝保障合同范本
- 對(duì)折剪紙課件
- 公園棧道棧橋施工方案
- 新中國(guó)成立后的中國(guó)國(guó)防
- 熱烈歡迎領(lǐng)導(dǎo)蒞臨指導(dǎo)ppt模板
- 不規(guī)則抗體篩查與鑒定
- 2023-2024人教版小學(xué)2二年級(jí)數(shù)學(xué)下冊(cè)(全冊(cè))教案【新教材】
- 中國(guó)銀行海爾多聯(lián)機(jī)方案書
- 小學(xué)《體育與健康》體育基礎(chǔ)理論知識(shí)
- JJG 144-2007標(biāo)準(zhǔn)測(cè)力儀
- GB/T 8417-2003燈光信號(hào)顏色
- GB/T 7984-2001輸送帶具有橡膠或塑料覆蓋層的普通用途織物芯輸送帶
評(píng)論
0/150
提交評(píng)論