在實際工作中,許多公司對Verilog程序編寫規范都有要求。在公司內部統一Verilog程序編寫規范不僅可以增強程序的可讀性、可移植性,而且也有助于邏輯工程師之間交流、溝通,提升邏輯組成員之間的團隊協作能力。本文就大部分公司常見的Verilog程序編寫規范作一個介紹。
01 編寫風格
begin/end要單獨另起一行,配對的begin/end列對齊。
if/else分支中,多條語句必須使用being/end。多條語句若不加begin/end,則只有第一條語句會有效,故多條語句必須加begin/end。
書寫時括號和括號間不用空格。舉例:assign y = ((a==1’b1) && (b==1’b1))。
if/else語句必須配對使用,時序邏輯中else不用給自身賦值,空操作時只需要寫“;”。
所有的縮進以4個空格為單位。
分號和逗號緊跟信號。
case/default配對使用。
模塊內部不能使用高阻或未知結果用作對比條件。例:if(a == 1'bz) 或 if(a == 1'bx)。
02 命名風格
Verilog的保留關鍵字不允許作為命名字符串使用。在RTL代碼中使用Verilog的關鍵字命名可能會導致綜合或仿真出現編譯錯誤。
命名字符集只能為[“a-z”,“A-Z”,"0-9”, “_” ],不能有其他字符。
代碼中的所有信號名都必須小寫。
信號命名總數不超過15個字符。
使用下劃線作為命名分隔符。
不允許兩個連續的下劃線出現在命名字符串中。如果采用連續兩個或多個下劃線,不便于代碼閱讀和維護,而且閱讀時很難區分有幾個下劃線。
不允許使用大小寫來區分模塊名稱、變量、信號。
用大小寫來區分模塊、變量或信號不僅不方便代碼閱讀和理解,而且有安全隱患。因為編譯器有可能不區分大小寫,增加代碼出錯的風險。
03 設計風格
模塊中經常使用的參數,或在例化時需要修改的參數使用parameter定義。
同一always塊中,非阻塞賦值和阻塞賦值不能混用。在時序邏輯語句塊(always)中統一采用非阻塞型賦值;在組合邏輯語句塊(always和assign)中統一采用阻塞型賦值;組合時序混合電路,統一采用非阻塞賦值;不可以用反或混合使用阻塞和非阻塞賦值;
不要使用門控時鐘。門控時鐘的定義:組合邏輯產生的信號當其它模塊的時鐘稱為門控時鐘。門控時鐘是非常危險的,極易產生毛刺,使邏輯誤動作。在可編程邏輯器件中,一般使用觸發器的時鐘使能端,而這樣,并不增加資源,只要保證建立時間,可使毛刺不起作用。
模塊的內部信號統一用時鐘的上升沿采樣。
模塊中的信號必須在復位時被賦予初始值。
不要將時鐘信號作為數據信號輸入,不允許使用行波計數器。行波計數器中,前級寄存器的數據輸出作為后級寄存器的時鐘輸入。行波計數器雖然原理簡單,設計方便,但級連時鐘(行波時鐘)最容易造成時鐘偏差(△T),級數多了,很可能會影響其控制的觸發器的建立/保持時間,使設計難度加大。
在條件表達式中不要使用高阻Z。在邏輯代碼中,除了三態控制邏輯接口允許使用高阻Z狀態進行信號賦值外,在其他信號賦值,條件表達式等邏輯中都不允許使用高阻Z狀態。
向量、參數和信號的位寬在定義時要清晰的表示出來,數據位寬要匹配。
審核編輯:湯梓紅
-
FPGA
+關注
關注
1620文章
21507瀏覽量
598835 -
Verilog
+關注
關注
28文章
1333瀏覽量
109710 -
程序編寫
+關注
關注
1文章
14瀏覽量
8187
原文標題:Verilog語言編程規范
文章出處:【微信號:fpga加油站,微信公眾號:fpga加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論