奇技淫巧我不會,但我這有一些我工作后才學到的一些Verilog寫法。數字電路設計主要就是,選擇器、全加器、比較器,幾個常用邏輯門,再加個D觸發器,電路基本都能實現了。寫代碼其實是個體力活,電路和時序圖應該在設計階段就已經到了你的文檔里或在腦子里沒來得及寫出來。組合邏輯+時序邏輯
assign或always@(*)
always@(posedge clk or negedge rst_n)
有人說掌握Verilog 20%的語法就可以描述 90%以上的電路,說的對。
casez
這樣的case有優先級選擇,可綜合,實際項目可以使用,不過我個人習慣上還是,有優先用if-else,沒有直接用case。synopsys的EDA工具有關於full case與parallel case可以查看下面博客鏈接。https://blog.csdn.net/li_hu/article/details/10336511
generate+for
合理使用generate+for循環可以提高編碼效率,同樣的賦值語句需要賦值多次。
同一個模塊需要實例化多次:
當然這樣寫debug會有一些困擾,Verdi會顯示每一個generate塊,選中對應的塊,加進去的波形就會是對應的bit信號。
generate if/case
做一些通用IP的方法,隨便舉個例子比如要做一個選擇器通用IP,支持二選一,三選一,四選一。
generate case可以寫更多的分支
調用的時候只需要:
布線太密的原因
寄存器位寬太大。
reg [10000-1:0] data;