Verilog 中整数和 reg 变量类型有什么区别?
What is the Difference Between the integer and reg Variable Types in Verilog?
在使用 Verilog 几个月后,我很好奇区别 是什么:
reg [31:0] sum;
integer sum;
既然整数只是一个 32 位值为什么你不能只使用 reg 来表示它?为什么在 内存使用或访问时间?请让我知道您的想法,或者您是否需要我扩展我的问题。
使用整数的示例:
integer t = 0;
always @(posedge clk) begin
if (t < 9999) t = t + 1;
else t = 0;
end
使用 Reg 的示例:
reg[13:0] t = 14'b0; //Represent up to 16383
always @(posedge clk) begin
if (t < 9999) t = t + 14'b00000000000001;
else t = 14'b0;
end
integer sum; // is equivalent to
reg signed [31:0] sum;
在 1980 年代 Verilog 诞生之初,integer
是一种有符号的、未定大小的 4 态整数类型。它的物理尺寸是从模拟主机工具推断出来的。综合工具是根据使用的上下文推断其大小(即 for
循环,最终将展开为一组常量值)。
但是更高版本的 Verilog,以及现在的 SystemVerilog 只是将 integer
用作具有预定义 32 位宽度的 4 态有符号类型。意识到一个 4 状态的 32 位类型实际上占用了 64 位。保持其价值。
另请注意,SystemVerilog 将 reg
关键字重命名为 logic
,因为此数据类型从未用于描述 registers 独家。另见:https://blogs.sw.siemens.com/verificationhorizons/2013/05/03/wire-vs-reg/
在使用 Verilog 几个月后,我很好奇区别 是什么:
reg [31:0] sum;
integer sum;
既然整数只是一个 32 位值为什么你不能只使用 reg 来表示它?为什么在 内存使用或访问时间?请让我知道您的想法,或者您是否需要我扩展我的问题。
使用整数的示例:
integer t = 0;
always @(posedge clk) begin
if (t < 9999) t = t + 1;
else t = 0;
end
使用 Reg 的示例:
reg[13:0] t = 14'b0; //Represent up to 16383
always @(posedge clk) begin
if (t < 9999) t = t + 14'b00000000000001;
else t = 14'b0;
end
integer sum; // is equivalent to
reg signed [31:0] sum;
在 1980 年代 Verilog 诞生之初,integer
是一种有符号的、未定大小的 4 态整数类型。它的物理尺寸是从模拟主机工具推断出来的。综合工具是根据使用的上下文推断其大小(即 for
循环,最终将展开为一组常量值)。
但是更高版本的 Verilog,以及现在的 SystemVerilog 只是将 integer
用作具有预定义 32 位宽度的 4 态有符号类型。意识到一个 4 状态的 32 位类型实际上占用了 64 位。保持其价值。
另请注意,SystemVerilog 将 reg
关键字重命名为 logic
,因为此数据类型从未用于描述 registers 独家。另见:https://blogs.sw.siemens.com/verificationhorizons/2013/05/03/wire-vs-reg/