Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 系统verilog中for循环内的fork-join_System Verilog - Fatal编程技术网

System verilog 系统verilog中for循环内的fork-join

System verilog 系统verilog中for循环内的fork-join,system-verilog,System Verilog,问题:这段代码的输出是什么?为什么 module tb; int i; initial begin for(i=0; i<10; i++) begin fork #1 $display("Value = %d", i); join_none end end endmodule 模块tb; int i; 初始开始 对于(i=0;i示例启动$display的10个并行线程,并在将

问题:这段代码的输出是什么?为什么

module tb;
int i;

  initial begin
    for(i=0; i<10; i++)
      begin
        fork
          #1 $display("Value = %d", i);
        join_none
      end
  end
endmodule
模块tb;
int i;
初始开始

对于(i=0;i示例启动$display的10个并行线程,并在将来调度每个#1。它们打印值10,因为没有时间阻止(join#none根本不阻止)循环,因此循环在t=0时执行其所有迭代

添加了一些打印执行时间,以便更容易看到正在发生的事情。执行线程不会等待其中任何一个完成(join_none),因此最终打印在t=0时执行

模拟输出在这里

如果需要进一步研究,请参阅IEEE 1800-2017第9.3.2节平行块。


如果您想运行它,请访问www.edaplayplace.com,您可以使用几乎免费的行业标准工具运行它(需要通过电子邮件注册)。

要生成包含所有可能索引值的fork线程,您可以在for loop中使用自动变量

module tb;
  int i;

  initial begin
    for(i=0; i<10; i++)
      begin
        automatic int j = i;
        fork
          #1 $display("Value = %d", **j**);
        join_none
      end
  end
endmodule

要理解自动变量生命周期概念,包括“fork-inside-for”,请参考SV LRM“6.21范围和生命周期”,或者您可以找到许多关于此主题的线程,例如:

Value =           0
Value =           1
Value =           2
Value =           3
Value =           4
Value =           5
Value =           6
Value =           7
Value =           8
Value =           9