Verilog以及VHDL所倡導的的代碼準則

寫在前面

對於代碼準則這個話題,各個公司或者機構都有各自的要求,但是他們之間的統一性在於這樣一個目的:

  1. 提高代碼的可讀性,使代碼易於理解;
  2. 編寫代碼的統一性,規範代碼設計;
  3. 使得代碼不容易出錯。

如果做到這些呢?它們有一些共性,我們最好在編寫Verilog以及VHDL時統一這些規則,以便達成共識!

我搜集了互聯網上公開的各種資料,對這個話題進行總結如下!

正文


前綴

i_   Input signal 
o_   Output signal 
r_   Register signal (has registered logic) 
w_   Wire signal (has no registered logic) 
c_   Constant 
g_   Generic (VHDL only)
t_   User-Defined Type  

你有沒有遇到過這種情況?

在不太規範的大型工程設計,閱讀例化模塊時,在繁多的端口列表中難以區分輸入輸出,不得不進入具體的模塊中,去尋找輸入輸出關係,耗費眼力也耗費體力,讓人苦惱不堪!
於是抱怨Verilog以及VHDL的可閱讀性,其實不然,上面的前綴可以解決這個基本的煩惱,如果統一對輸入輸出變量的命名方式,也就是使用上述前綴,是一個不錯的習慣!

下面根據重要性程度分別對其介紹:

i_和o_前綴:

這是您應該採用的最重要的樣式! 太多的設計人員沒有表明他們的信號是實體/模塊的輸入還是輸出。 瀏覽代碼以確定信號方向可能非常困難且煩人。 另外,一個名爲“data”且爲輸出的信號比名爲“ o_data”的信號更難通過搜索在代碼中找到。 示例:i_address,o_data_valid。


r_和w_前綴:

這是您需要使用的第二重要的樣式。 指出您的信號是reg類型還是wire類型,對於編寫好的代碼非常重要。 Verilog的優勢在於它可以迫使您將信號聲明爲reg或wire,但是VHDL卻沒有這樣的要求! 因此,這種樣式對於VHDL編碼器尤其重要。 用r_聲明的所有信號都應具有初始條件。 在時序process中(在VHDL中)或always(在Verilog中),用w_聲明的所有信號都絕對不能出現在賦值運算符的左側。 示例:r_Row_Count,w_Pixel_Done。


c_,g_ 和 t_(前綴):

這些在編碼時很有幫助。 c_表示您正在引用VHDL中的常量或Verilog中的參數。 g_用於所有VHDL泛型。 t_表示您正在定義自己的數據類型。 我發現這些有幫助。 示例:c_NUM_BYTES,t_MAIN_STATE_MACHINE。 對於狀態機,我喜歡使用所有大寫字母…例如 IDLE,DONE,CLEANUP。 在過去,我使用s_來指示狀態,但是我已經不用了。 首選項更改爲使用c作爲前綴。

關於大寫的說明

是否要大寫信號名稱取決於您。 如您在上面的示例中看到的那樣,除前綴之外,我將所有不是輸入或輸出的信號都大寫。 如果您更願意將信號命名爲r_Row_Count或r_row_count而不是r_ROW_COUNT,那麼這完全取決於您。 我建議您保持一致! VHDL不區分大小寫,因此r_ROW_COUNT與r_Row_Count相同,但是在Verilog中不是這樣。 Verilog區分大小寫,因此維護大寫規則非常重要! 當您只想創建一個信號時,您不想意外地創建兩個不同的信號,否則您將度過非常糟糕的時光。

關於初始化信號的注意事項

人們普遍存在一個誤解,認爲FPGA中的寄存器需要復位信號才能初始化。 這是不正確的,FPGA寄存器可以具有初始值。所有FPGA都可以初始化爲零或非零值。 實際上,最佳實踐是在設計中復位儘可能少的觸發器,而是依靠初始化所有觸發器。 這樣做的原因是,您添加到觸發器中的每條復位線都會佔用佈線資源和功耗,並使您的設計更難以滿足時序要求。

您應遵循的規則是:所有寄存器(由r_前綴標識)應始終具有初始條件。 禁止對wire型(用w_前綴標識)施加初始條件。 當您仿真設計時,在仿真甚至開始之前,所有信號都應爲綠色。 如果這是真的,那麼您會更快樂。

當然,上面是通用的規則,各大公司還有各自推薦的規則,例如:

Xilinx related HDL coding guidelines

Xilinx related HDL coding guidelines1

ug901-vivado-synthesis

Xilinx_HDL_Coding_style

Altera’s Recommended HDL Coding Styles

內容太多,各位參考資料:

Altera’s Recommended HDL Coding Styles

Lattice HDL Coding Guidelines

[Lattice HDL Coding Guidelines](file:///D:/Downloads/HDLcodingguidelines.pdf)

opencores_coding_guidelines

opencores_coding_guidelines

參考資料

  1. nandland coding-style-recommendations-vhdl-verilog
  2. Altera’s Recommended HDL Coding Styles
  3. [Lattice HDL Coding Guidelines](file:///D:/Downloads/HDLcodingguidelines.pdf)
  4. opencores_coding_guidelines
  5. springer
  6. Xilinx related HDL coding guidelines1
  7. Xilinx_HDL_Coding_style
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章