【问题标题】:how to get the size of a parameter/number in bits?如何获取参数/数字的大小(以位为单位)?
【发布时间】:2020-03-31 09:46:59
【问题描述】:

我想在 Verilog 中创建一个数组,其大小基于多个参数。 我在 ModelSim 中尝试了这段代码,但出现以下错误:

参数值必须是常数。

localparam a = 250;
localparam b = 480;
localparam m = a * 100 / (b * 2);
localparam s = $bits(2 * m);

【问题讨论】:

    标签: verilog


    【解决方案1】:

    要计算在 verilog 中保存值所需的位数,您可以使用 $clog2 函数。类似下面的内容将提供2 * m 的位数。唯一需要注意的是当 m == 0 时。您至少需要一位来保存0

    localparam s = m == 0 ? 1 : $clog2(2 * m);
    

    【讨论】:

      【解决方案2】:

      当您使用用于运行示例的命令提供complete runnable examples 时,它会有所帮助。

      module top;
         localparam a  = 250;
         localparam b      = 480;
         localparam m      = a * 100 / (b * 2);
         localparam s      = $bits(2 * m);
      endmodule
      
      vlog file.v
      

      $bits 未在 Verilog 中定义,因此编译器认为这是用户定义的运行时函数。如果将文件扩展名更改为 .sv,则不会出现该错误。

      【讨论】:

      • $bits 始终返回变量/参数的大小,在这种情况下为 int 参数的大小为 32。
      • 你是对的。我没有看他们试图实现的计算,只是错误。
      猜你喜欢
      • 2013-02-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2012-07-07
      相关资源
      最近更新 更多