<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Verilog數據類(lèi)型

Verilog數據類(lèi)型

作者: 時(shí)間:2017-06-06 來(lái)源:網(wǎng)絡(luò ) 收藏

HDL 有兩大類(lèi)。
1) 線(xiàn)網(wǎng)類(lèi)型。 net type 表示 結構化元件間的物理連線(xiàn)。它的值由驅動(dòng)元件的值決定,例如連續賦值或門(mén)的輸出。如果沒(méi)有驅動(dòng)元件連接到線(xiàn)網(wǎng),線(xiàn)網(wǎng)的缺省值為 z 。
2) 寄存器類(lèi)型。 register type 表示一個(gè)抽象的數據存儲單元,它只能在 always 語(yǔ)句和 initial 語(yǔ)句中被賦值,并且它的值從一個(gè)賦值到另一個(gè)賦值被保存下來(lái)。寄存器類(lèi)型的變量具有 x 的缺省值。

線(xiàn)網(wǎng)類(lèi)型

   線(xiàn)網(wǎng)包含下述不同種類(lèi)的線(xiàn)網(wǎng)子類(lèi)型。

* wire
* tri
* wor
* trior
* wand
* triand
* trireg
* tri1
* tri0
* supply0
* supply1

簡(jiǎn)單的線(xiàn)網(wǎng)類(lèi)型說(shuō)明語(yǔ)法為:

net_kind [msb:lsb] net1, net2, . . . , netN;

net_kind 是上述線(xiàn)網(wǎng)類(lèi)型的一種。 msb 和 lsb 是用于定義線(xiàn)網(wǎng)范圍的常量表達式;范圍定義是可選的;如果沒(méi)有定義范圍,缺省的線(xiàn)網(wǎng)類(lèi)型為 1 位。下面是線(xiàn)網(wǎng)類(lèi)型說(shuō)明實(shí)例。

wire Rdy, Start; //2 個(gè) 1 位的連線(xiàn)。
wand [2:0] Addr; //Addr 是 3 位線(xiàn)與。

當一個(gè)線(xiàn)網(wǎng)有多個(gè)驅動(dòng)器時(shí),即對一個(gè)線(xiàn)網(wǎng)有多個(gè)賦值時(shí),不同的線(xiàn)網(wǎng)產(chǎn)生不同的行為。例如,

wor Rde;
. . .
assign Rde = Blt Wyl;
. . .
assign Rde = Kbl | Kip;

本例中, Rde 有兩個(gè)驅動(dòng)源,分別來(lái)自于兩個(gè)連續賦值語(yǔ)句。由于它是線(xiàn)或線(xiàn)網(wǎng), Rde 的有效值由使用驅動(dòng)源的值(右邊表達式的值)的線(xiàn)或 (wor) 表(參見(jiàn)后面線(xiàn)或網(wǎng)的有關(guān)章節)決定。

1. wire 和 tri 線(xiàn)網(wǎng)
   用于連接單元的連線(xiàn)是最常見(jiàn)的線(xiàn)網(wǎng)類(lèi)型。連線(xiàn)與三態(tài)線(xiàn) (tri) 網(wǎng)語(yǔ)法和語(yǔ)義一致;三態(tài)線(xiàn)可以用于描述多個(gè)驅動(dòng)源驅動(dòng)同一根線(xiàn)的線(xiàn)網(wǎng)類(lèi)型;并且沒(méi)有其他特殊的意義。

wire Reset;
wire [3:2] Cla, Pla, Sla;
tri [ MSB - 1 : LSB +1] Art;
如果多個(gè)驅動(dòng)源驅動(dòng)一個(gè)連線(xiàn)(或三態(tài)線(xiàn)網(wǎng)),線(xiàn)網(wǎng)的有效值由下表決定。
wire ( 或 tri) 0 1 x z
0 0 x x 0
1 x 1 x 1
x x x x x
z 0 1 x z
下面是一個(gè)具體實(shí)例:

assign Cla = Pla Sla;
. . .
assign Cla = Pla ^ Sla;

在這個(gè)實(shí)例中, Cla 有兩個(gè)驅動(dòng)源。兩個(gè)驅動(dòng)源的值(右側表達式的值)用于在上表中索引,以便決定 Cla 的有效值。由于 Cla 是一個(gè)向量,每位的計算是相關(guān)的。例如,如果第一個(gè)右側表達式的值為 01x, 并且第二個(gè)右測表達式的值為 11z ,那么 Cla 的有效值是 x1x ( 第一位 0 和 1 在表中索引到 x, 第二位 1 和 1 在表中索引到 1 ,第三位 x 和 z 在表中索引到 x) 。

