第4節(jié) 信號(hào)類(lèi)型
Verilog HDL 的信號(hào)類(lèi)型有很多種,主要包括兩種數(shù)據(jù)類(lèi)型:線(xiàn)網(wǎng)類(lèi)型(net type) 和寄存器類(lèi)型( reg type)。在進(jìn)行工程設(shè)計(jì)的過(guò)程中也只會(huì)使用到這兩個(gè)類(lèi)型的信號(hào)。
4.1 信號(hào)位寬
定義信號(hào)類(lèi)型的同時(shí),必須定義好信號(hào)的位寬。默認(rèn)信號(hào)的位寬是 1 位,當(dāng)信號(hào)的位寬為 1 時(shí)可不表述,如定義位寬為 1 的 wire 型信號(hào) a 可直接用“ wire a;”來(lái)表示。 但信號(hào)的位寬大于 1 位時(shí)就一定要表示出來(lái),如用“ wire [7:0]”來(lái)表示該 wire 型信號(hào)的位寬為 8 位(位寬數(shù)從0開(kāi)始計(jì))。
信號(hào)的位寬取決于要該信號(hào)要表示的最大值。該信號(hào)能表示的無(wú)符號(hào)數(shù)最大值是: 2n-1,其中n表示該信號(hào)的位寬。例如,信號(hào) a 的最大值為 1000,那么信號(hào) a 的位寬必須大于或等于 10 位。
下面分享一個(gè)位寬計(jì)算技巧:打開(kāi)電腦的“計(jì)算器” 后選用程序員模式,在在 10 進(jìn)制下輸入信號(hào)值,如 1000,隨后可以查看信號(hào)位寬。
4.2 線(xiàn)網(wǎng)類(lèi)型 wire
線(xiàn)網(wǎng)類(lèi)型用于對(duì)結(jié)構(gòu)化器件之間的物理連線(xiàn)的建模, 如器件的管腳,芯片內(nèi)部器件如與門(mén)的輸出等。由于線(xiàn)網(wǎng)類(lèi)型代表的是物理連接線(xiàn),因此其不存儲(chǔ)邏輯值,必須由器件驅(qū)動(dòng)。通常用 assign 進(jìn)行賦值, 如 assign A = B ^ C。
wire 類(lèi)型定義語(yǔ)法如下:
wire [msb: lsb] wire1, wire2, . . .,wireN;
msb 和 lsb 定義了范圍,表示了位寬。例如[7:0]是 8 位位寬,也就是可以表示成 8’b0 至 8’b1111_1111;
msb 和 lsb 必須為常數(shù)值;
如果沒(méi)有定義范圍,缺省值為 1 位;
沒(méi)有定義信號(hào)數(shù)據(jù)類(lèi)型時(shí),缺省為 wire 類(lèi)型。
注意數(shù)組類(lèi)型按照降序方式,如[7: 0] , 不要寫(xiě)成[0:7]。
下面對(duì)上述情況進(jìn)行舉例說(shuō)明:
wire [3:0] Sat; // Sat 為 4 位線(xiàn)型信號(hào)
wire Cnt; //1 位線(xiàn)型信號(hào)
wire [31:0] Kisp, Pisp, Lisp ;// Kisp, Pisp, Lisp 都是 32 位的線(xiàn)型信號(hào)。
4.3 寄存器類(lèi)型 reg
reg 是最常用的寄存器類(lèi)型,寄存器類(lèi)型通常用于對(duì)存儲(chǔ)單元的描述,如 D 型觸發(fā)器、 ROM等。寄存器類(lèi)型信號(hào)的特點(diǎn)是在某種觸發(fā)機(jī)制下分配了一個(gè)值,在下一觸發(fā)機(jī)制到來(lái)之前保留原值。但必須注意的是: reg 類(lèi)型的變量不一定是存儲(chǔ)單元,如在 always 語(yǔ)句中進(jìn)行描述的必須是用 reg類(lèi)型的變量。
reg 類(lèi)型定義語(yǔ)法如下:
reg [msb: lsb] reg1, reg2, . . . reg N;
msb 和 lsb 定義了范圍,表示了位寬。例如[7:0]是 8 位位寬,也就是可以表示成 8’b0 至 8’b1111_1111;
msb 和 lsb 必須為常數(shù)值;
如果沒(méi)有定義范圍,缺省值為 1 位;
沒(méi)有定義信號(hào)數(shù)據(jù)類(lèi)型時(shí),缺省為 wire 類(lèi)型,不是 reg 型。
對(duì)數(shù)組類(lèi)型按照降序方式,如[7: 0] ;不要寫(xiě)成[0:7]。
例如:
reg [3:0] Sat; // Sat 為 4 位寄存器型信號(hào)。
reg Cnt; //1 位寄存器。
reg [31:0] Kisp, Pisp, Lisp ; // Kisp, Pisp, Lisp 都是 32 位的寄存器型信號(hào)。
4.4 wire 和 reg 的區(qū)別
reg 型信號(hào)并不一定生成寄存器。 針對(duì)什么時(shí)候使用 wire 類(lèi)型,什么時(shí)候用 reg 類(lèi)型這一問(wèn)題,本書(shū)總結(jié)出一套解決方法:在 本模塊中使用 always 設(shè)計(jì)的信號(hào)都定義為 reg 型, 其他信號(hào)都定義為 wire 型 。
上述代碼中, cnt1 是用 always 設(shè)計(jì)的,所以定義為 reg 型。 add_cnt1 和 end_cnt 不是由 always 產(chǎn)生的,所以定義為 wire 型。
上述代碼中,信號(hào) x 是用 always 設(shè)計(jì)的,所以要定義為 reg 型。注意: 實(shí)際的電路中信號(hào) x 不是寄存器類(lèi)型,但仍然定義為 reg 型。
以上是例化的代碼,其中 df 是例化模塊的輸出。由于 df 不是由 always 產(chǎn)生的,而是例化產(chǎn)生的, 因此要定義成 wire 型。
————————————————
版權(quán)聲明:本文為CSDN博主「原來(lái)如此呀」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Royalic/article/details/121151985
-
寄存器
+關(guān)注
關(guān)注
31文章
5357瀏覽量
120655 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7081瀏覽量
89178 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110156
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論