日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

verilog REG 寄存器、向量、整数、实数、时间寄存器

發布時間:2023/12/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 verilog REG 寄存器、向量、整数、实数、时间寄存器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寄存器(reg)

寄存器(reg)用來表示存儲單元,它會保持數據原有的值,直到被改寫。聲明舉例如下:

實例

reg?? ?clk_temp;
reg????flag1,?flag2?;

例如在 always 塊中,寄存器可能被綜合成邊沿觸發器,在組合邏輯中可能被綜合成 wire 型變量。寄存器不需要驅動源,也不一定需要時鐘信號。在仿真時,寄存器的值可在任意時刻通過賦值操作進行改寫。例如:

實例

reg?rstn?;
initial?begin
? ? rstn?=?1'b0?;
? ??#100?;
? ? rstn?=?1'b1?;
end

向量

當位寬大于 1 時,wire 或 reg 即可聲明為向量的形式。例如:

實例

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

對于上面的向量,我們可以指定某一位或若干相鄰位,作為其他邏輯使用。例如:

實例

wire?[9:0]?? ? data_low?=?data[0:9]?;
addr_temp[3:2]?=?addr[8:7]?+?1'b1?;

Verilog 支持可變的向量域選擇,例如:

實例

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 位后固定位寬的向量域選擇訪問。

  • [bit+: width]?: 從起始 bit 位開始遞增,位寬為 width。
  • [bit-: width]?: 從起始 bit 位開始遞減,位寬為 width。

實例

//下面 2 種賦值是等效的
A?=?data1[31-:?8]?;
A?=?data1[31:24]?;

//下面 2 種賦值是等效的
B?=?data1[0+?:?8]?;
B?=?data1[0:7]?;

對信號重新進行組合成新的向量時,需要借助大括號。例如:

實例

wire?[31:0]?? ?temp1,?temp2?;
assign?temp1?=?{byte1[0][7:0],?data1[31:8]};??//數據拼接
assign?temp2?=?{32{1'b0}};??//賦值32位的數值0 ?

整數,實數,時間寄存器變量

整數,實數,時間等數據類型實際也屬于寄存器類型。

整數(integer)

整數類型用關鍵字 integer 來聲明。聲明時不用指明位寬,位寬和編譯器有關,一般為32 bit。reg 型變量為無符號數,而 integer 型變量為有符號數。例如:

實例

reg?[31:0]?? ? ?data1?;
reg?[3:0]?? ? ? byte1?[7: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

此例中,integer 信號 j 作為輔助信號,將 data1 的數據依次賦值給數組 byte1。綜合后實際電路里并沒有 j 這個信號,j 只是輔助生成相應的硬件電路。

實數(real)

實數用關鍵字 real 來聲明,可用十進制或科學計數法來表示。實數聲明不能帶有范圍,默認值為 0。如果將一個實數賦值給一個整數,則只有實數的整數部分會賦值給整數。例如:

實例

real?? ? ? ?data1?;
integer?? ? temp?;
initial?begin
? ? data1?=?2e3?;
? ? data1?=?3.75?;
end
?
initial?begin
? ? temp?=?data1?;?//temp 值的大小為3
end

時間(time)

Verilog 使用特殊的時間寄存器 time 型變量,對仿真時間進行保存。其寬度一般為 64 bit,通過調用系統函數 $time 獲取當前仿真時間。例如:

實例

time?????? current_time?;
initial?begin
???????#100?;
?????? current_time?=?$time?;?//current_time 的大小為 100
end

總結

以上是生活随笔為你收集整理的verilog REG 寄存器、向量、整数、实数、时间寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。