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

下載本文檔

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

文檔簡介

1、代碼書寫規(guī)范3.1 命名規(guī)范3.1.1 HDL代碼命名總則 具有意義的命名比注釋要好得多。在寫代碼時,命名應(yīng)給予充分的重視,任何命名都應(yīng)遵循簡潔、明了、準(zhǔn)確的原則,切忌模棱兩可。 文件名應(yīng)由字母、數(shù)字及下劃線組成命名只能由26個英文字母(a-z,A-Z)、數(shù)字(0-9)或者下劃線( _ )組成。不允許使用破折號和連續(xù)的下劃線。 文件名的首字符必須是字母第一個字符只能使用字母,不能使用下劃線,避免與一些工具的沖突。 用下劃線分開多個單詞由多個字組成的文件名,每個字要用下劃線分開。在保證一致性的情況下,提高了在修改、驗證和調(diào)試中的可讀性。舉例:R_ram_

2、addr。 IO信號與信號名的區(qū)分為了增加可讀性,便于閱讀代碼的人理解,輸入輸出口與內(nèi)部的寄存器、變量名要區(qū)分開,采用加前綴的方法,且統(tǒng)一用大寫字母。如:I_sigan1 , / 表示是輸入信號I_signal2, / 表示是輸入信號O_signal3, / 表示是輸出信號reg 31:0 R_signal4; / 表示是本模塊內(nèi)部寄存器信號wire 7:0 W_signal5; / 表示是本模塊內(nèi)部連線信號 Verilog文件名與相應(yīng)的文檔名一致說明文檔中所參考的Verilog RTL的信號及模塊名必須與FPGA設(shè)計說明中命名相一致,代碼和模塊名字的注釋也要保持一

3、致,易于文檔和代碼之間的交叉參考。 常量用大寫字母表示常量必須大寫,包括參量名、文本宏名也要大寫,以易于變量識別。 net、variable、construct及instance以小寫命名(前綴大寫)與建模電路密切相關(guān)的硬件結(jié)構(gòu),在命名時所有字母必須小寫,避免混淆及錯誤的發(fā)生。 .net .variable .construct:如 function、task、named block、module .instance: 如 gate、module 命名要唯一construct、net、variable的命名要唯一,不能用大小寫來區(qū)分命名,盡量用小寫完整

4、單詞命名,禁用C語言編程中常用的大小寫互用且縮寫的單詞命名方式。原因:有些工具是不區(qū)分大小寫的。 命名要望文生義標(biāo)識符的命名必須描述其目的、應(yīng)當(dāng)有意義,可以達(dá)到望文生義。標(biāo)識符的命名應(yīng)該描述“對象做什么”而不是“過程怎么做”,要根據(jù)每個標(biāo)識符做什么來命名,而不要以其如何實現(xiàn)來命名,這些標(biāo)識符包括:net、variable、parameter、instance名、construct 名( 如 function、module、task)。標(biāo)識符必須使用英文命名。如果標(biāo)識符需要多個意義獨立的字符串命名,字符串之間要用下劃線“_”隔開。舉例: W_set_priority對net或var

5、iable W_SBUS_DATA_BITS對parameter R_ram_addr_p3任意的 pipeline stage 指示 0 低電平有效的信號的后綴為_n 當(dāng)一個信號低電平有效時,它必須用后綴_n命名,_n的含義為negative;只是低電平有效的信號才能用_n結(jié)尾。舉例: I_reset_n1 時鐘信號名含_clk或_clock時鐘信號的命名必須含_clk或_clock,并要求在信號名中再加入該信號速度的指示,非時鐘信號的命名不能含有clock或clk。舉例:I_system_clk_32M,I_ram_clk_8k或I_system_32M_clk

6、, I_ram_8K_clk2 測試信號的后綴為_test舉例:R_parallel_clk_test3 寄存器按照功能進(jìn)行命名,注釋需寫明寄存器地址采用功能命名時需要進(jìn)行寄存器說明,指出其寄存器地址。例:R_protocol_reg; /register address is 0x513.2 注釋對HDL代碼的功能進(jìn)行注釋是必要的,注釋語句是對上下文信息的補充說明。3.2.1 其它注釋為描述HDL代碼及其功能,注釋說明是必要的,這有助于其它設(shè)計者理解和維護(hù)程序代碼。功能塊注釋對代碼的每個功能塊必須加以注釋說明,說明其目的及功能,便于代碼理解。3.2.

7、2.2 對不常用或不易理解的關(guān)鍵代碼行進(jìn)行注釋說明對不常用或不容易理解的代碼及其使用限制要進(jìn)行注釋,說明其功能、作用和其它特征信息,提高代碼的可讀性。 使用單行注釋代碼行使用單行注釋“/”,不使用多行“/*.*/”注釋。代碼行注釋跟在注釋代碼之后,處于同一行。代碼行注釋應(yīng)簡明扼要,控制注釋長度避免使單行內(nèi)容過長。如注釋過長且難以簡略,可以分行注釋。注意放在下一行的注釋應(yīng)從前行注釋左側(cè)對齊,注意分行的注釋內(nèi)容要獨占一行,該行不能有其它的代碼。若代碼本身較長,難以在同一行加以注釋,可以在代碼的前一行放置注釋內(nèi)容。注意這行注釋要獨占一行。 端口信號定義要進(jìn)行注釋每個端口聲

