如何以位为单位获取 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
.
,则不会出现该错误
我想在 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
.