非法串联未定大小的常量



我编写了以下测试台:

// 4->1 multiplexer TB template
module mux4_tb;
//Some code
initial begin
d0={0,0,0,0};
end
endmodule

但是,当我运行它时,我会得到24个错误,如以下所示:

错误(可抑制(:mux4_tb.sv(23(:(vlog-2121(非法串联未定大小的常量。将其视为32位值。

我上面的代码出了什么问题?

如果您需要:

// 4->1 multiplexer template
module mux4 (
input logic[3:0] d0,    // Data input 0
input logic[3:0] d1,    // Data input 1
input logic[3:0] d2,    // Data input 2
input logic[3:0] d3,    // Data input 3
input logic[1:0] sel,   // Select input
output logic[3:0] z     // Output
);

如果你看看1800-2017 LRM(或任何早期的Verilog版本(第11.4.12节中串联运算符的定义,它说

串联中不允许使用未大小的常量。

这是因为在早期版本中,整数和整数常量文字的大小取决于实现。但即使是现在,在整数大小为32位的当前版本中,许多人也忘记了简单的未大小文本00不是单个位。它们隐含地是CCD_ 3。(32位带符号的十进制文字0(您需要编写以下内容才能使用串联:

d0={1'b0,1'b0,1'b0,1'b0};

或者你可以使用一个二进制文字:

d0 = 4'b0_0_0_0;

你的错误正是限制不允许在串联中使用未zied(实际上隐含大小(的文字背后的动机。

{0,0,0,0}是四个32位值的串联(根据消息(,产生128位零。我猜你是想连接4个比特,看起来应该像这个

{1'b0, 1'b0, 1'b0, 1'b0}

最新更新