8、明必須有注釋說明,和端口聲明處在同一行。輸入端口注釋出來自哪個模塊,輸出端口注釋出輸出給到哪個模塊。頂層模塊中的端口注釋中,必須加上該信號在原理圖上對應(yīng)的管腳號和名稱,以便查找,對較復(fù)雜的邏輯,引腳信號太多,或總線寬度較大不便描述時,應(yīng)加一句注釋:引腳參見 XXX約束文件(*.ucf/*.lpf/*.qsf)。module top(/inputI_Clk_25m ,/J12EPLD_25M25MHz主時鐘I_Clk_50m ,/H12EPLD_50M 50MHz主時鐘I_CM_19m,/J5 CM_EPLD_19M8530出的19MHz時鐘,做主備時使用/outputO_EPLD_38m,/H

9、5O_EPLD_38M需要2分頻后送出O_RST2BOOTCPLDn ,/R7RST_INMPreset和MSreset的輸出結(jié)果);0 注釋應(yīng)簡明扼要、重點突出注釋應(yīng)邏輯清晰、用語準(zhǔn)確,應(yīng)完整體現(xiàn)設(shè)計的目的、關(guān)鍵代碼塊的功能和重要信號的特征。1 END語句說明對于有嵌套結(jié)構(gòu)復(fù)雜和帶有case語句中的END語句要加以注釋,說明模塊結(jié)束,改進(jìn)代碼的可讀性,易于識別模塊邊界。舉例:always ()begin:<block name>end /<block name>或case () /<case function>endcase /

10、<case function>3.3 編程風(fēng)格3.3.1編寫代碼格式要整齊代碼縮排的格式要一致(即相同類型的代碼語句要對準(zhǔn),一般縮進(jìn)為3到4個空格為好),增加代碼的可讀性。在編寫一個代碼塊時(如begin、case、if語句等),首先要定好框架,并符合3種編碼風(fēng)格中的一種。第一種代碼書寫格式:always (posedge I_clk or negedge I_reset_n) begin if (I_reset_n) begin R_a <=1'b0; R_b <=1'b0; R_c <=1'b0; end else begin R_a

11、<=I_a; R_b <=I_b; R_c <=I_a; end end第二種代碼書寫格式:always (posedge I_clk or negedge I_reset_n) begin if (I_reset_n) begin R_a <=1'b0; R_b <=1'b0; R_c <=1'b0; end else begin R_a <=I_a; R_b <=I_b; R_c <=I_a; endend第三種代碼書寫格式:always (posedge I_clk or negedge I_reset_n)

12、begin if (I_reset_n) begin R_a <=1'b0; R_b <=1'b0; R_c <=1'b0; end else begin R_a <=I_a; R_b <=I_b; R_c <=I_a; endend3.3.2 一行一條Verilog語句每行只寫一條語句,增加程序的可讀性,便于用設(shè)計工具進(jìn)行代碼的語法分析。舉例:使用: W_upper_en = (W_p5type && W_xadr10) ; W_lower_en = (W_p5type && ! W_xadr10);

13、禁止: W_upper_en = (W_p5type && W_xadr10); W_lower_en = (W_p5type && ! W_xadr10);例外:允許注釋和Verilog語句在同一行上時。3.3.3 一行一個端口聲明端口定義應(yīng)該是獨立的,每行只寫一個端口聲明語句,增加代碼的可讀性,便于代碼理解,便于用腳本文件分析代碼語法。舉例:使用:input a; /port a descriptioninput b; /port b description 禁止:input a, b;input a, b;3.3.4 在定義端口時,按照端口類型或端口功能定

14、義端口順序?qū)⒍丝谶M(jìn)行分類進(jìn)行定義,便于理解和調(diào)用。注:可以按照信號的方向按輸入、輸出、雙向來定義。也可以按照端口功能來定義端口順序。建議按照端口功能來定義,同功能組的信號再按照輸入、輸出、雙向來定義。比如LocalBus總線信號,一般定義順序為(推薦使用):input wire 15:0I_localbus_addr;input wire I_localbus_cs;input wire I_localbus_wr;input wire I_localbus_rd;inout wire 15:0IO_localbus_data;3.3.5 保持端口順序一致端口聲明順序應(yīng)與模塊聲明中端口的順序一致。3.3.6 聲明內(nèi)部net所有內(nèi)部net必須聲明,不能隱含。Verilog可隱含定義內(nèi)部net,但內(nèi)部net必須聲明,以避免混淆。3.3.7 在一個段內(nèi)聲明所有內(nèi)部net內(nèi)部net的聲明要跟在模塊的I/O端口聲明之后。例外:自動生成的代碼。3.3.8 對于數(shù)字位寬的表述要完整對數(shù)字的表述一定要完整,寫全所有非0的位,避免將16'hffff寫成16'hf之類的低級錯誤。3.3.9 總線位順序按高到低保持一致當(dāng)描述多bit總線時,必須保持bit順序的一致性,增強可讀性,減少總線之間無意的順序交換。例如:R_reg7:0,R

溫馨提示

  • 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

提交評論