2. wor 和 trior 線(xiàn)網(wǎng)
   線(xiàn)或指如果某個(gè)驅動(dòng)源為 1 ,那么線(xiàn)網(wǎng)的值也為 1 。線(xiàn)或和三態(tài)線(xiàn)或 (trior) 在語(yǔ)法和功能上是一致的。

wor [MSB:LSB] Art;
trior [MAX - 1: MIN - 1] Rdx, Sdx, Bdx;
如果多個(gè)驅動(dòng)源驅動(dòng)這類(lèi)網(wǎng),網(wǎng)的有效值由下表決定。
wor ( 或 trior) 0 1 x z
0 0 1 x 0
1 1 1 1 1
x x 1 x x
z 0 1 x z

3. wand 和 triand 線(xiàn)網(wǎng)
   線(xiàn)與 (wand) 網(wǎng)指如果某個(gè)驅動(dòng)源為 0 ,那么線(xiàn)網(wǎng)的值為 0 。線(xiàn)與和三態(tài)線(xiàn)與 (triand) 網(wǎng)在語(yǔ)法和功能上是一致的。

wand [-7 : 0] Dbus;
triand Reset, Clk;
如果這類(lèi)線(xiàn)網(wǎng)存在多個(gè)驅動(dòng)源,線(xiàn)網(wǎng)的有效值由下表決定。
wand ( 或 triand) 0 1 x z
0 0 0 0 0
1 0 1 x 1
x 0 x x x
z 0 1 x z

4. trireg 線(xiàn)網(wǎng)
   此線(xiàn)網(wǎng)存儲數值(類(lèi)似于寄存器),并且用于電容節點(diǎn)的建模。當三態(tài)寄存器 (trireg) 的所有驅動(dòng)源都處于高阻態(tài),也就是說(shuō),值為 z 時(shí),三態(tài)寄存器線(xiàn)網(wǎng)保存作用在線(xiàn)網(wǎng)上的最后一個(gè)值。此外,三態(tài)寄存器線(xiàn)網(wǎng)的缺省初始值為 x 。

trireg [1:8] Dbus, Abus;

5. tri0 和 tri1 線(xiàn)網(wǎng)
   這類(lèi)線(xiàn)網(wǎng)可用于線(xiàn)邏輯的建模,即線(xiàn)網(wǎng)有多于一個(gè)驅動(dòng)源。 tri0 ( tri1 )線(xiàn)網(wǎng)的特征是,若無(wú)驅動(dòng)源驅動(dòng),它的值為 0 ( tri1 的值為 1 )。

tri0 [ - 3:3] GndBus;
tri1 [0: - 5] OtBus, ItBus;
下表顯示在多個(gè)驅動(dòng)源情況下 tri0 或 tri1 網(wǎng)的有效值。
tri0 (tri1) 0 1 x z
0 0 x x 0
1 x 1 x 1
x x x x x
z 0 1 x 0(1)

6. supply0 和 supply1 線(xiàn)網(wǎng)
supply0 用于對 “ 地 ” 建模,即低電平 0 ; supply1 網(wǎng)用于對電源建模,即高電平 1 ;例如 :

supply0 Gnd, ClkGnd;
supply1 [2:0] Vcc;

未說(shuō)明的線(xiàn)網(wǎng)

   在 HDL 中,有可能不必聲明某種線(xiàn)網(wǎng)類(lèi)型。在這樣的情況下,缺省線(xiàn)網(wǎng)類(lèi)型為 1 位線(xiàn)網(wǎng)。
可以使用 `default_nettype 編譯器指令改變這一隱式線(xiàn)網(wǎng)說(shuō)明方式。使用方法如下:

`default_nettype net_kind

例如,帶有下列編譯器指令:

