System verilog 在systemverilog中,fork块内部的fork循环和fork块内部的fork循环有什么区别?

System verilog 在systemverilog中,fork块内部的fork循环和fork块内部的fork循环有什么区别?,system-verilog,System Verilog,我已经在SystemVerilog中为FIFO内存模型设计了测试环境,在这个环境中,我面临着这个问题。那么,哪个选项更适合我呢 当我在fork块内部使用fork循环时,它会给出某种程度上受控的输出,但是当我在fork块内部使用fork时,它会在模拟器中变成一个无限循环 一: 二: 根据我的理解,这没什么区别。那么为什么会有如此不同的输出呢?它们完全不同,因为在fork-join块中的所有线程都完成之后,才会继续执行。因此,您的第一个示例将在第一对线程完成后启动下一对线程(P1和P2),例如(假设

我已经在SystemVerilog中为FIFO内存模型设计了测试环境,在这个环境中,我面临着这个问题。那么,哪个选项更适合我呢

当我在fork块内部使用fork循环时,它会给出某种程度上受控的输出,但是当我在fork块内部使用fork时,它会在模拟器中变成一个无限循环

一:

二:


根据我的理解,这没什么区别。那么为什么会有如此不同的输出呢?

它们完全不同,因为在
fork
-
join
块中的所有线程都完成之后,才会继续执行。因此,您的第一个示例将在第一对线程完成后启动下一对线程(P1和P2),例如(假设P2比P1耗时更长):

但是,在第二个示例中,在
fork
-
join
块(
forever
循环)中只有一个线程,因此线程P1和P2按顺序执行:

|----P1----|------P2------|----P1----|------P2------|----P1----|------P2------|

但在第一种情况下,模拟并没有结束,而在第二种情况下,模拟将结束。如果两者都有相同的终止条件,那么为什么只有第二个案例,达到了结尾呢?@ShraddhaDevaiya没有一个,我不可能说。好的,我正在创建最小的示例,将尽快上传。谢谢你以前的回答。我明白你的意思。
fork
  forever begin
    p1;   //thread-1
    p2;   //thread-2
  end
join
|----P1----    |----P1----    |----P1----    |----P1----    |
|------P2------|------P2------|------P2------|------P2------|
|----P1----|------P2------|----P1----|------P2------|----P1----|------P2------|