for 循环似乎跳过了我的初始块的主体

问题描述 投票:0回答:1

我正在尝试运行一个测试平台,相关部分概述如下。

`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 和良好的旧 Verilog 格式将网表输出到 Questa,但无济于事。我之前制作过很少的测试平台,因此非常感谢您的帮助。这是该项目的组合版本,我还尝试了顺序测试平台,它也跳过了

for
循环。

system-verilog
1个回答
0
投票

8'sb11111111
是一个 signed 数字文字,与十进制 -1 相同。添加这行代码:

initial $display("8'sb11111111 is %0d", 8'sb11111111);

输出:

8'sb11111111 is -1

这意味着带有

for
jj
循环体不会被执行,因为以下表达式为 false:

jj<=(8'sb11111111)

您需要为循环选择另一个结束条件。例如,这将允许循环执行 3 次:

for (jj=0; jj<=2; jj=jj+1)

请参阅 IEEE Std 1800-2017,第 5.7.1 节 整数字常量

© www.soinside.com 2019 - 2024. All rights reserved.