首頁>Club>
17
回覆列表
  • 1 # 使用者7972824677773

    wire與reg型別的區別:

    wire型資料常用來表示以assign關鍵字指定的組合邏輯訊號。模組的輸入輸出埠型別都預設為wire型。預設初始值是z。

    reg型表示的暫存器型別。always模組內被賦值的訊號,必須定義為reg型,代表觸發器。

    預設初始值是x。

    reg相當於儲存單元,wire相當於物理連線。

    Verilog 中變數的物理資料分為線型和暫存器型。這兩種型別的變數在定義時要設定位寬,預設為1位。變數的每一位可以是0,1,X,Z。其中x代表一個未被預置初始狀態的變數或者是由於由兩個或多個驅動裝置試圖將之設定為不同的值而引起的衝突型線型變數。z代表高阻狀態或浮空量。

    線型資料包括wire,wand,wor等幾種型別在被一個以上激勵源驅動時,不同的線型資料有各自決定其最終值的分辨辦法。

    兩者的區別是:暫存器型資料保持最後一次的賦值,而線型資料需要持續的驅動

    輸入埠可以由net/reg驅動,但輸入埠只能是net,如a = b & c,輸入埠a 只能是net型,但其驅動b,c可以是net/reg型;輸出埠可以使net/reg型別,輸出埠只能驅動net,如a = b & c,模組的輸出埠b,c可以是net/reg型,但它們驅動的a必須是net型;若輸出埠在過程塊(always/initial)中賦值則為reg型,若在過程塊外賦值則為net型。用關鍵詞inout宣告一個雙向埠, inout埠不能宣告為暫存器型別,只能是net型別。

    wire表示直通,即只要輸入有變化,輸出馬上無條件地反映;reg表示一定要有觸發,輸出才會反映輸入。

    不指定就預設為1位wire型別。專門指定出wire型別,可能是多位或為使程式易讀。wire只能被assign連續賦值,reg只能在initial和always中賦值。wire使用在連續賦值語句中,而reg使用在過程賦值語句中。

    在連續賦值語句中,表示式右側的計算結果可以立即更新表示式的左側。在理解上,相當於一個邏輯之後直接連了一條線,這個邏輯對應於表示式的右側,而這條線就對應於wire。在過程賦值語句中,表示式右側的計算結果在某種條件的觸發下放到一個變數當中,而這個變數可以宣告成reg型別的。根據觸發條件的不同,過程賦值語句可以建模不同的硬體結構:如果這個條件是時鐘的上升沿或下降沿,那麼這個硬體模型就是一個觸發器;如果這個條件是某一訊號的高電平或低電平,那麼這個硬體模型就是一個鎖存器;如果這個條件是賦值語句右側任意運算元的變化,那麼這個硬體模型就是一個組合邏輯。

    wire型的變數綜合出來一般是一根導線;

    reg變數在always塊中有兩種情況: always後的敏感表中是(a or b or c)形式的,也就是不帶時鐘邊沿的,綜合出來還是組合邏輯 always後的敏感表中是(posedge clk)形式的,也就是帶邊沿的,綜合出來一般是時序邏輯,會包含觸發器(Flip-Flop)

    在設計中,輸入訊號一般來說你是不知道上一級是暫存器輸出還是組合邏輯輸出,那麼對於本級來說就是一根導線,也就是wire型。而輸出訊號則由你自己來決定是暫存器輸出還是組合邏輯輸出,wire型、reg型都可以。但一般的,整個設計的外部輸出(即最頂層模組的輸出),要求是暫存器輸出,較穩定、扇出能力也較好。

  • 中秋節和大豐收的關聯?
  • 關於固定資產的分類應該如何分類好呢?