FPGA學習筆記(二)——verilog代碼規範化

1.工程組織形式

工程的組織形式一般包括如下幾個部分,分別是doc、par、rtl和sim四個部分。doc:一般存放工程相關的文檔,包括該項目用到的datasheet(數據手冊)、設計方案等。 不過爲了便於大家查看,我們開發板文檔是一彙總存放在資料盤下的;

par:主要存放工程文件和使用到的一些IP文件;
 
rtl:主要存放工程的rtl代碼,這是工程的核心,文件名與module名稱應當一致,建議按 照模塊的層次分開存放;
 
sim:主要存放工程的仿真代碼,複雜的工程裏面,仿真也是不可或缺的部分,可以極大 減少調試的工作量。
 
2.文件頭聲明
每一個Verilog文件的開頭,都必須有一段聲明的文字。包括文件的版權,作者,創建日期以及內容介紹等,如下表所示。
 

3.輸入輸出定義

行只定義個信號;

② 信號全部對齊;

③ 同一組的信號放在一起。
 
4.parameter定義
module中的parameter聲明,不建議隨處亂放;
② 將parameter定義放在緊跟着module的輸入輸出定義之後;
parameter等常量命名全部使用大寫。
 
5.wire/reg定義
 
① 將regwire的定義放在緊跟着parameter之後;
② 建議具有相同功能的信號集中放在一起;
③ 信號需要對齊,reg和位寬需要空2格,位寬和信號名字至少空四格;
④ 位寬使用降序描述,[6:0]
⑤ 時鐘使用前綴clk,復位使用後綴rst
⑥ 不能使用Verilog關鍵字作爲信號名字;
⑦ 一行只定義一個信號。

6.信號命名

① 信號命名需要體現其意義,比如fifo_wr代表FIFO讀寫使能;
② 可以使用“_”隔開信號,比如sys_clk
③ 內部信號不要使用大寫,也不要使用大小寫混合,建議全部使用小寫;
④ 模塊名字使用小寫;
⑤ 低電平有效的信號,使用_n作爲信號後綴;
⑥ 異步信號,使用_a作爲信號後綴;
⑦ 純延遲打拍信號使用_dly作爲後綴。
 
7.always塊描述方式
if需要空四格;
② 一個always需要配一個beginend
always前面需要有註釋;
beign建議和always放在同一行;
⑤ 一個always和下一個always空一行即可,不要空多行;
⑥ 時鐘復位觸發描述使用posedge sys_clknegedge sys_rst_n
⑦ 一個always塊只包含一個時鐘和復位;
⑧ 時序邏輯使用非阻塞賦值。
 

8.assign塊描述方式

assign的邏輯不能太複雜,否則易讀性不好;
assign前面需要有註釋;
③ 組合邏輯使用阻塞賦值。
 
9.空格和TAB
由於不同的解釋器對於TAB翻譯不一致,所以建議不使用TAB,全部使用空格。
 
10.註釋
① 註釋描述需要清晰、簡潔;
② 註釋描述不要廢話,冗餘;
③ 註釋描述需要使用“//”;
④ 註釋描述需要對齊;
⑤ 核心代碼和信號定義之間需要增加註釋。
 
11.模塊例化
 
moudle模塊例化使用u_xx表示。
 
12.其他
① 代碼寫的越簡單越好,方便他人閱讀和理解;
② 不使用repeat等循環語句;
RTL級別代碼裏面不使用initial語句,仿真代碼除外;
④ 避免產生Latch鎖存器,比如組合邏輯裏面的if不帶else分支、case缺少default語句;
⑤ 避免使用太複雜和少見的語法,可能造成語法綜合器優化力度較低。
 
 
 
 
良好的代碼風格是我的堅持!

 

 
 
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章