0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談Verilog中wire和reg變量類(lèi)型的區(qū)別

454398 ? 來(lái)源:CSDN博主 ? 作者:MangoWen ? 2020-11-13 15:50 ? 次閱讀

wire 和reg是Verilog程序里的常見(jiàn)的兩種變量類(lèi)型,他們都是構(gòu)成verilog程序邏輯最基本的元素。正確掌握兩者的使用方法是寫(xiě)好verilog程序的前提。但同時(shí),因?yàn)樗麄冊(cè)诖蠖鄶?shù)編程語(yǔ)言中不存在,很多新接觸verilog語(yǔ)言的人并不能很清楚的區(qū)別兩種變量的不同之處。這里簡(jiǎn)單對(duì)他們做一個(gè)比較,方便在編程時(shí)區(qū)別使用。

功能和狀態(tài)

Wire主要起信號(hào)間連接作用,用以構(gòu)成信號(hào)的傳遞或者形成組合邏輯。因?yàn)闆](méi)有時(shí)序限定,wire的賦值語(yǔ)句通常和其他block語(yǔ)句并行執(zhí)行。

Wire不保存狀態(tài),它的值可以隨時(shí)改變,不受時(shí)鐘信號(hào)限制。

除了可以在module內(nèi)聲明,所有module的input 和output默認(rèn)都是wire型的。

Reg是寄存器的抽象表達(dá),作用類(lèi)似通常編程語(yǔ)言中的變量,可以?xún)?chǔ)存數(shù)值,作為參與表達(dá)式的運(yùn)算,通常負(fù)責(zé)時(shí)序邏輯,以串行方式執(zhí)行。

Reg可以保存輸出狀態(tài)。狀態(tài)改變通常在下一個(gè)時(shí)鐘信號(hào)邊沿翻轉(zhuǎn)時(shí)進(jìn)行。

賦值方式

Wire有兩種賦值方式

1.在定義變量時(shí)賦初值,方式是用=。如果之后沒(méi)有再做賦值,初值會(huì)一直保留,(是否可以給邏輯?)

wire wire_a = 1’b0;

2.用assign語(yǔ)句賦值,等式右邊可以是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。

對(duì)reg的使用通常需要有觸發(fā)條件,在always的block下進(jìn)行。觸發(fā)條件可以是時(shí)鐘信號(hào)上升沿。賦值語(yǔ)句可以是=或者

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型。這里可以把對(duì)input的賦值看作一個(gè)assign語(yǔ)句,使用的變量相當(dāng)于等號(hào)右邊的變量,所以?xún)烧叨伎梢浴?/p>

而對(duì)于輸出端口,必須使用reg型,而不能是wire型。同樣用assign的角度考慮,module的輸出在等號(hào)右邊,而使用的變量成了等號(hào)左邊,assign語(yǔ)句等號(hào)左邊只能是wire型。

位寬

這是個(gè)使用注意事項(xiàng)。所有的wire和reg在聲明時(shí)如果不做特殊聲明,只有1位。這個(gè)對(duì)于熟悉其他編程語(yǔ)言的人是一個(gè)容易犯錯(cuò)的地方。

執(zhí)行

wire wire_a = 4’he;

語(yǔ)句最后得到的wire_a是0x1,而不是0xe。因?yàn)閣ire_a只取了0xe的最低位的值而省略掉了其他值。所以正確的語(yǔ)句應(yīng)該是

wire[3:0] wire_a = 4’he;

這樣wire_a輸出的結(jié)果才是一個(gè)0xe。

小結(jié)

