icarus verilog 中的多维数组端口支持
multi dimensional array ports support in icarus verilog
我正在尝试使用多维数组作为我的 systemverilog 代码中的端口。顶部模块是一个 3 维数组,而子模块是一个二维数组。一个简化的测试平台和设计如下:
module TB();
wire [3:0]d_inAll [0:99][0:9];
wire [3:0]d_outAll [0:99][0:9];
genvar iX;
for (iX=0; iX<100; iX=iX+1)begin
someDesign DUT_i(.d_in(d_inAll[iX]) , .d_out(d_outAll[iX]));
end
endmodule
设计是
module someDesign(input wire [3:0] d_in[0:9],
output wire[3:0] d_out [0:9]);
genvar i;
for (i=0; i<10; i=i+1)begin
assign d_out[i] = d_in[i];
end
endmodule
我试图用 icarus verilog 编译这段代码,但失败并出现以下错误。
../elaborate.cc:1439: failed assertion rval_net->pin_count() == prts[0]->pin_count()
这是编译器的错误还是尚不支持的某些功能?有没有其他方法可以解决这个问题?我知道我可以将数组展平,但是,我宁愿不使用它,因为它会使设计更容易出现功能性错误。
这是一个错误,因此不受支持。它似乎支持一维解压缩数组端口,因此您可以将其中一个数组维度移动到压缩侧。
module TB();
wire [0:9][3:0]d_inAll [0:99];
wire [0:9][3:0]d_outAll [0:99];
genvar iX;
for (iX=0; iX<100; iX=iX+1)begin : fiX
someDesign DUT_i(.d_in(d_inAll[iX]) , .d_out(d_outAll[iX]));
end
endmodule
module someDesign(input wire [0:9][3:0] d_in,
output wire[0:9][3:0] d_out);
genvar i;
for (i=0; i<10; i=i+1)begin
assign d_out[i] = d_in[i];
end
endmodule
我正在尝试使用多维数组作为我的 systemverilog 代码中的端口。顶部模块是一个 3 维数组,而子模块是一个二维数组。一个简化的测试平台和设计如下:
module TB();
wire [3:0]d_inAll [0:99][0:9];
wire [3:0]d_outAll [0:99][0:9];
genvar iX;
for (iX=0; iX<100; iX=iX+1)begin
someDesign DUT_i(.d_in(d_inAll[iX]) , .d_out(d_outAll[iX]));
end
endmodule
设计是
module someDesign(input wire [3:0] d_in[0:9],
output wire[3:0] d_out [0:9]);
genvar i;
for (i=0; i<10; i=i+1)begin
assign d_out[i] = d_in[i];
end
endmodule
我试图用 icarus verilog 编译这段代码,但失败并出现以下错误。
../elaborate.cc:1439: failed assertion rval_net->pin_count() == prts[0]->pin_count()
这是编译器的错误还是尚不支持的某些功能?有没有其他方法可以解决这个问题?我知道我可以将数组展平,但是,我宁愿不使用它,因为它会使设计更容易出现功能性错误。
这是一个错误,因此不受支持。它似乎支持一维解压缩数组端口,因此您可以将其中一个数组维度移动到压缩侧。
module TB();
wire [0:9][3:0]d_inAll [0:99];
wire [0:9][3:0]d_outAll [0:99];
genvar iX;
for (iX=0; iX<100; iX=iX+1)begin : fiX
someDesign DUT_i(.d_in(d_inAll[iX]) , .d_out(d_outAll[iX]));
end
endmodule
module someDesign(input wire [0:9][3:0] d_in,
output wire[0:9][3:0] d_out);
genvar i;
for (i=0; i<10; i=i+1)begin
assign d_out[i] = d_in[i];
end
endmodule