Verilog 如何防止ModelSIM在模拟过程中停止?

Verilog 如何防止ModelSIM在模拟过程中停止?,verilog,system-verilog,modelsim,Verilog,System Verilog,Modelsim,我试图模拟一个下行计数器,我在SystemVerilog中使用D-Latchs描述了这个计数器,但当我开始模拟时,ModelSIM停止工作,我什么都做不了 这是下行计数器说明 `timescale 1ns/1ns module Down_Counter_Part5 (input RST,CLK,EnableIN, output[7:0] Qout, output EnableOUT); genvar i; wire[8:0] En; wire[7:0] D,Qbar;

我试图模拟一个下行计数器,我在SystemVerilog中使用D-Latchs描述了这个计数器,但当我开始模拟时,ModelSIM停止工作,我什么都做不了

这是下行计数器说明

`timescale 1ns/1ns
module Down_Counter_Part5 (input RST,CLK,EnableIN, output[7:0] Qout, output EnableOUT);

    genvar i;
    wire[8:0] En;
    wire[7:0] D,Qbar;

    assign En[0] = EnableIN;
    assign EnableOUT = En[8];

    generate
        for (i=0; i<8; i=i+1) begin
            assign D[i] = (Qout[i] ^ En[i]) & (~RST);
            assign En[i+1] = Qbar[i] & En[i];
            Clocked_D_Latch Ii (D[i],CLK,Qout[i],Qbar[i]);
        end
    endgenerate

endmodule

如何解决这个问题?

您有一个零时间无限组合反馈回路。这将使模拟器超时或显示为hag

我假设当
CLK
较高时闩锁是透明的;你没有显示那部分代码。因此,当CLK较高时,
Qout
将等于
D
。但是当
En
较高时,
D
将等于
Qout
的倒数。由于没有时间阻塞,
Qout
将被重新计算,导致对
D
的另一次更新,导致对
Qout
的另一次更新,并且永远持续

如果你只想模拟这个,那么给赋值增加一点延迟,这样你就可以在waverom/logfile中看到反馈循环。我还建议将
RST
启动为0,以便可以清除X和Z值

assign #1 D[i] = (Qout[i] ^ En[i]) & (~RST);

添加
#1
对于实际设计来说不是一个合适的解决方案。一个合适的解决方案要求所有信号在每个时间步都处于可确定状态,没有延迟。

您有一个零时间无限组合反馈回路。这将使模拟器超时或显示为hag

我假设当
CLK
较高时闩锁是透明的;你没有显示那部分代码。因此,当CLK较高时,
Qout
将等于
D
。但是当
En
较高时,
D
将等于
Qout
的倒数。由于没有时间阻塞,
Qout
将被重新计算,导致对
D
的另一次更新,导致对
Qout
的另一次更新,并且永远持续

如果你只想模拟这个,那么给赋值增加一点延迟,这样你就可以在waverom/logfile中看到反馈循环。我还建议将
RST
启动为0,以便可以清除X和Z值

assign #1 D[i] = (Qout[i] ^ En[i]) & (~RST);

添加
#1
对于实际设计来说不是一个合适的解决方案。正确的解决方案要求所有信号在每个时间步都处于可确定的状态,没有延迟。

这不是您要切换的clk信号吗?它在0ns处停止,然后什么都没有发生是的,我想切换clk,但没有一个正常工作不是您要切换的clk信号吗?它在0ns处停止,然后什么都没有发生是的,我想切换clk,但是没有一个正常工作不是吗想要切换clk,但它们都不能正常工作