歡迎您光臨本站 登入註冊首頁

verilog綜合小結

admin @ 2014-03-26 , reply:0

概述

一:基本Verilog中的變數有線網類型和寄存器類型。線網型變數綜合成wire,而寄存器可能綜合成WIRE,鎖存器和觸發器。二:verilog語句結構到門級的映射連續性賦值:assign連續性賦值語句……

一:基本
Verilog中的變數有線網類型和寄存器類型。線網型變數綜合成wire,而寄存器可能綜合成WIRE,鎖存器和觸發器。

二:verilog語句結構到門級的映射

  1. 連續性賦值:assign
    連續性賦值語句邏輯結構上就是將等式右邊的驅動左邊的結點。因些連續性賦值的目標結點總是綜合成由組合邏輯驅動的結點。Assign語句中的延時綜合時都將忽視。
  2. 過程性賦值:
    過程性賦值只出現在always語句中。
    阻塞賦值和非阻塞賦值就該賦值本身是沒有區別的,只是對後面的語句有不同的影響。
    建議設計組合邏輯電路時用阻塞賦值,設計時序電路時用非阻塞賦值。
    過程性賦值的賦值對象有可能綜合成wire,latch,和flip-flop,取決於具體狀況。如,時鐘控制下的非阻塞賦值綜合成flip-flop。
    過程性賦值語句中的任何延時在綜合時都將忽略。
    建議同一個變數單一地使用阻塞或者非阻塞賦值。
  3. 邏輯操作符:
    邏輯操作符對應於硬體中已有的邏輯門
  4. 算術操作符:
    Verilog中將reg視為有符號數,而integer視為有符號數。因此,進行有符號操作時使用integer,使用無符號操作時使用reg。
  5. 進位:
    通常會將進行運算操作的結果比原操作數擴展一位,用來存放進位或者借位。如:
    Wire [3:0] A,B;
    Wire [4:0] C;
    Assign C=A+B;
    C的最高位用來存放進位。
  6. 關係運算符:
    關係運算符:<,>,<=,>=
    和算術操作符一樣,可以進行有符號和無符號運算,取決於數據類型是reg ,net還是integer。
  7. 相等運算符:==,!=
    注意:===和!==是不可綜合的。
    可以進行有符號或無符號操作,取決於數據類型
  8. 移位運算符:
    左移,右移,右邊操作數可以是常數或者是變數,二者綜合出來的結果不同。
  9. 部分選擇:
    部分選擇索引必須是常量。
  10. BIT選擇:
    BIT選擇中的索引可以用變數,這樣將綜合成多路(復用)器。
  11. 敏感表:
    Always過程中,所有被讀取的數據,即等號右邊的變數都要應放在敏感表中,不然,綜合時不能正確地映射到所用的門。
  12. IF:
    如果變數沒有在IF語句的每個分支中進行賦值,將會產生latch。如果IF語句中產生了latch,則IF的條件中最好不要用到算術操作。Case語句類似。Case的條款可以是變數。如果一個變數在同一個IF條件分支中先贖值然後讀取,則不會產生latch。如果先讀取,后贖值,則會產生latch。
  13. 循環:
    只有for-loop語句是可以綜合的。
  14. 設計時序電路時,建議變數在always語句中賦值,而在該always語句外使用,使綜合時能準確地匹配。建議不要使用局部變數。
  15. 不能在多個always塊中對同一個變數贖值
  16. 函數
    函數代表一個組合邏輯,所有內部定義的變數都是臨時的,這些變數綜合後為wire。
  17. 任務:
    任務可能是組合邏輯或者時序邏輯,取決於何種情況下調用任務。
  18. Z:
    Z會綜合成一個三態門,必須在條件語句中賦值
  19. 參數化設計:
    優點:參數可重載,不需要多次定義模塊

三:模塊優化

  1. 資源共享:
    當進程涉及到共用ALU時,要考慮資源分配問題。可以共享的操作符主要有:關係操作符、加減乘除操作符。通常乘和加不共用ALU,乘除通常在其內部共用。
  2. 共用表達式:
    如:C=A+B;
    D=G+(A+B);
    兩者雖然有共用的A+B,但是有些綜合工具不能識別.可以將第二句改為:D=G+C;這樣只需兩個加法器.
  3. 轉移代碼:
    如循環語句中沒有發生變化的語句移出循環.
  4. 避免latch:
    兩種方法:1、在每一個IF分支中對變數賦值。2、在每一個IF語句中都對變數賦初值。
  5. 模塊:
    綜合生成的存儲器如ROM或RAM不是一種好方法。最好用庫自帶的存儲器模塊。

四、驗證:

  1. 敏感表:
    在always語句中,如果敏感表不含時鐘,最好將所有的被讀取的信號都放在敏感表中。
  2. 非同步複位:
    建議不要在非同步時對變數讀取,即非同步複位時,對信號贖以常數值。

[admin via 研發互助社區 ] verilog綜合小結已經有3149次圍觀

http://cocdig.com/docs/show-post-42998.html