Verilog HDL基礎(chǔ)知識9之代碼規(guī)范
1.RTL CODE 規(guī)范
1.1標(biāo)準(zhǔn)的文件頭
在每一個版塊的開頭一定要使用統(tǒng)一的文件頭,其中包括作者名,模塊名,創(chuàng)建日期,概要,更改記錄,版權(quán)等必要信息。 統(tǒng)一使用以下的文件頭:其中*為必需的項目
本文引用地址:http://cafeforensic.com/article/202402/455692.htm//******************************************************** // // Copyright(c)2016, ECBC // All rights reserved // // File name : MODULE_NAME.v // Module name : MODULE_NAME // Author : STEP // Description : // Email : Author’s email // Data : 2016/08/01 // Version : current version, just this: v1.0 // // Abstract : // // Modification history // Version Data(2016/08/01) V1.0 // Description // //*************************************************************
1.2標(biāo)準(zhǔn)的module格式
對于模塊的書寫采用統(tǒng)一的格式便于項目內(nèi)部成員的理解和維護,我們用批處理建立了一個MODULE模塊,其內(nèi)容解釋如下:
端口定義按照輸入,輸出,雙向的順序:
模塊名、模塊例化名統(tǒng)一,例化名前加大寫U以區(qū)分 ( 多次例化另加標(biāo)識 ),三者關(guān)系:
文件名 :xxx .v (小寫)
模塊名 :XXX (大寫)
例化名 :UXXX (大寫)
IP 內(nèi)部所有的模塊名都要加IP名或者IP名簡稱作前綴,如USBCTRL、USBTX_FIFO。
// ***************************** // DEFINE MODULE PORT // // ****************************** // module MODULE_NAME //模塊名一行 ( //括號頂格,端口部分換行 // INPUT //盡量先輸入,后輸出定義 input_port_1, //可同時按接口對象等分類,一行一個 … input_port_m, // OUTPUT output_port_1, … output_port_m, ); // ***************************** // DEFINE PARAMETER // ****************************** parameter… //參數(shù)名采用大寫 // ****************************** // DEFINE INPUT // ****************************** input rst_n ; // reset, (active low) . //input到寄存器名之間四個tab鍵,注意對齊 input clk_* ; // clock signal , 50M . //注意注釋的格式,簡潔有力,盡量使用英文 input [n:0] a_din ; // ***** //此處是在模塊名部分沒有聲明端口類型時用 input [k:0] b_din ; // ***** //注釋盡量不要挨到前面,然后全左對齊 // ****************************** // DEFINE OUTPUT // ****************************** output [m:0] a_dout ; // ***** //位寬定義和output之間加一個tab或空格,統(tǒng)一即可 output [i:0] b_dout ; // ***** // ****************************** // OUTPUT ATRRIBUTE // ****************************** // REGS reg [m:0] a_dout ; // ***** //WIRES wire [i:0] b_dout ; // ***** // ****************************** // INSTSNCE MODULE // ****************************** MODULE_NAME_A U_MODULE_NAME_A( //例化名從和模塊名相距四個tab,括號后換行 .A (A ), //端口和例化名對齊,后3個tab再括號連線 .B (B ), //括號內(nèi)3個tab的寬度,全對齊 .C (C ), ); … // ****************************** //MAIN CODE // ****************************** … … … … … … // ****************************** // endmodule //結(jié)尾頂格,中間部分均從一個tab開始
1.3一致的排版
A. 一致的縮排
//統(tǒng)一的縮排取4個空格寬度 //輸入輸出信號的寬度定義與關(guān)鍵字之間,信號名與寬度之間要用tab分開;所有寬度定義對所有信號名對齊,代碼風(fēng)格統(tǒng)一如下: input [3:0] input_a ; // ***** input input_b ; // ***** … output [128:0] output_a ; output [15:0] output_b ; output output_c ;
B.一致的 begin end 書寫方式
//always 中,一定要用begin end 區(qū)分,格式和代碼風(fēng)格統(tǒng)一如下: always @ (postedge clk or negedge rst_n) begin if (rst_n==1’b0) syn_rst<= ‘DLY 1’b0; else begin if (a==b) syn_rst<= ‘DLY 1’b1; else syn_rst<= ‘DLY 1’b0; end end //if else 中僅有一個語句行時,不要使用begin end; 如果有多個語句行時,begin end和if ()或else ()空四個格。 格式如下: if (…) … else if (…) else //******************************************************************** if (…) … else if (…) begin … …( end else
1.4 一致的信號命名風(fēng)格
簡潔,清晰,有效是基本的信號命名規(guī)則,詳見命名規(guī)范。
全稱 | 縮寫 | 中文含義 |
---|---|---|
acknowledge | ack | 應(yīng)答 |
adress | addr(ad) | 地址 |
arbiter | arb | 仲裁 |
check | chk | 校驗,如CRC校驗 |
clock | clk | 時鐘 |
config | cfg | Configuration,裝置 |
control | ctrl | 控制 |
count | cnt | 計數(shù) |
data in | din(di) | 數(shù)據(jù)輸入 |
data out | dout(do) | 數(shù)據(jù)輸出 |
decode | de | 譯碼 |
decrease | dec | 減一 |
delay | dly | |
disable | dis | 不使能 |
error | err | 錯誤(指示) |
enable | en | 使能 |
frame | frm | 幀 |
generate | gen | 生成,如CRC生成 |
grant | gnt | 申請通過 |
increase | inc | 加一 |
input | in(i) | |
length | len | (幀、包)長 |
nmport | nm | 網(wǎng)管相關(guān) |
output | out(o) | |
packet不推薦packet | pkt | 與幀相同 |
priority | pri | 優(yōu)先級 |
pointer | ptr | 指針 |
rd enable | ren | 讀使能 |
read | rd | 讀(操作) |
ready | rdy | 應(yīng)答信號或準(zhǔn)備好 |
receive | rx | (幀數(shù)據(jù))接收 |
request | req | (服務(wù)、仲裁)請求 |
reset | rst | |
segment | seg | |
souce | scr | 源(端口) |
ststistics | stat | 統(tǒng)計 |
timer | tmr | 定時器 |
switcher | sf | Switch fabric |
temporary | tmp | 臨時 |
transmit | tx | 發(fā)送(幀數(shù)據(jù))相關(guān) |
Valid | vld(v) | 有效、校驗正確 |
wr enable | wen | 寫使能 |
write | wr | 寫操作 |
a.端口、信號、變量名的所有字母小寫:函數(shù)名、宏定義、參數(shù)定義用大寫
b.使用簡稱、縮略詞(加上列表)
c.基于含義命名(避免以數(shù)字命名的簡單做法),含義可分段(最多分三段),每一小段之間加下劃線””,如txdataval;命名長度一般限制在20個字符以內(nèi)。
d.低電平有效信號,加后綴”n”,如 rstn
e.無條件寄存的寄存信號在原信號上加ff1、ff2… 如原信號 datain, 寄存一拍datainff1,寄存兩拍datainff2
f.不能用 ”reg”,作為最后的后綴名,因為綜合工具會給寄存器自動加上reg, 如果命名里就用reg作為后綴名則擾亂了網(wǎng)表的可讀性。
評論