在这个简短的示例中,我想简化信号宽度的编写。对于一个信号,确实没有必要这样做,但在我的实际代码中,我有很多这样的信号,用较长的样式声明它们是不合适的。
您能告诉我为什么我收到 signal_2 错误吗?
module sample #(parameter BYTE_WIDTH = 4);
const int BIT_WIDTH = BYTE_WIDTH * 8;
logic [BYTE_WIDTH * 8 -1 : 0] signal_1; // works
logic [BIT_WIDTH -1 : 0] signal_2; // ** Error: Range must be bounded by constant expressions.
endmodule
最佳答案
const
变量在运行时被赋值。为时已晚:变量 signal_2
的宽度需要在编译时修复。因此,您需要的是一个 localparam
,它(如 parameter
)在编译时是固定的,但(与 parameter
不同)不能从外部覆盖:
module sample #(parameter BYTE_WIDTH = 4);
localparam BIT_WIDTH = BYTE_WIDTH * 8;
logic [BYTE_WIDTH * 8 -1 : 0] signal_1;
logic [BIT_WIDTH -1 : 0] signal_2;
endmodule
关于constants - SystemVerilog 无法识别常量 : Error: Range must be bounded by constant expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61341531/