wire表示直通,即只要輸入有變化,輸出馬上無條件地反映;reg表示一定要有觸發,輸出才會反映輸入。
不指定就預設為1位wire型別。專門指定出wire型別,可能是多位或為使程式易讀。wire只能被assign連續賦值,reg只能在initial和always中賦值。wire使用在連續賦值語句中,而reg使用在過程賦值語句中。
在連續賦值語句中,表示式右側的計算結果可以立即更新表示式的左側。在理解上,相當於乙個邏輯之後直接連了一條線,這個邏輯對應於表示式的右側,而這條線就對應於wire。在過程賦值語句中,表示式右側的計算結果在某種條件的觸發下放到乙個變數當中,而這個變數可以宣告成reg型別的。根據觸發條件的不同,過程賦值語句可以建模不同的硬體結構:如果這個條件是時鐘的上公升沿或下降沿,那麼這個硬體模型就是乙個觸發器;如果這個條件是某一訊號的高電平或低電平,那麼這個硬體模型就是乙個鎖存器;如果這個條件是賦值語句右側任意運算元的變化,那麼這個硬體模型就是乙個組合邏輯。
簡單來說硬體描述語言有兩種用途:1、**,2、綜合。
對於wire和reg,也要從這兩個角度來考慮。
1. 從**的角度來說,hdl語言面對的是編譯器(如modelsim等),相當於軟體思路。
這時:wire對應於連續賦值,如assign
reg對應於過程賦值,如always,initial
2. 從綜合的角度來說,hdl語言面對的是綜合器(如dc等),要從電路的角度來考慮。
這時:1、wire型的變數綜合出來一般是一根導線;
2、reg變數在always塊中有兩種情況:
(1)、always後的敏感表中是(a or b or c)形式的,也就是不帶時鐘邊沿的,綜合出來還是組合邏輯
(2)、always後的敏感表中是(posedge clk)形式的,也就是帶邊沿的,綜合出來一般是時序邏輯,會包含觸發器(flip-flop)
在設計中,輸入訊號一般來說你是不知道上一級是暫存器輸出還是組合邏輯輸出,那麼對於本級來說就是一根導線,也就是wire型。而輸出訊號則由你自己來決定是暫存器輸出還是組合邏輯輸出,wire型、reg型都可以。但一般的,整個設計的外部輸出(即最頂層模組的輸出),要求是暫存器輸出,較穩定、扇出能力也較好。
verilog中wire和reg型別的區別
一 基本概念 wire型資料常用來表示以assign關鍵字指定的組合邏輯訊號,模組的輸入輸出埠型別都預設為wire型,wire相當於物理連線,預設初始值是z。reg型表示的暫存器型別,用於always模組內被賦值的訊號,且必須定義為reg型,代表觸發器,常用於時序邏輯電路,reg相當於儲存單元,預設...
verilog HDL中wire和reg的區別
wire表示直通,即輸入有變化,輸出馬上無條件地反映 如與 非門的簡單連線 reg表示一定要有觸發,輸出才會反映輸入的狀態。reg相當於儲存單元,wire相當於物理連線。reg表示一定要有觸發,沒有輸入的時候可以保持原來的值,但不直接實際的硬體電路對應。兩者的區別是 暫存器型資料保持最後一次的賦值,...
Verilog中wire和reg的區別
wire為無邏輯線,本身只做連線,不帶邏輯,輸入什麼就是什麼。用always語句對wire語句賦值,綜合就會報錯。1 assign 語句 例如 reg a,b wire and result assign and result a b 2 原件例化必須用wire 例如 wire dout ram u...