文章目錄
寫在前面
對於代碼準則這個話題,各個公司或者機構都有各自的要求,但是他們之間的統一性在於這樣一個目的:
- 提高代碼的可讀性,使代碼易於理解;
- 編寫代碼的統一性,規範代碼設計;
- 使得代碼不容易出錯。
如果做到這些呢?它們有一些共性,我們最好在編寫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
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
參考資料
- nandland coding-style-recommendations-vhdl-verilog
- Altera’s Recommended HDL Coding Styles
- [Lattice HDL Coding Guidelines](file:///D:/Downloads/HDLcodingguidelines.pdf)
- opencores_coding_guidelines
- springer
- Xilinx related HDL coding guidelines1
- Xilinx_HDL_Coding_style