這篇文章從功能,變量狀態(tài),賦值方式,使用方式等角度討論了wire和reg變量類(lèi)型的區(qū)別。并且給出了一個(gè)在verilog中常見(jiàn)的使用錯(cuò)誤及解決方法。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119212
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1333

    瀏覽量

    109721
  • 編程語(yǔ)言
    +關(guān)注

    關(guān)注

    10

    文章

    1916

    瀏覽量

    34381
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    VHDL與verilogif判斷條件的一點(diǎn)小區(qū)別

    ,如果是boolean類(lèi)型就能if(not a)了。verilog:if內(nèi)容不論是什么類(lèi)型,比如reg 或者wire ,都可以寫(xiě)成if(!a
    發(fā)表于 04-09 09:24

    wirereg 區(qū)別

    assign賦值b. 定義為reg, 只在always @(a b c d) block賦值在verilog語(yǔ)言中的reg 類(lèi)型只是語(yǔ)法意
    發(fā)表于 02-20 10:51

    verilog inout的 用法

    端口使用.link_data可以通過(guò)相關(guān)電路來(lái)控制.2 編寫(xiě)測(cè)試模塊時(shí),對(duì)于inout類(lèi)型的端口,需要定義成wire類(lèi)型變量,而其它輸入端口都定義成
    發(fā)表于 01-24 12:27

    【小白求問(wèn)】verilogreg類(lèi)型變量可以和integer類(lèi)型變量相乘嗎?

    RT,已知integer變量為正數(shù),那么和兩個(gè)reg變量相乘有區(qū)別嗎?謝謝!
    發(fā)表于 11-29 12:34

    關(guān)于verilog 語(yǔ)句中變量類(lèi)型的確定,例:請(qǐng)指出下面幾條語(yǔ)句中變量類(lèi)型:8.1) assign A=B; 8.2) always #1 Count=C+1;

    regwire類(lèi)型區(qū)別和用法,還有regwire
    發(fā)表于 01-06 17:20

    FPGA小技巧,在設(shè)計(jì)文件,如何確定信號(hào)是reg型還是wire型?

    在設(shè)計(jì)文件,如何確定信號(hào)是reg型還是wire型?當(dāng)我們使用Verilog時(shí),對(duì)于信號(hào)定義為reg型還是
    發(fā)表于 10-21 10:47

    【技巧分享】在設(shè)計(jì)文件,如何確定信號(hào)是reg型還是wire型?

    當(dāng)我們使用Verilog時(shí),對(duì)于信號(hào)定義為reg型還是wire型比較混亂,那么今天我們就來(lái)講一講如何快速的進(jìn)行信號(hào)定義。在Verilog
    發(fā)表于 03-01 23:58

    基本Verilog變量有線網(wǎng)類(lèi)型和寄存器類(lèi)型

    邏輯,應(yīng)在敏感信號(hào)表列出所有的輸入信號(hào);7、所有的內(nèi)部寄存器都應(yīng)該可以被復(fù)位;8、用戶(hù)自定義原件(UDP元件)是不能被綜合的。一:基本Verilog變量有線網(wǎng)
    發(fā)表于 07-29 06:10

    Verilog 變量位的數(shù)值類(lèi)型

    Verilog 變量位的數(shù)值類(lèi)型Verilog變量
    發(fā)表于 08-04 09:42

    Verilog 變量聲明與數(shù)據(jù)類(lèi)型

    Verilog 變量聲明與數(shù)據(jù)類(lèi)型二上節(jié)介紹了wirereg數(shù)據(jù)類(lèi)型及其用法,并對(duì)
    發(fā)表于 08-06 09:21

    Verilog 變量聲明與數(shù)據(jù)類(lèi)型

    Verilog 變量聲明與數(shù)據(jù)類(lèi)型Verilog語(yǔ)法中最基本的數(shù)據(jù)類(lèi)型有 線網(wǎng)(wire),寄
    發(fā)表于 08-10 14:01

    FPGA的視頻教程之Verilogregwire的不同點(diǎn)詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA的視頻教程之Verilogregwire的不同點(diǎn)詳細(xì)資料說(shuō)明。
    發(fā)表于 03-26 16:55 ?5次下載
    FPGA的視頻教程之<b class='flag-5'>Verilog</b><b class='flag-5'>中</b><b class='flag-5'>reg</b>和<b class='flag-5'>wire</b>的不同點(diǎn)詳細(xì)資料說(shuō)明

    比較VerilogWireReg的不同之處

    wireregVerilog程序里的常見(jiàn)的兩種變量類(lèi)型,他們都是構(gòu)成verilog程序邏輯
    的頭像 發(fā)表于 03-08 17:18 ?1.2w次閱讀

    不同情況下,在Verilog什么時(shí)候用wire,什么時(shí)候用reg

    Verilog何時(shí)用wire,何時(shí)用reg? Verilog HDL
    的頭像 發(fā)表于 09-28 11:26 ?1.3w次閱讀
    不同情況下,在<b class='flag-5'>Verilog</b><b class='flag-5'>中</b>什么時(shí)候用<b class='flag-5'>wire</b>,什么時(shí)候用<b class='flag-5'>reg</b>

    regwire區(qū)別

    1,regwire區(qū)別: 相同點(diǎn): 都能表示一種類(lèi)型類(lèi)型。 不同點(diǎn): wire 連線型數(shù)據(jù),
    的頭像 發(fā)表于 07-03 10:00 ?1.3w次閱讀