如何以位为单位获取 parameter/number 的大小?

how to get the size of a parameter/number in bits?

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

Parameter value must be constant.

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

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

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

当您向 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中没有定义,所以编译器认为这是一个用户定义的运行-time函数。如果将文件扩展名更改为 .sv.

,则不会出现该错误