reg,integer
整数(integer)
integer类型也是一种寄存器数据类型,integer类型的变量为有符号数,而reg类型的变量则为无符号数,除非特别声明为有符号数
还有就是integer的位宽为宿主机的字的位数,但最小为32位,用integer的变量都可以用reg定义,只是用于计数更方便而已。
reg,integer,real,time都是寄存器数据类型,定义在Verilog中用来保存数值的变量,和实际的硬件电路中的寄存器有区别。
大多数的矢量类型(reg或者net)都被默认当做无符号数。integer和real是个例外,它们被默认为当做有符号数。
real类型是不可综合的。
1、verilog中常用的数据类型
Verilog中共有19种数据类型。
1)基本的四种类型:
reg型、wire型、integer型、parameter型。
其他类型:large型、medium型、small型、scalared型、time型、tri型、trio型、tril型、triand型、trior型、trireg型、vectored型、wand型和wor型。
这14中数据类型除time外都与基本逻辑单元建库有关。
2)四种基本类型区别:
reg 无符号整数变量,可以选择不同的位宽。
integer 有符号整数变量,32位宽,算术运算可产生2的补码。
real 有符号的浮点数,双精度。
time 无符号整数变量,64位宽(Verilog-XL仿真工具用64位的正数来记录仿真时刻)
用 reg 描述逻辑,integer 描述循环变量和计算, real 在系统模型中使用,time 和 realtime 保存测试装置的仿真时间。
2、integer使用规则
1)reg是无符号整形变量,integer是有符号类型
2)integer定义为32bit的总线
3)for循环变量需要使用integer类型
请小心使用小型宽度的 reg 作为循环变量 测试负值的 reg 也要非常小心 如果重复的加 减运算和reg 的值都作为无符号数处理 循环表达式就永远不会出错
reg [2:0] i; // i 的值永远在 0 到 7 之间
...
for ( i=0; i<8; i=i+1 ) // 循环不会停止
...
for ( i=-4; i<0; i=i+1 ) // 不会执行
...
在像上面的情况中 循环变量 i 应该用 integer 类型
下面的代码显示reg和integer的一般用法:
integer i;
reg [15:0] V;
reg Parity;
always @(V)
for ( i = 0; i <= 15; i = i + 1 )
Parity = Parity ^ V[i];
4)文件读写时使用integer类型来简化代码操作
///save data to files1
parameter N = 4;
integer file_ceo_id [N-1:0]; //注意此处变量正确定义方式
initial begin
file_ceo_id[0] = $fopen("./ctrl_data0.txt","w");
file_ceo_id[1] = $fopen("./ctrl_data1.txt","w");
file_ceo_id[2] = $fopen("./ctrl_data2.txt","w");
file_ceo_id[3] = $fopen("./ctrl_data3.txt","w");
end
genvar i;
generate
for (i=0;i<N;i=i+1)
begin:W_FILES ///
always@( posedge clk)
begin
if (rd_valid == 1'b1)
begin
$fdisplay(file_ceo_id[i], "%h", out_fifo_rdata);
end
end
end
endgenerate
原文链接:https://blog.youkuaiyun.com/liqiang9410/article/details/76983900
原文链接:https://blog.youkuaiyun.com/miffywm/article/details/98752443