日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

verilog中wire和reg的区别,什么时候用wire?什么时候用reg?

發布時間:2024/10/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 verilog中wire和reg的区别,什么时候用wire?什么时候用reg? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

相信很多和我一樣剛開始接觸verilog語言的小白都會有這樣的困惑,wire型變量和reg型變量到底有什么區別?什么情況下使用wire定義變量、什么情況下使用reg定義變量?下面就詳細分析兩者在使用中的區別。

1.wire和reg的本質是什么

wire的本質是一條沒有邏輯的連線,也就是說輸入時什么輸出也就是什么。wire型數據常用來表示以assign關鍵字指定的組合邏輯信號,模塊的輸入輸出端口類型都默認為wire型,wire相當于物理連線,默認初始值是z(高組態)。
如果你把wire定義的變量用在有邏輯性的語句中就會出現綜合錯誤:
例如:
在always語句中使用wire型定義的變量賦值,綜合器就會報錯。

reg型表示的寄存器類型,用于always模塊內被賦值的信號,必須定義為reg型,代表觸發器,常用于時序邏輯電路,reg相當于存儲單元,默認初始值是x(未知狀態)。reg型相對復雜些,其綜合后的輸出主要還看具體使用的場景:當在組合電路中使用reg,合成后的仍然是net網絡;當在時序電路中使用reg合成后的才是register。

2.wire和reg在硬件描述語言中的釋義

關于wire和reg在硬件描述語言中的釋義一般需要分為以下兩個部分來分析:
從電路綜合角度來說
(1)wire型變量綜合出來是一根導線
(2)reg型在always語句模塊中又分為兩種情況
(a) always后的敏感表中是(a or b or c)形式的,也就是不帶時鐘邊沿的,綜合出來還是組合邏輯
(b) always后的敏感表中是(posedge clk)形式的,也就是帶邊沿的,綜合出來一般是時序邏輯,會包含觸發器(Flip-Flop)

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

從仿真分析角度來說
wire對應于連續賦值,如assign
reg對應于過程賦值,如always,initial

3.什么情況下使用wire型變量

(1)assign 語句中變量需要定義成wire型,使用wire必須搭配assign
例如:
reg a,b;
wire result;

assign result =a&&b;
你可以試試把wire定義成reg,綜合器會報錯。

(2)元件例化時候的輸出必須用wire
例如:
wire dout;

ram u_ram
(

.out(dout)

);

(3)input、output和inout的預設值都是wire

4.什么情況下使用reg型變量

(1)變量放在begin……end之內必須使用reg變量
(2)在initial語句中使用

總結

以上是生活随笔為你收集整理的verilog中wire和reg的区别,什么时候用wire?什么时候用reg?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。