繁体   English   中英

如何在系统Verilog中使用fork块中的generate

[英]How using generate in fork block in system verilog

最喜欢的是,在我的测试用例中,我编写了如下程序

define NUM_TEST 10
program test();
   bit [31:0] a[NUM_TEST]; 
   bit [31:0] b[`NUM_TEST]; 
   .... 
   initial begin 
     ..... 
     fork 
        aaa (a[0], b[0]); 
        aaa (a[1], b[1]); 
        ................ 
        aaa (a[9], b[9]); 
     join 
     ..... 
  end 
  task aaa (bit [31:0] a, bit [31:0] b); 
    ..... 
  endtask 
endmodule

如您所见,我以NUM_TEST时间调用任务aaa(我希望同时执行所有任务)。 有什么办法可以减少我的代码,例如:

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

(当然,以上代码是错误的语法);

仅供参考:我不想使用like:

   fork 
      for (int i=0; i<`NUM_TEST; i++) 
        aaa(a[i], b[i]); 
   join 

->这对我来说是错误的,因为任务是按顺序执行的,而不是同时执行。

请帮我 :(

您想要的是fork/join_nonewait 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM