System verilog 如何在verilog系统中使用generate-in-fork块
宠儿 在我的测试用例中,我编写了一个程序,如下所示“ 如您所见,我使用NUM_测试时间调用task aaa(我希望所有任务同时执行)。是否有任何方法可以减少我的代码,例如: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; 生成 (
**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