Verilog 代碼編寫(xiě)規(guī)范_第1頁(yè)
Verilog 代碼編寫(xiě)規(guī)范_第2頁(yè)
Verilog 代碼編寫(xiě)規(guī)范_第3頁(yè)
Verilog 代碼編寫(xiě)規(guī)范_第4頁(yè)
Verilog 代碼編寫(xiě)規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、信號(hào)命名規(guī)則信號(hào)命名規(guī)則在團(tuán)隊(duì)開(kāi)發(fā)中占據(jù)著重要地位,統(tǒng)一、有序的命名能大幅減少設(shè)計(jì)人員之間的冗余工作,還可便于團(tuán)隊(duì)成員代碼的查錯(cuò)和驗(yàn)證。比較著名的信號(hào)命名規(guī)則當(dāng)推Microsoft公司的“匈牙利”法,該命名規(guī)則的主要思想是“在變量和函數(shù)名中加入前綴以增進(jìn)人們對(duì)程序的理解”。例如所有的字符變量均以ch 為前綴,若是常數(shù)變量則追加前綴c。信號(hào)命名的整體要求為:命名字符具有一定的意義,直白易懂,且項(xiàng)目命名規(guī)則唯一。對(duì)于HDL設(shè)計(jì),設(shè)計(jì)人員還需要注意以下命名規(guī)則。1.系統(tǒng)級(jí)信號(hào)的命名系統(tǒng)級(jí)信號(hào)指復(fù)位信號(hào),置位信號(hào),時(shí)鐘信號(hào)等需要輸送到各個(gè)模塊的全局信號(hào)。系統(tǒng)信號(hào)以字符串sys或syn開(kāi)頭;時(shí)鐘信號(hào)

2、以clk開(kāi)頭,并在后面添加相應(yīng)的頻率值;復(fù)位信號(hào)一般以rst或reset開(kāi)頭;置位信號(hào)為st或set開(kāi)頭。典型的信號(hào)命名方式如下所示:wire 7:0 sys_dout, sys_din;wire clk_32p768MHz;wire reset;wire st_counter;2.低電平有效的信號(hào)命名低電平有效的信號(hào)后一律加下劃線(xiàn)和字母n。如:wire SysRst_n;wire FifoFull_n;3.過(guò)鎖存器鎖存后的信號(hào)經(jīng)過(guò)鎖存器鎖存后的信號(hào),后加下劃線(xiàn)和字母r,與鎖存前的信號(hào)區(qū)別。如:信號(hào)CpuRamRd信號(hào),經(jīng)鎖存后應(yīng)命名為CpuRamRd_r。低電平有效的信號(hào)經(jīng)過(guò)鎖存器鎖存后,其

3、命名應(yīng)在_n后加r。如:CpuRamRd_n信號(hào),經(jīng)鎖存后應(yīng)命名為CpuRamRd_nr多級(jí)鎖存的信號(hào),可多加r以標(biāo)明。如:CpuRamRd信號(hào),經(jīng)兩級(jí)觸發(fā)器鎖存后,應(yīng)命名為CpuRamRd_rr。二、模塊命名規(guī)則HDL語(yǔ)言的模塊類(lèi)似于C語(yǔ)言中的函數(shù),可采用C語(yǔ)言函數(shù)的大多數(shù)規(guī)則。模塊的命名應(yīng)該盡量用英文表達(dá)出其完成的功能。遵循動(dòng)賓結(jié)構(gòu)的命名法則,函數(shù)名中動(dòng)詞在前,并在命名前加入函數(shù)的前綴,函數(shù)名的長(zhǎng)度一般不少于2個(gè)字母。HDL模塊的命名還需要考慮以下情況:1.模塊的命名規(guī)則在系統(tǒng)設(shè)計(jì)階段應(yīng)該為每個(gè)模塊進(jìn)行命名。命名的方法是,將模塊英文名稱(chēng)的各個(gè)單詞首字母組合起來(lái),形成3到5個(gè)字符的縮寫(xiě)。若模

