我正在关注此链接上的测试平台示例:
http://www.verificationguide.com/p/systemverilog-testbench-example-00.html
我有两个关于 fork-join 语句的问题。测试环境具有以下启动测试的任务:
task test();
fork
gen.main();
driv.main();
join_any
endtask
task post_test();
wait(gen.ended.triggered);
wait(gen.repeat_count == driv.no_transactions);
endtask
task run;
pre_test();
test();
post_test();
$finish;
endtask
我的第一个问题是为什么我们要等待在 post_test() 任务中触发生成器事件?为什么不做一个常规的fork-join,据我所知,它将等待两个线程完成后再继续。
我读了另一个 Stack Overflow 问题(System Verilog fork join - Not 实际上是并行的?)说这些线程实际上并不是在 CPU 意义上并行执行,而只是在模拟意义上。
我的第二个问题是,如果它们实际上没有并行执行,那么分叉连接的意义何在。不会有性能优势,所以为什么不遵循如下顺序算法:
while true:
Create new input
Feed input to module
Check output
对我来说,这似乎比测试台示例简单得多。
谢谢你的帮助!