I want to run N generator, driver, monitor, model and scoreboard in parallel. ( there are N independent lines)
How to write its code in the environment class? I tried to use for and fork-join but it doesn’t get the right answer.
for(int i=0; i< N; i++)
fork
automatic int k=i;
$display("hello%d",i);
gen[k].run();
drv[k].run();
model[k].run();
mon[k].run();
scb[k].run();
join_any
In reply to Moein75:
What do you mean by “doesn’t get the right answer”? Does it not compile? Does it not run? Does it run but not meet your requirements?
A complete example would be very helpful.
It runs but does not meet my requirements.
As soon as one statement in fork-join
-any has run, the simulator runs lines after join_any and I don’t get desired output.
If I change fork-join_any, with fork-join, It stays in the loop forever. Because in the driver we have a forever loop.
In reply to Moein75:
So you will need to look at each component and determine how you want to start it.
For a component which has a forever loop and never returns, or if you don’t care when it returns, you want to use a fork/join_none.
For a component which does return, you need to determine if you want to wait for just one to finish (fork/join_any), or wait for all to return (fork/join).
You will need to a for loop for each scenario.