`default_nettype wand

任何未被說(shuō)明的網(wǎng)缺省為 1 位線(xiàn)與網(wǎng)。


向量和標量線(xiàn)網(wǎng)

   在定義向量線(xiàn)網(wǎng)時(shí)可選用關(guān)鍵詞 scalared 或 vectored 。如果一個(gè)線(xiàn)網(wǎng)定義時(shí)使用了關(guān)鍵詞 vectored, 那么就不允許位選擇和部分選擇該線(xiàn)網(wǎng)。換句話(huà)說(shuō),必須對線(xiàn)網(wǎng)整體賦值(位選擇和部分選擇在下一章中講解)。例如 :

wire vectored [3:1] Grb;
// 不允許位選擇 Grb[2] 和部分選擇 Grb [3:2]
wor scalared [4:0] Best;
// 與 wor [4:0] Best 相同,允許位選擇 Best [2] 和部分選擇 Best [3:1] 。
如果沒(méi)有定義關(guān)鍵詞,缺省值為標量。

寄存器類(lèi)型

   有 5 種不同的寄存器類(lèi)型。

* reg
* integer
* time
* real
* realtime

1. reg 寄存器類(lèi)型
   寄存器 reg 是最常見(jiàn)的數據類(lèi)型。 reg 類(lèi)型使用保留字 reg 加以說(shuō)明,形式如下:

reg [ msb: lsb] reg1, reg2, . . . regN;
msb 和 lsb 定義了范圍,并且均為常數值表達式。范圍定義是可選的;如果沒(méi)有定義范圍,缺省值為 1 位寄存器。例如:
reg [3:0] Sat; //Sat 為 4 位寄存器。
reg Cnt; //1 位寄存器。
reg [1:32] Kisp, Pisp, Lisp;
寄存器可以取任意長(cháng)度。寄存器中的值通常被解釋為無(wú)符號數 , 例如:
reg [1:4] Comb;
. . .
Comb = - 2; //Comb 的值為 14 ( 1110 ), 1110 是 2 的補碼。
Comb = 5; //Comb 的值為 15 ( 0101 )。

本文引用地址:http://dyxdggzs.com/article/201706/349520.htm


2. 存儲器
   存儲器是一個(gè)寄存器數組。存儲器使用如下方式說(shuō)明:

reg [ msb: 1sb] memory1 [ upper1: lower1],
memory2 [upper2: lower2],. . . ;
例如:
reg [0:3 ] MyMem [0:63]
//MyMem 為 64 個(gè) 4 位寄存器的數組。
reg Bog [1:5]
//Bog 為 5 個(gè) 1 位寄存器的數組。
MyMem 和 Bog 都是存儲器。數組的維數不能大于 2 。注意存儲器屬于寄存器數組類(lèi)型。線(xiàn)網(wǎng)數據類(lèi)型沒(méi)有相應的存儲器類(lèi)型。
   單個(gè)寄存器說(shuō)明既能夠用于說(shuō)明寄存器類(lèi)型,也可以用于說(shuō)明存儲器類(lèi)型。

parameter ADDR_SIZE = 16 , WORD_SIZE = 8;
reg [1: WORD_SIZE] RamPar [ ADDR_SIZE - 1 : 0], DataReg;

RamPar 是存儲器,是 16 個(gè) 8 位寄存器數組,而 DataReg 是 8 位寄存器。
   在賦值語(yǔ)句中需要注意如下區別:存儲器賦值不能在一條賦值語(yǔ)句中完成,但是寄存器可以。因此在存儲器被賦值時(shí),需要定義一個(gè)索引。下例說(shuō)明它們之間的不同。

reg [1:5] Dig; //Dig 為 5 位寄存器。
. . .
Dig = 5'b11011;

   上述賦值都是正確的 , 但下述賦值不正確:

reg BOg[1:5]; //Bog 為 5 個(gè) 1 位寄存器的存儲器。
. . .
Bog = 5'b11011;

   有一種存儲器賦值的方法是分別對存儲器中的每個(gè)字賦值。例如:

reg [0:3] Xrom [1:4]
. . .
Xrom[1] = 4'hA;
Xrom[2] = 4'h8;
Xrom[3] = 4'hF;
Xrom[4] = 4'h2;

   為存儲器賦值的另一種方法是使用系統任務(wù):
1) $readmemb (加載二進(jìn)制值)
2) $readmemb (加載十六進(jìn)制值)
   這些系統任務(wù)從指定的文本文件中讀取數據并加載到存儲器。文本文件必須包含相應的二進(jìn)制或者十六進(jìn)制數。例如:

reg [1:4] RomB [7:1] ;
$ readmemb (ram.patt, RomB);

Romb 是存儲器。文件 “ram.patt” 必須包含二進(jìn)制值。文件也可以包含空白空間和注釋。下面是文件中可能內容的實(shí)例。

1101
1110
1000
0111
0000
1001
0011

   系統任務(wù) $readmemb 促使從索引 7 即 Romb 最左邊的字索引,開(kāi)始讀取值。如果只加載存儲器的一部分,值域可以在 $readmemb 方法中顯式定義。例如:

$readmemb (ram.patt, RomB, 5, 3);

在這種情況下只有 Romb[5],Romb[4] 和 Romb[3] 這些字從文件頭開(kāi)始被讀取。被讀取的值為 1101 、 1100 和 1000 。
文件可以包含顯式的地址形式。

@hex_address value
如下實(shí)例:
@5 11001
@2 11010

在這種情況下,值被讀入存儲器指定的地址。
   當只定義開(kāi)始值時(shí),連續讀取直至到達存儲器右端索引邊界。例如:

$readmemb (rom.patt, RomB, 6);
// 從地址 6 開(kāi)始,并且持續到 1 。
$readmemb ( rom.patt, RomB, 6, 4);
// 從地址 6 讀到地址 4 。

3. Integer 寄存器類(lèi)型
   整數寄存器包含整數值。整數寄存器可以作為普通寄存器使用,典型應用為高層次行為建模。使用整數型說(shuō)明形式如下:

integer integer1, integer2,. . . intergerN [msb:1sb] ;

msb 和 lsb 是定義整數數組界限的常量表達式,數組界限的定義是可選的。注意容許無(wú)位界限的情況。一個(gè)整數最少容納 32 位。但是具體實(shí)現可提供更多的位。下面是整數說(shuō)明的實(shí)例。

integer A, B, C; // 三個(gè)整數型寄存器。
integer Hist [3:6]; // 一組四個(gè)寄存器。

一個(gè)整數型寄存器可存儲有符號數,并且算術(shù)操作符提供 2 的補碼運算結果。
整數不能作為位向量訪(fǎng)問(wèn)。例如,對于上面的整數 B 的說(shuō)明, B[6] 和 B[20:10] 是非法的。一種截取位值的方法是將整數賦值給一般的 reg 類(lèi)型變量,然后從中選取相應的位,如下所示:

reg [31:0] Breg;
integer Bint;
. . .
//Bint[6] 和 Bint[20:10] 是不允許的。
. . .
Breg = Bint;
/* 現在, Breg[6] 和 Breg[20:10] 是允許的,并且從整數 Bint 獲取相應的位值。 */

上例說(shuō)明了如何通過(guò)簡(jiǎn)單的賦值將整數轉換為位向量。類(lèi)型轉換自動(dòng)完成,不必使用特定的函數。從位向量到整數的轉換也可以通過(guò)賦值完成。例如 :

integer J;
reg [3:0] Bcq;

J = 6; //J 的值為 32'b0000...00110 。
Bcq = J; // Bcq 的值為 4'b0110 。

Bcq = 4'b0101.
J = Bcq; //J 的值為 32'b0000...00101 。

J = - 6; //J 的值為 32'b1111...11010 。
Bcq = J; //Bcq 的值為 4'b1010 。

注意賦值總是從最右端的位向最左邊的位進(jìn)行;任何多余的位被截斷。如果你能夠回憶起整數是作為 2 的補碼位向量表示的,就很容易理解類(lèi)型轉換。

4. time 類(lèi)型
time 類(lèi)型的寄存器用于存儲和處理時(shí)間。 time 類(lèi)型的寄存器使用下述方式加以說(shuō)明。

time time_id1, time_id2, . . . ,time_idN [ msb:1sb];

msb 和 lsb 是表明范圍界限的常量表達式。如果未定義界限,每個(gè)標識符存儲一個(gè)至少 64 位的時(shí)間值。時(shí)間類(lèi)型的寄存器只存儲無(wú)符號數。例如 :

time Events [0:31]; // 時(shí)間值數組。
time CurrTime; //CurrTime 存儲一個(gè)時(shí)間值。

5. real 和 realtime 類(lèi)型
   實(shí)數寄存器(或實(shí)數時(shí)間寄存器)使用如下方式說(shuō)明:

// 實(shí)數說(shuō)明:
real real_reg1, real_reg2, . . ., real_regN;
// 實(shí)數時(shí)間說(shuō)明:
realtime realtime_reg1, realtime_reg2, . . . ,realtime_regN;
realtime 與 real 類(lèi)型完全相同。例如 :
real Swing, Top;
realtime CurrTime;
real 說(shuō)明的變量的缺省值為 0 。不允許對 real 聲明值域、位界限或字節界限。

   當將值 x 和 z 賦予 real 類(lèi)型寄存器時(shí),這些值作 0 處理。

real RamCnt;
. . .
RamCnt = 'b01x1Z;
RamCnt 在賦值后的值為 'b01010 。

3.8 參數
   參數是一個(gè)常量。參數經(jīng)常用于定義時(shí)延和變量的寬度。使用參數說(shuō)明的參數只被賦值一次。參數說(shuō)明形式如下:

parameter param1 = const_expr1, param2 = const_expr2, . . . ,
paramN = const_exprN;

下面為具體實(shí)例:

parameter LINELENGTH = 132, ALL_X_S = 16'bx;
parameter BIT = 1, BYTE = 8, PI = 3.14;
parameter STROBE_DELAY = ( BYTE + BIT) / 2;
parameter TQ_FILE = /home/bhasker/TEST/add.tq;

參數值也可以在編譯時(shí)被改變。改變參數值可以使用參數定義語(yǔ)句或通過(guò)在模塊初始化語(yǔ)句中定義參數值.



關(guān)鍵詞: Verilog 數據類(lèi)型

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>