【问题标题】:What is the Difference Between the integer and reg Variable Types in Verilog?Verilog中的整数和reg变量类型​​有什么区别?
【发布时间】:2020-04-19 22:29:29
【问题描述】:

使用 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

【问题讨论】:

    标签: verilog vivado


    【解决方案1】:
    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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多