verilog REG 寄存器、向量、整数、实数、时间寄存器
寄存器(reg)
寄存器(reg)用來(lái)表示存儲(chǔ)單元,它會(huì)保持?jǐn)?shù)據(jù)原有的值,直到被改寫。聲明舉例如下:
實(shí)例
reg?? ?clk_temp;
reg????flag1,?flag2?;
例如在 always 塊中,寄存器可能被綜合成邊沿觸發(fā)器,在組合邏輯中可能被綜合成 wire 型變量。寄存器不需要驅(qū)動(dòng)源,也不一定需要時(shí)鐘信號(hào)。在仿真時(shí),寄存器的值可在任意時(shí)刻通過(guò)賦值操作進(jìn)行改寫。例如:
實(shí)例
reg?rstn?;
initial?begin
? ? rstn?=?1'b0?;
? ??#100?;
? ? rstn?=?1'b1?;
end
向量
當(dāng)位寬大于 1 時(shí),wire 或 reg 即可聲明為向量的形式。例如:
實(shí)例
reg?[3:0]?? ? ?counter?;????//聲明4bit位寬的寄存器counter
wire?[32-1:0]??gpio_data;???//聲明32bit位寬的線型變量gpio_data
wire?[8:2]?????addr?;???????//聲明7bit位寬的線型變量addr,位寬范圍為8:2
reg?[0:31]?????data?;???????//聲明32bit位寬的寄存器變量data, 最高有效位為0
對(duì)于上面的向量,我們可以指定某一位或若干相鄰位,作為其他邏輯使用。例如:
實(shí)例
wire?[9:0]?? ? data_low?=?data[0:9]?;
addr_temp[3:2]?=?addr[8:7]?+?1'b1?;
Verilog 支持可變的向量域選擇,例如:
實(shí)例
reg?[31:0]?? ? data1?;
reg?[7:0]?? ? ?byte1?[3:0];
integer?j?;
always@*?begin
? ??for?(j=0;?j<=3;j=j+1)?begin
? ? ? ? byte1[j]?=?data1[(j+1)*8-1?:?j*8];
? ? ? ??//把data1[7:0]…data1[31:24]依次賦值給byte1[0][7:0]…byte[3][7:0]
? ??end
end
Verillog 還支持指定 bit 位后固定位寬的向量域選擇訪問(wèn)。
- [bit+: width]?: 從起始 bit 位開(kāi)始遞增,位寬為 width。
- [bit-: width]?: 從起始 bit 位開(kāi)始遞減,位寬為 width。
實(shí)例
//下面 2 種賦值是等效的
A?=?data1[31-:?8]?;
A?=?data1[31:24]?;
//下面 2 種賦值是等效的
B?=?data1[0+?:?8]?;
B?=?data1[0:7]?;
對(duì)信號(hào)重新進(jìn)行組合成新的向量時(shí),需要借助大括號(hào)。例如:
實(shí)例
wire?[31:0]?? ?temp1,?temp2?;
assign?temp1?=?{byte1[0][7:0],?data1[31:8]};??//數(shù)據(jù)拼接
assign?temp2?=?{32{1'b0}};??//賦值32位的數(shù)值0 ?
整數(shù),實(shí)數(shù),時(shí)間寄存器變量
整數(shù),實(shí)數(shù),時(shí)間等數(shù)據(jù)類型實(shí)際也屬于寄存器類型。
整數(shù)(integer)
整數(shù)類型用關(guān)鍵字 integer 來(lái)聲明。聲明時(shí)不用指明位寬,位寬和編譯器有關(guān),一般為32 bit。reg 型變量為無(wú)符號(hào)數(shù),而 integer 型變量為有符號(hào)數(shù)。例如:
實(shí)例
reg?[31:0]?? ? ?data1?;
reg?[3:0]?? ? ? byte1?[7:0];?//數(shù)組變量,后續(xù)介紹
integer?j?;??//整型變量,用來(lái)輔助生成數(shù)字電路
always@*?begin
? ??for?(j=0;?j<=3;j=j+1)?begin
? ? ? ? byte1[j]?=?data1[(j+1)*8-1?:?j*8];
? ? ? ??//把data1[7:0]…data1[31:24]依次賦值給byte1[0][7:0]…byte[3][7:0]
? ? ? ??end
end
此例中,integer 信號(hào) j 作為輔助信號(hào),將 data1 的數(shù)據(jù)依次賦值給數(shù)組 byte1。綜合后實(shí)際電路里并沒(méi)有 j 這個(gè)信號(hào),j 只是輔助生成相應(yīng)的硬件電路。
實(shí)數(shù)(real)
實(shí)數(shù)用關(guān)鍵字 real 來(lái)聲明,可用十進(jìn)制或科學(xué)計(jì)數(shù)法來(lái)表示。實(shí)數(shù)聲明不能帶有范圍,默認(rèn)值為 0。如果將一個(gè)實(shí)數(shù)賦值給一個(gè)整數(shù),則只有實(shí)數(shù)的整數(shù)部分會(huì)賦值給整數(shù)。例如:
實(shí)例
real?? ? ? ?data1?;
integer?? ? temp?;
initial?begin
? ? data1?=?2e3?;
? ? data1?=?3.75?;
end
?
initial?begin
? ? temp?=?data1?;?//temp 值的大小為3
end
時(shí)間(time)
Verilog 使用特殊的時(shí)間寄存器 time 型變量,對(duì)仿真時(shí)間進(jìn)行保存。其寬度一般為 64 bit,通過(guò)調(diào)用系統(tǒng)函數(shù) $time 獲取當(dāng)前仿真時(shí)間。例如:
實(shí)例
time?????? current_time?;
initial?begin
???????#100?;
?????? current_time?=?$time?;?//current_time 的大小為 100
end
總結(jié)
以上是生活随笔為你收集整理的verilog REG 寄存器、向量、整数、实数、时间寄存器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 战略家任正非
- 下一篇: 如歌岁月--之《老鹰之歌》