




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、代碼書寫規范3.1 命名規范3.1.1 HDL代碼命名總則 具有意義的命名比注釋要好得多。在寫代碼時,命名應給予充分的重視,任何命名都應遵循簡潔、明了、準確的原則,切忌模棱兩可。 文件名應由字母、數字及下劃線組成命名只能由26個英文字母(a-z,A-Z)、數字(0-9)或者下劃線( _ )組成。不允許使用破折號和連續的下劃線。 文件名的首字符必須是字母第一個字符只能使用字母,不能使用下劃線,避免與一些工具的沖突。 用下劃線分開多個單詞由多個字組成的文件名,每個字要用下劃線分開。在保證一致性的情況下,提高了在修改、驗證和調試中的可讀性。舉例:R_ram_
2、addr。 IO信號與信號名的區分為了增加可讀性,便于閱讀代碼的人理解,輸入輸出口與內部的寄存器、變量名要區分開,采用加前綴的方法,且統一用大寫字母。如:I_sigan1 , / 表示是輸入信號I_signal2, / 表示是輸入信號O_signal3, / 表示是輸出信號reg 31:0 R_signal4; / 表示是本模塊內部寄存器信號wire 7:0 W_signal5; / 表示是本模塊內部連線信號 Verilog文件名與相應的文檔名一致說明文檔中所參考的Verilog RTL的信號及模塊名必須與FPGA設計說明中命名相一致,代碼和模塊名字的注釋也要保持一
3、致,易于文檔和代碼之間的交叉參考。 常量用大寫字母表示常量必須大寫,包括參量名、文本宏名也要大寫,以易于變量識別。 net、variable、construct及instance以小寫命名(前綴大寫)與建模電路密切相關的硬件結構,在命名時所有字母必須小寫,避免混淆及錯誤的發生。 .net .variable .construct:如 function、task、named block、module .instance: 如 gate、module 命名要唯一construct、net、variable的命名要唯一,不能用大小寫來區分命名,盡量用小寫完整
4、單詞命名,禁用C語言編程中常用的大小寫互用且縮寫的單詞命名方式。原因:有些工具是不區分大小寫的。 命名要望文生義標識符的命名必須描述其目的、應當有意義,可以達到望文生義。標識符的命名應該描述“對象做什么”而不是“過程怎么做”,要根據每個標識符做什么來命名,而不要以其如何實現來命名,這些標識符包括:net、variable、parameter、instance名、construct 名( 如 function、module、task)。標識符必須使用英文命名。如果標識符需要多個意義獨立的字符串命名,字符串之間要用下劃線“_”隔開。舉例: W_set_priority對net或var
5、iable W_SBUS_DATA_BITS對parameter R_ram_addr_p3任意的 pipeline stage 指示 0 低電平有效的信號的后綴為_n 當一個信號低電平有效時,它必須用后綴_n命名,_n的含義為negative;只是低電平有效的信號才能用_n結尾。舉例: 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 寄存器按照功能進行命名,注釋需寫明寄存器地址采用功能命名時需要進行寄存器說明,指出其寄存器地址。例:R_protocol_reg; /register address is 0x513.2 注釋對HDL代碼的功能進行注釋是必要的,注釋語句是對上下文信息的補充說明。3.2.1 其它注釋為描述HDL代碼及其功能,注釋說明是必要的,這有助于其它設計者理解和維護程序代碼。功能塊注釋對代碼的每個功能塊必須加以注釋說明,說明其目的及功能,便于代碼理解。3.2.
7、2.2 對不常用或不易理解的關鍵代碼行進行注釋說明對不常用或不容易理解的代碼及其使用限制要進行注釋,說明其功能、作用和其它特征信息,提高代碼的可讀性。 使用單行注釋代碼行使用單行注釋“/”,不使用多行“/*.*/”注釋。代碼行注釋跟在注釋代碼之后,處于同一行。代碼行注釋應簡明扼要,控制注釋長度避免使單行內容過長。如注釋過長且難以簡略,可以分行注釋。注意放在下一行的注釋應從前行注釋左側對齊,注意分行的注釋內容要獨占一行,該行不能有其它的代碼。若代碼本身較長,難以在同一行加以注釋,可以在代碼的前一行放置注釋內容。注意這行注釋要獨占一行。 端口信號定義要進行注釋每個端口聲
8、明必須有注釋說明,和端口聲明處在同一行。輸入端口注釋出來自哪個模塊,輸出端口注釋出輸出給到哪個模塊。頂層模塊中的端口注釋中,必須加上該信號在原理圖上對應的管腳號和名稱,以便查找,對較復雜的邏輯,引腳信號太多,或總線寬度較大不便描述時,應加一句注釋:引腳參見 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的輸出結果);0 注釋應簡明扼要、重點突出注釋應邏輯清晰、用語準確,應完整體現設計的目的、關鍵代碼塊的功能和重要信號的特征。1 END語句說明對于有嵌套結構復雜和帶有case語句中的END語句要加以注釋,說明模塊結束,改進代碼的可讀性,易于識別模塊邊界。舉例:always ()begin:<block name>end /<block name>或case () /<case function>endcase /
10、<case function>3.3 編程風格3.3.1編寫代碼格式要整齊代碼縮排的格式要一致(即相同類型的代碼語句要對準,一般縮進為3到4個空格為好),增加代碼的可讀性。在編寫一個代碼塊時(如begin、case、if語句等),首先要定好框架,并符合3種編碼風格中的一種。第一種代碼書寫格式: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語句每行只寫一條語句,增加程序的可讀性,便于用設計工具進行代碼的語法分析。舉例:使用: 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 一行一個端口聲明端口定義應該是獨立的,每行只寫一個端口聲明語句,增加代碼的可讀性,便于代碼理解,便于用腳本文件分析代碼語法。舉例:使用:input a; /port a descriptioninput b; /port b description 禁止:input a, b;input a, b;3.3.4 在定義端口時,按照端口類型或端口功能定
14、義端口順序將端口進行分類進行定義,便于理解和調用。注:可以按照信號的方向按輸入、輸出、雙向來定義。也可以按照端口功能來定義端口順序。建議按照端口功能來定義,同功能組的信號再按照輸入、輸出、雙向來定義。比如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 保持端口順序一致端口聲明順序應與模塊聲明中端口的順序一致。3.3.6 聲明內部net所有內部net必須聲明,不能隱含。Verilog可隱含定義內部net,但內部net必須聲明,以避免混淆。3.3.7 在一個段內聲明所有內部net內部net的聲明要跟在模塊的I/O端口聲明之后。例外:自動生成的代碼。3.3.8 對于數字位寬的表述要完整對數字的表述一定要完整,寫全所有非0的位,避免將16'hffff寫成16'hf之類的低級錯誤。3.3.9 總線位順序按高到低保持一致當描述多bit總線時,必須保持bit順序的一致性,增強可讀性,減少總線之間無意的順序交換。例如:R_reg7:0,R
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年軟件設計師考試應對措施及試題及答案
- 行政法學人才培養的方向及問題試題及答案
- 信息處理技術真正重要考點試題及答案
- 網絡安全審計的實施策略試題及答案
- 行政法學形勢變化試題及答案
- 軟件測試流程與工具試題及答案
- 網絡環境與管理模式的風險試題及答案
- 跨界創新在經濟轉型中的作用研究試題及答案
- 公司生產工作計劃推動生產檢驗標準化與檢驗員培訓
- 高考作文世代傳承的試題與答案
- 2025-2030年辣椒素產業行業市場現狀供需分析及投資評估規劃分析研究報告
- 《華能企業文化建設》課件
- 陜西延安通和電業有限責任公司招聘筆試真題2024
- 2025年醫院管理專業研究生入學考試試卷及答案
- 2025年江蘇高處安裝、維護、拆除作業-特種作業證考試復習題庫(含答案)
- Unit7OutdoorfunIntegration(課件)-譯林版(2024)英語七年級下冊
- 成人重癥患者人工氣道濕化護理專家共識
- 2023年船員培訓計劃
- 2025中國鐵路鄭州局集團招聘614人(河南)筆試參考題庫附帶答案詳解
- 陪玩店合同協議
- 貨運司機雇傭合同協議
評論
0/150
提交評論