Verilog代碼規范I
"規范"這問題
"規范"這個富含專業氣息的詞匯(個人感覺),其實規范這種東西,就是大家都約定熟成的東西,一旦你不遵守這個東西,專業人士就會覺得你不夠專業,特別是程序開發方面的問題。
為什么要規范呢?一方面能體現你足夠專業,另一方面也是最重要的一方面,代碼的規范性有利於開發交流,讓代碼的可讀性大大增強,也有利於降低代碼的出錯率。
網上關於EDA設計方面的代碼規范問題的資料,以前開發的時候都沒有養成一個很好的代碼規范,在大的項目工程中,這方面的弊端開始慢慢顯現,對后續的修改和維護造成很大的影響,重新去編寫又浪費很多的時間,所以請記住一句話"千里之行始於足下",不要到走了很遠之后才發現導向錯了。
Verilog代碼有哪些規范?
-
文件名必須體現出設計模塊的功能;
在verilog設計中,模塊名就是文件名,這是由於軟件編譯的問題而限制的。所以設置模塊名的時候也決定了文件名。因此,模塊名的設定要體現出模塊的功能,這樣設定對於大的工程項目設計很有用處,便於查找分析。
- 時鍾信號及低電平有效信號的命名:
時鍾信號一般的命名為:clk;
請回憶一下,你所編寫的程序中低電平復位信號是如何編寫的,目前我所見過的版本有:reset,rst,reset_n,rst_n;普遍就是這四種。前兩種體現出該信號是高電平有效的,而后兩種體現該復位信號是低電平有效的,在設計規范中就是采用*_n來表示低電平有效的。所以低電平有效的信號一律采用*_n表示,增強代碼的可讀性。
-
參數 parameter和宏定義 `define
在定義參數和宏定義時,名字要采用大寫進行表示,如下:
parameter DATA_WIDTH = 32;
`define AHB_TRANS_SEQ 2'b11;
-
信號、端口、模塊、例化
有關這四個方面的代碼設計最好采用小寫進行設計,如下:
-
命名字符的長度
一般字符命名的長度不要超過32個;
-
有關模塊調用的實體名的設定,參考如下:
mux4 u_mux4_1 (…);
mux4 u_mux4_2 (…);
-
位寬的描述
在Verilog的設計中一般采用的為[x:0];在VHDL中一般采用的是x downto 0;
采用的都是從高在左低位在右符合人的閱讀順序的方式。
-
Begin和end、case和endcase、if和else的對准問題
這里采用一個實例進行說明:
-
到這里所說到的都是關於文本輸入形式的,那么在原理圖輸入方式中有沒有相關的規范問題呢?答案是肯定的!!!所以經常采用原理圖輸入的好好注意了!!!
原理圖輸入方式中,有時會將自己所寫的文本生生成一個原理圖的模塊,然后導入到原理圖的設計中,這時該原理圖也被設置為頂層模塊,所以有時問題就產生在這里。當有多個模塊導入原理圖時,這是就需要將這些模塊連接起來,如果在連接的時候用一些分立的邏輯元件將模塊與模塊之間連接起來,這就產生了一個所謂"膠合邏輯"的問題,因為該邏輯元件在綜合時是沒有加入到任何一個模塊里面的,所以就無法進行整體的最優化綜合,所以就無法產生一個最優化的電路,這個邏輯元件將兩個模塊有縫地連接起來,這樣的電路在同步中又怎么會穩定呢?
所以請記住一點,有文本輸入和原理圖輸入的工程中,原理圖作為頂層文件時,原理圖最好是頁水平的分層結構,即原理圖中的模塊都是采用文本輸入之后生成的,這樣就避免了"膠合邏輯",讓綜合器更好地綜合我們設計的電路。
"膠合邏輯"實例:是否在你的原理圖中出現過呢?。。。。。。。。。。。。。
- 非阻塞和阻塞問題,這個問題在FPGA設計中是老生常談的問題
下面看看一個實例,相信你就懂了:
從時間上進行分析的話,非阻塞賦值就是同時賦值,而阻塞賦值就是順序賦值,軟件綜合時也會幫你對電路進行簡化。
-
信號敏感列表
什么是信號敏感列表呢?就是在需要信號輸入的模塊中,如always @()--括號內包含的信號就是敏感信號,也就是說在括號內的信號都將會影響模塊的工作或者是模塊內某些信號的輸出。
那什么信號是敏感信號呢?凡是影響模塊輸出和工作狀態的信號都將是敏感信號,一般有:時鍾信號、復位信號、置數信號、某些賦值語句的右邊信號還有一些條件信號。
-
復位&初始化
相信你看過的經典代碼中,一般都會包含有復位信號rst_n吧!
為什么要復位呢?
一個是為了初始化,另一個是在系統工作異常時重新進入初始狀態(就像電腦有時死機重啟一樣)。
為什么要初始化呢?
在FPGA中經常要用到reg,不是嗎?而且是經常要用到,沒有reg就沒有FPGA。而reg在上電后里面所寄存的是1還是0是不一定的,這將會造成很大的問題,會造成輸出不確定、會造成狀態機進入與確定的狀態…………所以就需要在上電的時候,利用復位信號進行初始化,就reg的值進行初始化,使一切都是確定的,防止不確定狀態的出現。實例如下:
大西瓜FPGA-->https://daxiguafpga.taobao.com
博客資料、代碼、圖片、文字等屬大西瓜FPGA所有,切勿用於商業! 若引用資料、代碼、圖片、文字等等請注明出處,謝謝!
每日推送不同科技解讀,原創深耕解讀當下科技,敬請關注微信公眾號“科乎”。