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