System verilog 如何在verilog系统中使用generate-in-fork块

System verilog 如何在verilog系统中使用generate-in-fork块,system-verilog,System Verilog,宠儿 在我的测试用例中,我编写了一个程序,如下所示“ 如您所见,我使用NUM_测试时间调用task aaa(我希望所有任务同时执行)。是否有任何方法可以减少我的代码,例如: **fork genvar k; generate (for k=0; k<NUM_TEST; k++) aaa(a[k], b[k]); endgenerate join** **fork genvar k; 生成 (

宠儿 在我的测试用例中,我编写了一个程序,如下所示“

如您所见,我使用NUM_测试时间调用task aaa(我希望所有任务同时执行)。是否有任何方法可以减少我的代码,例如:

  **fork
      genvar k;
      generate
         (for k=0; k<NUM_TEST; k++) 
            aaa(a[k], b[k]); 
      endgenerate 
    join** 
**fork
genvar k;
生成

(对于k=0;k您需要的是
fork/join\u none
wait fork

module test;
`define NUM_TEST 10
program test();
   bit [31:0] a[`NUM_TEST]; 
   bit [31:0] b[`NUM_TEST]; 
   .... 

 initial begin 
     ..... 
       for (int i=0; i<`NUM_TEST; i++) 
         fork
            automatic int j = i;        
            aaa(a[j], b[j]); 
         join_none
       wait fork;
     ....
   end
模块测试;
`定义NUM_测试10
程序测试();
位[31:0]a[`NUM_TEST];
位[31:0]b[`NUM_TEST];
.... 
初始开始
..... 

对于(int i=0;i您需要的是
fork/join\u none
wait fork

module test;
`define NUM_TEST 10
program test();
   bit [31:0] a[`NUM_TEST]; 
   bit [31:0] b[`NUM_TEST]; 
   .... 

 initial begin 
     ..... 
       for (int i=0; i<`NUM_TEST; i++) 
         fork
            automatic int j = i;        
            aaa(a[j], b[j]); 
         join_none
       wait fork;
     ....
   end
模块测试;
`定义NUM_测试10
程序测试();
位[31:0]a[`NUM_TEST];
位[31:0]b[`NUM_TEST];
.... 
初始开始
..... 

对于(int i=0;iOh,我提交此问题时语法错误。我的旧代码是:哦,我提交此问题时语法错误。我的旧代码是:谢谢你的回答。我想问一下wait fork。它将等待fork的所有提交任务完成。在这种情况下,我只想等待所有任务aaa()完成了,所以如果我有任何其他fork-joinnone块,它也会等待这些任务吗?您可以将那些
for
循环放到另一个任务中的
wait fork;
代码,以确保
wait fork
只等待
aaa()
threads.@thinhungyenkoc,
wait fork
等待执行
wait fork
语句的进程的所有子进程。不要将其与
task
function
调用混淆,因为它们本身不会创建另一个进程。子进程仅由
forkblock。恰好您的fork语句是任务调用,但fork中的任何过程语句都会创建一个进程。因此@AldoT的建议不正确。谢谢您的回答。我想问一下wait fork。它将等待fork的所有提交任务完成。在这种情况下,我只想等待所有任务aaa()完成了,所以如果我有任何其他fork-joinnone块,它也会等待这些任务吗?您可以将那些
for
循环放到另一个任务中的
wait fork;
代码,以确保
wait fork
只等待
aaa()
threads.@thinhungyenkoc,
wait fork
等待执行
wait fork
语句的进程的所有子进程。不要将其与
task
function
调用混淆,因为它们本身不会创建另一个进程。子进程仅由
forkblock。恰好您的fork语句是任务调用,但是fork中的任何过程语句都会创建一个进程。因此@AldoT的建议是不正确的。
module test;
`define NUM_TEST 10
program test();
   bit [31:0] a[`NUM_TEST]; 
   bit [31:0] b[`NUM_TEST]; 
   .... 

 initial begin 
     ..... 
       for (int i=0; i<`NUM_TEST; i++) 
         fork
            automatic int j = i;        
            aaa(a[j], b[j]); 
         join_none
       wait fork;
     ....
   end