Verilog HDL 使用規範(一)

2021-08-26 09:38:51 字數 1887 閱讀 2614

本博文參考:《大規模邏輯設計指導書》,對於寫出規範的**,培養良好的**風格頗有裨益。

這個說明至關重要啊,如果不滿足這個,也許**的時候沒問題,但是綜合時候絕對出現,不可以綜合。我就犯過多次這個錯誤。

曾經寫過一篇部落格,專門說過:modelsim下進行功能**沒問題,可是在ise綜合報錯,如何解決?

儘管,標準並沒有強制這樣,但是這樣更規範,讀**更加容易。

這個比較好理解,儘管verilog hdl語言有自己的優先順序,但是使用括號來表示優先順序對讀者來說更加清晰,更有意義。

例如:if( (a>b) && (c>d) )......

就比下面這種表達要好:

if( a>b && c>d ),儘管二者的作用一致。

當比較向量時,verilog將對 位數小的向量做0擴充套件以使它們的長度相匹配,它的自動擴充套件是隱式的。建議採用顯示擴充套件,這個規律同樣適用於向量同常量的比較。

例如:reg [7:0] a;

reg [3:0] b;

if( a == ) begin

endif( a == 8'b0 ) begin

end

在做硬體設計時,常要求條件為真時執行一種動作,而條件為假時,執行另乙個動作,即使認為條件為假不可能發生,也要有乙個else語句,該語句可以為乙個空語句。

如果沒有else語句可能會使綜合出來的邏輯和rtl級的邏輯不同。(這句話什麼意思呢?就是如果沒有else語句,綜合工具可能會綜合出來一些你不希望出現的東西,例如會綜合出鎖存器。本可以不用鎖存器的,可偏偏因為沒有加else語句,而綜合出了鎖存器,這不僅對電路的整體效能產生影響,同時也會導致資源浪費。)

例如:

always @(cond)

begin

if(cond)

dataout <= datain; //缺少else語句

end

以上語句dataout會綜合成鎖存器。

上面的語句是有優先順序的,if的優先順序最高,else if其次,else最後。

v1 = 2'b00; //default

v2 = 2'b00;

v3 = 2'b00;

if(a == b) begin

v1 = 2'b01;

v2 = 2'b10; //v3 is not assigned

endelse if(a == c) begin

v2 = 2'b10;

v3 = 2'b11; //v1 is not assigned

endelse ;

上面的意思就是如果變數在語句中未全部賦值,那麼在開始應該給變數乙個預設值,要不然它的值就不可**了。

這篇博文暫時就到這裡,當然需要注意的地方還有很多,我們以後繼續更新。更新包括對本部落格的修改以及新增,根據實際檢驗而解釋。

例如:下面這句話我就沒有說太多的話,因為我還不太清楚。在以往的電路設計中很少使用函式和任務,所以得先學習學習然後實踐下。

用乙個函式(function)來代替表示式的多次重複,經常使用的一組描述可以寫到乙個任務中。

【verilog hdl】函式(function)與任務(task)簡單介紹

Verilog HDL 語言書寫規範

型別 命名方式 例項頂層檔案 物件 功能 top video online top.v 邏輯控制檔案 物件 ctr ddr ctr.v 驅動程式 物件 功能 dri lcd dri.v 引數檔案 物件 para lcd para.v 模組介面 特徵域 檔名 u mcb read c3 mcb rea...

mysql 使用規範 MySQL使用規範

一 表設計類 強制類規範 1.建立表的儲存引擎必須是innodb。2.每個表必須顯式的指定乙個主鍵。3.不允許使用聯合主鍵。4.不允許使用外來鍵。5.不允許存在和主鍵重複的索引。6.自增長字段必須是主鍵或唯一索引。7.不允許在資料庫中儲存諸如,影像之類的二進位制資料。8.不允許使用text型別字段 ...

mysql 使用規範 MySQL使用規範

mysql使用規範 一 核心規範 www.2cto.com 1.不用資料庫做運營,如md5 order by rand 2.控制單錶資料量 a 單錶純int不超過1000w b 單錶含char不超過500w c 單庫不超過300 400個表 3.表字段數少而精 a 影響因素 i.io高效 ii.全表...