【问题标题】:How can I set a full variable constant?如何设置完整的变量常量?
【发布时间】:2013-08-20 20:33:58
【问题描述】:

当数字大小是可变的,因此必须通过参数设置时,如何设置最大数字?在下文中,结果必须是“FFFF”,但模拟器只返回“F”。谁能解决这个问题?

`define SIZE 10
module tb1;
    reg [15:0] a;

    initial begin
        a = `SIZE'hF;
        $display("a=%h",a);
    end
endmodule

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    您可以使用复制运算符来构造位向量。

    {a{b}} 生成一个向量,其中包含向量 ba 个副本。

    在你的情况下,这将是:

     a = {`SIZE{1'b1}};
    

    【讨论】:

    • 使用复制,SIZE 必须设置为 16。可能是他的代码中的一个错字。 {10{1'b1}} 只产生 03FF。获取a的最大数量,或者将SIZE改为16或者使用unsized的单比特值。
    【解决方案2】:

    `SIZE'hFSIZE 部分仅表示它只是一个 n 位宽度的数字。在您的情况下,10'hF 表示它是一个 10 位数字0xF,因此在您的模拟中是正确的。

    如果您使用 SystemVerilog,您可以只使用a = '1;,它会将所有位设置为 1。

    这是 SystemVerilog LRM 所说的,

    可以通过在单位值前面加上撇号 ( ' ) 来指定未调整大小的单位值,但没有基本说明符。 unsized 值的所有位都应设置为指定位的值。在自行确定的上下文中,未指定大小的单比特值的宽度应为 1 位,该值应视为无符号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多