本文為移植文章,在 原有基礎 上進行了更改完善。其中結合了自身的編寫習慣及互聯網尋找資料。互聯網參考資料可以點此進入下載鏈接進行下載查閱。
本文將分為三部分,第一部分為自我感覺舒適的代碼編程風格,第二部分為第一部分的一些附加說明。第三部分為我閱讀相關文章時所作的記錄,用於提煉總結第一部分。讀者閱讀第一、二部分就足夠了,如有興趣也歡迎瀏覽第三部分。
V編程規范整理
有關命名
通用
- 模塊/信號名盡量使用全小寫字母(若無特殊情況)。
- 模塊/信號名應使用有意義的單詞表示。
- 單詞連接使用下划線符號 "_"。
模塊命名
- 一個模塊一般放置一個文件中,文件名、模塊名保持一致。
- 模塊名控制在20個字符的長度。
信號命名
- 為了避免信號名標識符過於冗長,適當使用簡寫。
- 常數定義使用大寫字母(全大寫/首字母大寫)。
- 低電平有效信號,在其后添加后綴 "_n"。
- 三態信號,在其后添加后綴 "_z"。
- 寄存器打節拍信號,在其后添加后綴 "_r"。(次數不使用 "_reg"的願意是部分綜合器會對信號自行生成x_reg的信號,可能會造成一定的混淆)
有關注釋
通用
- 必要的注釋可以增加代碼的可讀性、可移植性、可維修性。
- 文件中代碼所占據的部分應當不少於整體的1/3。
文件注釋
- 文件的開頭,模塊聲明前需要一個頭部注釋。
- 模塊名
- 模塊功能
- 作者
- 修改記錄,應包含修改人,修改內容,修改時間等信息。
代碼注釋
- 代碼注釋盡量使用行注釋而非段落注釋
- 輸入輸出端口、所聲明變量都需要注釋簡單說明作用
- 程序塊(always塊)需要注釋說明作用,其中還需要不等條的注釋增加說明。
有關書寫
- 特殊符號前后使用空格進行隔開,增加代碼可讀性。
- 常使用 Tab 符號進行一些符號的對齊,設定 Tab 符號為 4 個空格。
- 如有判斷語句使用括號,括號的前后適當的使用空格隔開。
- 多級 if...else 嵌套,嚴格保證縮進對齊。
- 使用 begin...end 時,begin 跟在語句后(同一行),減小行數。實例說明可見附加說明中相關部分。
- 例化時嚴格使用 ".signal()" 來進行參數的傳遞。
- 三態邏輯可以在頂層使用,子模塊盡量避免使用三態信號。
- case 結構需要做到 full-case。
附加說明
說明一, 常用簡寫
說明二,暫無
個人閱讀筆記摘抄
在風格上,很多地方都有一致性,重復部分不贅述。
- 每個模塊一般存在一個單獨的文件,通常模塊名、文件名保持一致。
- 每個文件在開頭部分都應包含必要的注釋,應包含以下部分:
- 年份及公司名稱
- 作者
- 文件名
- 所屬項目
- 頂層模塊
- 模塊名稱及描述
- 修改記錄
- 如果沒有特殊情況,模塊名和信號名一律采用小寫字母。
- 常數定義(`define)和(parameter)采用大寫字母(全大寫或者部分大寫)。參數名小於20個字母。
- 標識符采用傳統C語言方式,單詞之間使用符號下划線"_"連接,比如 data_size。且需要采用用意義反應對象特征的一些標識符。
- 為了避免標識符過於冗長,可以使用一定的縮寫,比如write變為wt這些。
- 適當使用空格符號和Tab制表符號,Tab制表符定義為4個空格。
- 特殊符號前后應使用空格分隔開,比如:a <= a + 1'b1;
- 括號中有判斷條件的話,括號前后需要空格。
- 多級嵌套中,每一層需要嚴格對齊,begin...end要嚴格對齊。
- 注釋是必須的,增加可讀性和可移植性,注釋內容應不少於整篇的30%。
- For FSM variables, naming in <fsm_cs>, <fsm_ns>
- Use comments for port declarations (input and output), Use comments for internal signal declarations (wire or reg), Use comments for functional sections (always block).
- 多用"//"行注釋的方式替換段落注釋"/.../"。段落注釋可以用於文件開頭注釋。
- 例化時添加注釋說明,且使用.()例化方式。
- 及時刪除無效代碼
- 每一行聲明一個變量
- 線寬盡量對應。
- 低電平信號,信號后綴"_n"。
- 使用降序排列定義向量有效位順序,最低位0。
- 時鍾信號前綴"clk",復位信號前綴"rst"。
- 三態信號后綴加"_z",reg寄存器節拍信號后綴使用"_r"。
- 代碼中不能使用VHDL及Verilog保留字。
- 三態邏輯可以在頂層使用,子模塊避免使用。