4、塊的英文名只有一個(gè)單詞,可取該單詞的前3個(gè)字母。各模塊的命名以3個(gè)字母為宜。例如: Arithmatic Logical Unit模塊,命名為ALU。Data Memory Interface模塊,命名為DMI。Decoder模塊,命名為DEC。2.模塊之間接口信號(hào)的命名所有變量命名分為兩個(gè)部分,第一部分表明數(shù)據(jù)方向,其中數(shù)據(jù)發(fā)出方在前,數(shù)據(jù)接收方在后,第二部分為數(shù)據(jù)名稱(chēng)。兩部分之間用下劃線(xiàn)隔離開(kāi)。第一部分全部大寫(xiě),第二部分所有具有明確意義的英文名全部拼寫(xiě)或縮寫(xiě)的第一個(gè)字母大寫(xiě),其余部分小寫(xiě)。舉例:wire CPUMMU_WrReq;下劃線(xiàn)左邊是第一部分,代表數(shù)據(jù)方向是從CPU模塊發(fā)向存儲(chǔ)器管

5、理單元模塊(MMU。下劃線(xiàn)右邊Wr為Write的縮寫(xiě),Req是Request的縮寫(xiě)。兩個(gè)縮寫(xiě)的第一個(gè)字母都大寫(xiě),便于理解。整個(gè)變量連起來(lái)的意思就是CPU發(fā)送給MMU的寫(xiě)請(qǐng)求信號(hào)。模塊上下層次間信號(hào)的命名也遵循本規(guī)定。若某個(gè)信號(hào)從一個(gè)模塊傳遞到多個(gè)模塊,其命名應(yīng)視信號(hào)的主要路徑而定。3.模塊內(nèi)部信號(hào):模塊內(nèi)部的信號(hào)由幾個(gè)單詞連接而成,縮寫(xiě)要求能基本表明本單詞的含義;單詞除常用的縮寫(xiě)方法外(如:Clock->Clk, Write->Wr, Read->Rd等,一律取該單詞的前幾個(gè)字母(如:Frequency->Freq, Variable->Var 等;每個(gè)縮寫(xiě)單詞的

6、第一個(gè)字母大寫(xiě);若遇兩個(gè)大寫(xiě)字母相鄰,中間添加一個(gè)下劃線(xiàn)(如DivN_Cntr;舉例:SdramWrEn_n;FlashAddrLatchEn;三、代碼格式規(guī)范1. 分節(jié)書(shū)寫(xiě)格式各節(jié)之間加1到多行空格。如每個(gè)always,initial語(yǔ)句都是一節(jié)。每節(jié)基本上完成一個(gè)特定的功能,即用于描述某幾個(gè)信號(hào)的產(chǎn)生。在每節(jié)之前有幾行注釋對(duì)該節(jié)代碼加以描述,至少列出本節(jié)中所描述信號(hào)的含義。行首不要使用空格來(lái)對(duì)齊,而是用Tab鍵,Tab鍵的寬度設(shè)為4個(gè)字符寬度。行尾不要有多余的空格。2. 注釋的規(guī)范使用/進(jìn)行的注釋行以分號(hào)結(jié)束;使用/* */進(jìn)行的注釋,/*和*/各占用一行,并且頂頭;例如:/ Edge d

7、etector used to synchronize the input signal;對(duì)于函數(shù),應(yīng)該從“功能”,“參數(shù)”,“返回值”、“主要思路”、“調(diào)用方法”、“日期”六個(gè)方面用如下格式注釋:/ 程序說(shuō)明開(kāi)始/ =/ / 功能:完成兩個(gè)輸入數(shù)的相加。/ 參數(shù): strByDelete,strToDelete/ 輸入?yún)?shù)/ 輸出參數(shù)/ 主要思路:本算法主要采用2級(jí)流水線(xiàn)完成相加/ 日期:起始日期,如:2007/8/21.9:40-2007/8/23.21:45/ 版本:/ 程序編寫(xiě)人員:/ 程序調(diào)試記錄:/ =/ / 模塊說(shuō)明結(jié)束此外,在注釋說(shuō)明中,需要注意以下細(xì)節(jié):在注釋中應(yīng)該詳細(xì)說(shuō)明模

8、塊的主要實(shí)現(xiàn)思路,特別要注明自己的一些想法,如果有必要?jiǎng)t應(yīng)該寫(xiě)明對(duì)想法產(chǎn)生的來(lái)由。在注釋中詳細(xì)注明函數(shù)的適用方法,對(duì)于輸入?yún)?shù)的要求以及輸出數(shù)據(jù)的格式。在注釋中要強(qiáng)調(diào)調(diào)用時(shí)的危險(xiǎn)方面,可能出錯(cuò)的地方。對(duì)日期的注釋要求記錄從開(kāi)始編寫(xiě)模塊到模塊測(cè)試結(jié)束之間的日期。對(duì)模塊注釋開(kāi)始到模塊命名之間應(yīng)該有一組用來(lái)標(biāo)識(shí)的特殊字符串。如果算法比較復(fù)雜,或算法中的變量定義與位置有關(guān),則要求對(duì)變量的定義進(jìn)行圖解。對(duì)難以理解的算法能圖解盡量圖解。3.空格的使用:不同變量,以及變量與符號(hào)、變量與括號(hào)之間都應(yīng)當(dāng)保留一個(gè)空格。Verilog關(guān)鍵字與其它任何字符串之間都應(yīng)當(dāng)保留一個(gè)空格。如:always ( . 使用大括號(hào)

9、和小括號(hào)時(shí),前括號(hào)的后邊和后括號(hào)的前邊應(yīng)當(dāng)留有一個(gè)空格。邏輯運(yùn)算符、算術(shù)運(yùn)算符、比較運(yùn)算符等運(yùn)算符的兩側(cè)各留一個(gè)空格,與變量分隔開(kāi)來(lái);單操作數(shù)運(yùn)算符例外,直接位于操作數(shù)前,不使用空格。使用/進(jìn)行的注釋,在/后應(yīng)當(dāng)有一個(gè)空格;注釋行的末尾不要有多余的空格。例:assign SramAddrBus = AddrBus31:24, AddrBus7:0 ;assign DivCntr3:0 = DivCntr3:0 + 4'b0001;assign Result = Operand;4.beginend的書(shū)寫(xiě)規(guī)范同一個(gè)層次的所有語(yǔ)句左端對(duì)齊;initial、always等語(yǔ)句塊的begin關(guān)

10、鍵詞跟在本行的末尾,相應(yīng)的end關(guān)鍵詞與initial、always對(duì)齊;這樣做的好處是避免因begin獨(dú)占一行而造成行數(shù)太多;如:always ( posedge SysClk or negedge SysRst beginif( !SysRst DataOut <= 4'b0000;else if( LdEn beginDataOut <= DataIn;EndelseDataOut <= DataOut + 4'b0001;end不同層次之間的語(yǔ)句使用Tab鍵進(jìn)行縮進(jìn),每加深一層縮進(jìn)一個(gè)Tab;在endmodule,endtask,endcase等標(biāo)記一個(gè)代碼塊結(jié)束的關(guān)鍵詞后面要加上一行注釋說(shuō)明這個(gè)代碼塊的名稱(chēng)。四、模塊調(diào)用規(guī)范在Verilog中,有兩種模塊調(diào)用的方法,一種是位置映射法,嚴(yán)格按照模塊定義的端口順序來(lái)連接,不用注明原模塊定義時(shí)規(guī)定的端口名,其語(yǔ)法為:模塊名 (連接端口1信號(hào)名, 連接端口2信號(hào)名, 連接端口3信號(hào)名,;另一種為信號(hào)映射法,即利用“.”符號(hào),表明原

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論