回覆列表
  • 1 # 使用者5080196806422

    wire表示直通,即輸入有變化,輸出馬上無條件地反映(如與、非門的簡單連線)。

    reg表示一定要有觸發,輸出才會反映輸入的狀態。

    reg相當於儲存單元,wire相當於物理連線。reg表示一定要有觸發,沒有輸入的時候可以保持原來的值,但不直接實際的硬體電路對應。

    兩者的區別是:暫存器型資料保持最後一次的賦值,而線型資料需要持續的驅動。wire使用在連續賦值語句中,而reg使用在過程賦值語句(initial ,always)中。wire若無驅動器連線,其值為z,reg預設初始值為不定值 x 。

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

    對組合邏輯輸出變數,可以直接用assign。即如果不指定為reg型別,那麼就預設為1位wire型別,故無需指定1位wire型別的變數。當然專門指定出wire型別,可能是多位或為使程式易讀。wire只能被assign連續賦值,reg只能在initial和always中賦值。

    輸入埠可以由wire/reg驅動,但輸入埠只能是wire;輸出埠可以是wire/reg型別,輸出埠只能驅動wire;若輸出埠在過程塊中賦值則為reg型,若在過程塊外賦值則為net型(wire/tri)。用關鍵詞inout宣告一個雙向埠, inout埠不能宣告為reg型別,只能是wire型別。

    預設訊號是wire型別,reg型別要申明。這裡所說的預設是指輸出訊號申明成output時為wire。如果是模組內部訊號,必須申明成wire或者reg.

    對於always語句而言,賦值要申明成reg,連續賦值assign的時候要用wire。

  • 中秋節和大豐收的關聯?
  • 如何選擇風險投資的退出方式?