尝试使用 Icarus 编译 SV 文件的断言失败错误
Posted
技术标签:
【中文标题】尝试使用 Icarus 编译 SV 文件的断言失败错误【英文标题】:Assertion Failed Error Trying to compile SV files with Icarus 【发布时间】:2019-05-09 10:48:05 【问题描述】:我尝试使用 Icarus 使用其测试平台编译 mux.sv 设计模块,但我收到以下错误 vvp: array.cc:906: void compile_var2_array(char*, char*, int, int, int, int, bool): Assertion `0' failed.
Aborted (core dumped)
。
下面是测试台的代码sn-p
`include "mux.sv"
module tb_mux();
bit a0, a1, a2, d0, d1, d2, d3, d4, d5, d6, d7, out;
// read
bit expectedOutput;
int passedFile;
integer i;
bit [11:0] testvector[2047:0];
// design unit under test instantiation
mux dut(.out(out), .a0(a0), .a1(a1), .a2(a2), .d0(d0), .d1(d1), .d2(d2), .d3(d3), .d4(d4), .d5(d5), .d6(d6), .d7(d7));
initial begin
$readmemb("testcases", testvector);
passedFile = $fopen("passed.txt", "w");
if(passedFile)
$display("file opened");
else
$display("couldn't open the file");
end
task assertOutput;
begin
int unsigned cases = 0;
for (i = 0; i< 2048; i++)begin
a0, a1, a2, d0, d1, d2, d3, d4, d5, d6, d7, expectedOutput = testvector[i];
#10;
if(a0 == 1'b0 && a1 == 1'b0 && a2 == 1'b0 && out == expectedOutput)
cases = cases + 1;
else if(a0 == 1'b0 && a1 == 1'b0 && a2 == 1'b1 && out == expectedOutput)
cases = cases + 1;
else if(a0 == 1'b0 && a1 == 1'b1 && a2 == 1'b0 && out == expectedOutput)
cases = cases + 1;
else $display(0);
end
$fdisplay(passedFile, "%d", cases);
end
endtask
endmodule
我的测试台有什么问题会导致这个错误?
【问题讨论】:
可能问题出在 icarus。使用不同的模拟器在 edaplayground 上尝试您的代码。另外,minimal reproducible example 是什么让您认为您选择显示的代码产生了错误? 【参考方案1】:我必须将位数据类型更改为逻辑才能使其与 Icarus 一起使用。
【讨论】:
以上是关于尝试使用 Icarus 编译 SV 文件的断言失败错误的主要内容,如果未能解决你的问题,请参考以下文章
icarus 的 SystemVerilog 支持(iverilog 编译器)
Scala 编译器中的错误:java.lang.AssertionError:断言失败(即使在 Eclipse 中指定了项目依赖项)