Verilog中的integer和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;

在20世纪80年代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/

最新更新