Verilog中定義訊號為什麼要區分wire和reg

2021-05-26 00:19:58 字數 3331 閱讀 1450

1樓:匿名使用者

兩者差別很大,抄完全襲

不能取消。

在verilog中,wire永遠是wire,就是相當於一條連線,用來連線電路,不能儲存資料,無驅動能力,是組合邏輯,只能在assign左側賦值,不能在always @ 中賦值;

但reg可以綜合成register,latch,甚至wire(當其只是中間變數的時候),可以用於組合邏輯或者時序邏輯,能儲存資料,有驅動能力,在always @模組表示式左側被賦值。

兩個共同具有性質:都能用於assign與always @模組表示式的右側。

verilog 中定義訊號為什麼要區分 wire 和 reg 兩種型別

2樓:

簡單來說硬體描述語言有兩種用途:1、**,2、綜合。

對於wire和reg,也要從這兩個角度來考慮。

從**的角度來說,hdl語言面對的是編譯器(如modelsim等),相當於軟體思路。

這時:wire對應於連續賦值,如assign

reg對應於過程賦值,如always,initial

從綜合的角度來說,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?

有幾種情況變數需要定義成wire。

第一。assign 語句

例如:reg a,b;

wire and_result;

...assign and_result =a&&b;

你可以試試把wire定義成reg。綜合器會報錯。

第二。元件例化時候的輸出必須用wire

例如:wire dout;

ram u_ram

(...

.out(dout)

...);

wire按照國外的教材上面的定義:

wire為無邏輯連線。只做連線,wire本身是不帶邏輯性的,所以輸入什麼輸出就是什麼。所以你嘗試著用always語句對wire變數賦值。綜合器就會報錯。

那麼你可能會問。assign c =a&&b不是就是對wire的賦值嗎?

其實並非如此。綜合器綜合時將a&&b綜合成ab經過一個與門。而c只是連線到與門輸出的線。正真綜合出與門的是&&。而不是c。

abstract

verilog初學者最常見的問題:『什麼時候該用wire?什麼時候又該用reg?』

introduction

大體上來說,wire和reg都類似於c/c++的變數,但若此變數要放在begin...end內,該變數就須使用reg,在begin...end之外,則使用wire。

另外使用wire時,須搭配assign;reg則不必。

input,ouput,inout預設值都是wire。

若wire和reg用錯地方,compiler都會提醒,所以不必太擔心。

一個很重要的觀念,在verilog中使用reg,並不表示合成後就是暫存器(register)。若在組合電路中使用reg,合成後仍只是net,唯有在循序電路中使用reg,合成後才會以flip-flop形式表示成register。

3樓:戰**

wire:線性訊號變數 reg為暫存器變數 input a,b,cin; 可推出 cin(wire) output sum,cout; 可推出 cout(wire/reg) module fadd(a,b,cin,sum,cout);呼叫如下: c1->a,c2->b,c3->cin,c4->sum,c5->count fadd m(c1,c2,c3,c4,c5); 可推出:

c3為input c5 為output c3(wire) c5(wire) 又因為 為內部呼叫 所以c3可以為:reg變數 綜上: cin(wire) cout(wire/reg) c3(wire/reg) c5(wire) 也請其他高人指點下

verilog 中定義訊號為什麼要區分 wire 和 reg 兩種型別

4樓:誒侖佬呈

首先要先清楚一點,verilog是硬體描述語言,其最終是為了生成一個電路,所以內它的變數型別是根據實際容電路來決定的。

從名字理解:

wire,線型,實際上在電路中的作用就是一根連線;

reg,暫存器型,在電路中就作為暫存器存在。

連線和暫存器是構成數位電路的基本結構,這也是verilog這兩種變數型別的**。

當然,在verilog的升級版system verilog中提供了更多的,更一些抽象化的變數型別

verilog 中定義訊號為什麼要區分 wire 和 reg 兩種型別

5樓:何處安鑫

這是一個歷史遺留問題。在 verilog 被 cadence 買下之前(大約上e68a8462616964757a686964616f31333361313966世紀**十年代的樣子),verilog 只是一個用來做**的 hdl,不可綜合。在那個年代,**器看到 wire 和 reg 會區別處理(實際上至今也是這樣)。

不知道你有沒有發現,reg 型別訊號的跳變,是依靠輸入和敏感列表的,而且在非阻塞賦值中也存在一種並行的概念(同樣條件下 b <= a、c <= b 的時候,a 的值不會直接到 c 去)。而 wire 只需要輸入就足夠了。這樣區分兩種型別也是為了更好地模擬真實硬體中時序邏輯和組合邏輯的行為。

**器對 wire 型別會在每個 delta time 都進行計算並賦值,而 reg 型別只有在滿足敏感列表條件時才會計算。

而如今隨著 sv 的推出 verilog 都已經到 2005 了,但當初的這一習慣繼承了下來。雖然 reg 不一定綜合出來 register,但這屬於綜合工具對**描述的硬體行為的一種解讀。always @ (*) 當中這個敏感列表依然存在,**器依然會依照敏感列表的指示去幹活,不論你的敏感列表是不是*。

反過來看 wire,雖然 rtl **中這個 wire 訊號可能就是綜合後網表中某個暫存器的 q 端,但是在行為級描述中你對這根 wire 重新命名也確實是在描述一種硬體行為。

數位電路時序圖中,地址訊號和資料訊號為什麼是兩根線圍成的六邊形,其他為什麼是一根線

不用太在意的。就拿地址來說,t1到t4這個週期內傳遞地址,有可能有可能4個週期,但是四個週期的時間是充足的。大學理工類都有什麼專業 10 理工類專業 數學與應用數學 資訊與計算科學 物理學 應用化學 生物技術 地質學 大氣科學類 理論與應用力學 電子資訊科學與技術 環境科學 採礦工程 石油工程 冶金...

在隨機訊號分析中為什麼要定義功率譜密度

頻譜密度 一個bai 適當的係數 每單位頻率du攜帶的功 zhi率,這被稱作是功 dao率譜密度,簡稱psd 這個在不內嚴格意義上容來講,可以看作是能量的一種表述,巨集觀上來說,能量分析起來是比較穩定的,波的疊加過程中可能振幅會衰減或遞增,加速度可能會疊加,但是能量反映的是最原始作用在物體上的表徵,...

電腦開機後為什麼螢幕顯示無訊號 為什麼鍵盤燈也沒亮

這種情況一般是主機板沒有正常工作,當然鍵盤和顯示卡都沒有工作,於是鍵盤燈也不亮,顯示器也沒有訊號 檢查主機板與主機板上所有板卡的接觸,與記憶體的接觸,如果插拔清潔後均無法正常啟動,可能主機板損壞,需要更換了。從這些症狀來看,你的主機是沒有正常啟動起來的,關機檢查一下主機,看看記憶體是不是接觸不良。我...