wire 和reg是Verilog程序里的常見的兩種變量類型,他們都是構(gòu)成verilog程序邏輯最基本的元素。正確掌握兩者的使用方法是寫好verilog程序的前提。但同時(shí),因?yàn)樗麄冊诖蠖鄶?shù)編程語言中不存在,很多新接觸verilog語言的人并不能很清楚的區(qū)別兩種變量的不同之處。這里簡單對他們做一個(gè)比較,方便在編程時(shí)區(qū)別使用。
功能和狀態(tài)
Wire主要起信號間連接作用,用以構(gòu)成信號的傳遞或者形成組合邏輯。因?yàn)闆]有時(shí)序限定,wire的賦值語句通常和其他block語句并行執(zhí)行。
Wire不保存狀態(tài),它的值可以隨時(shí)改變,不受時(shí)鐘信號限制。
除了可以在module內(nèi)聲明,所有module的input 和output默認(rèn)都是wire型的。
Reg是寄存器的抽象表達(dá),作用類似通常編程語言中的變量,可以儲存數(shù)值,作為參與表達(dá)式的運(yùn)算,通常負(fù)責(zé)時(shí)序邏輯,以串行方式執(zhí)行。
Reg可以保存輸出狀態(tài)。狀態(tài)改變通常在下一個(gè)時(shí)鐘信號邊沿翻轉(zhuǎn)時(shí)進(jìn)行。
賦值方式
Wire有兩種賦值方式
1.在定義變量時(shí)賦初值,方式是用=。如果之后沒有再做賦值,初值會一直保留,(是否可以給邏輯?)
wire wire_a = 1’b0;
2.用assign語句賦值,等式右邊可以是wire,reg,一個(gè)常量或者是邏輯運(yùn)算
Wire wire_a;
Wire wire_b;
Wire wire_c;
Reg reg_a;
assign wire_b = wire_a;
assign wire_c =reg_a;
assign wire_d =wire_b & wire_c;
如果不賦值,wire的默認(rèn)狀態(tài)是高阻態(tài),即z。
對reg的使用通常需要有觸發(fā)條件,在always的block下進(jìn)行。觸發(fā)條件可以是時(shí)鐘信號上升沿。賦值語句可以是=或者
Wire wire_a;
Wire wire_b;
Reg reg_a;
Reg reg_b;
Always @( posedge clk)
Begin
Reg_b =reg_a;
Reg_c = wire_a | wire_b;
end
Reg在聲明時(shí)候不賦初值。未賦值的reg變量處于不定態(tài),即x。
使用方式
在引用一個(gè)module時(shí),輸入端口可以是wire型,也可以reg型。這里可以把對input的賦值看作一個(gè)assign語句,使用的變量相當(dāng)于等號右邊的變量,所以兩者都可以。
而對于輸出端口,必須使用reg型,而不能是wire型。同樣用assign的角度考慮,module的輸出在等號右邊,而使用的變量成了等號左邊,assign語句等號左邊只能是wire型。
位寬
這是個(gè)使用注意事項(xiàng)。所有的wire和reg在聲明時(shí)如果不做特殊聲明,只有1位。這個(gè)對于熟悉其他編程語言的人是一個(gè)容易犯錯(cuò)的地方。
執(zhí)行
wire wire_a = 4’he;
語句最后得到的wire_a是0x1,而不是0xe。因?yàn)閣ire_a只取了0xe的最低位的值而省略掉了其他值。所以正確的語句應(yīng)該是
wire[3:0] wire_a = 4’he;
這樣wire_a輸出的結(jié)果才是一個(gè)0xe。
小結(jié)
這篇文章從功能,變量狀態(tài),賦值方式,使用方式等角度討論了wire和reg變量類型的區(qū)別。并且給出了一個(gè)在verilog中常見的使用錯(cuò)誤及解決方法。
-
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124467 -
Verilog
+關(guān)注
關(guān)注
29文章
1367瀏覽量
112268 -
編程語言
+關(guān)注
關(guān)注
10文章
1956瀏覽量
36648
發(fā)布評論請先 登錄
VHDL與verilog中if判斷條件的一點(diǎn)小區(qū)別
wire 與 reg 區(qū)別
verilog inout的 用法
【小白求問】verilog中reg類型變量可以和integer類型的變量相乘嗎?
關(guān)于verilog 語句中變量類型的確定,例:請指出下面幾條語句中變量的類型:8.1) assign A=B; 8.2) always #1 Count=C+1;
FPGA小技巧,在設(shè)計(jì)文件中,如何確定信號是reg型還是wire型?
【技巧分享】在設(shè)計(jì)文件中,如何確定信號是reg型還是wire型?
基本Verilog中的變量有線網(wǎng)類型和寄存器類型
Verilog 變量聲明與數(shù)據(jù)類型二
Verilog 變量聲明與數(shù)據(jù)類型一
FPGA的視頻教程之Verilog中reg和wire的不同點(diǎn)詳細(xì)資料說明

評論