verilog語言中,reg型與wire型的區別

2021-08-28 03:42:49 字數 1123 閱讀 7459

對於初學者來說,首先乙個大問題就是在讀程式時候,變數型別reg型wire型的區分。

最近做了點**工作,對兩種型別的變數有一些自己的見解,寫一寫,交流學習。

自己的理解:

wire型相當於是一根連線

reg型相當於是儲存器

在wire型相當於連線的基礎上我們很容易就可以理解,當連線的**端發生改變時,wire變數立即隨之發生改變。

由此:wire型變數存在於begin...end語句之外。只能用assign語句進行賦值。(assign語句和時鐘無關,只要等號右側變數改變,左側變數就會隨之發生改變)

reg型相當於儲存器的基礎上,可以看做是乙個乙個的暫存器,當觸發條件達成時,暫存器的內容才發生改變,否則一直保持上乙個狀態。

由此:reg型變數存在於begin...end語句之中。一般在always,initial語句中。

如果變數型別使用錯誤或者位置錯誤,vivado會提示錯誤,所以也不用擔心。

接下來是我在**中遇到的一點總結:

模組的輸入埠可以由wire/reg型驅動,但是輸入埠只能是wire型。

模組的輸出埠只能驅動wire型,輸出埠可以是wire/reg型。

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

手機打字,就不貼圖了。大家可以自己嘗試一下。

另,通過看相關的帖子,還有在綜合上的考慮。

從綜合的角度來說,hdl語言面對的是綜合器(如dc等),要從電路的角度來考慮。

這時:1、wire型的變數綜合出來一般是一根導線;

2、reg變數在always塊中有兩種情況:

(1)、always後的敏感表中是(a or b or c)形式的,也就是不帶時鐘邊沿的,綜合出來還是組合邏輯

(2)、always後的敏感表中是(posedge clk)形式的,也就是帶邊沿的,綜合出來一般是時序邏輯,會包含觸發器(flip-flop)

verilog語言中 與 的區別

邏輯相等 邏輯全等 1 邏輯相等 兩個運算元逐位比較,如果兩個進行比較的位是不定態 x 或者高阻態 z 則輸出x displayb 4 b0011 4 b1010 0 displayb 4 b0011 4 b1x10 1 displayb 4 b1010 4 b1x10 x displayb 4 b...

Verilog中reg型變數的綜合效果(待補充)

在verilog中最常用的兩種資料型別是wire和reg,一般來說,wire型指定的資料和網線通過組合邏輯實現,而reg型指定的資料不一定用暫存器實現。也就是說reg型資料不一定綜合成暫存器。下面的例子中將輸出訊號dout定義為reg型,但是綜合與實現結果卻沒有使用ff,該電路是乙個純組合邏輯設計。...

20100601 C語言中的字元型與整型

在vc下,sizeof int 4,sizeof char 1的,在宣告變數時,是按在記憶體中從高位址分配,遞減變數所佔的位元組數,輸出的位址為其起始位址,既遞減所得位址。陣列從下標高的在記憶體中位址也是高的,char型理應站1個位元組,可是不知道怎麼的,系統分配的卻是4個位元組。檢視變數記憶體位址...