我正在尝试使用 QuestaSim(直接从 Quartus 运行)来运行测试平台,相关部分概述如下。
`timescale 1 ns / 10 ps
module ASS1_T3_tb();
parameter NumBits = 8;
int fd;
logic signed [NumBits:0] jj,kk;
logic signed [2*NumBits-1:0] Output;
ASS1_T3 U1(.M(jj[NumBits-1:0]), .Q(kk[NumBits-1:0]), .O(Output));
initial
begin
$display($time, " << Starting the Simulation >>");
for(jj=0; jj<=(8'sb11111111); jj=jj+1)
begin
$stop;
for(kk=0; kk<=(8'sb11111111); kk=kk+1)
begin
#10;
// Internal logic that I don't think affects the issue
// this logic does NOT change jj or kk
end
end
$finish();
end
endmodule
但是,涉及“jj”的
for
循环实际上从未运行过。我已经对其他运行正确的测试平台进行了类似的实现。模拟开始并且不会在“$stop”语句处停止,而是跳至“$finish()”语句。
我正在使用 SystemVerilog,尝试了 SystemVerilog 和良好的 ol' Verilog 格式将网表输出到 Questa,但无济于事。我之前制作过很少的测试平台,因此非常感谢您的帮助。这是该项目的组合版本,我还尝试了顺序测试平台,它也跳过了 For 循环。
8'sb11111111
与十进制-1 相同。添加这行代码:
initial $display("8'sb11111111 is %0d", 8'sb11111111);
输出:
8'sb11111111 is -1
这意味着带有
for
的 jj
循环体不会被执行。
您需要为循环选择另一个结束条件。例如,这将允许循环执行 3 次:
for (jj=0; jj<=2; jj=jj+1)