我对 SystemVerilog 中的竞争条件有疑问,尤其是在 UVM 中。在标准情况下,我们有多个驱动程序在同一时钟前驱动我们的任务,在记分牌中生成一些函数调用。这些调用是同时进行的,它们检查/修改黄金参考模型中的一些共享变量是现实的。如果这些操作使用非阻塞赋值完成,则不会有问题,但使用阻塞赋值可能会出现竞争条件。克服这个问题的最佳方法是什么?实现不在一个类中的黄金参考模型?提前致谢
记分板的伪代码示例可能是:
function void write_A(input TrA A);
if(GRF.b >= 100 && A.a==1)
GRF.c = 1;
endfunction
function void write_B(input TrB B);
GRF.b+=B.b;
endfunction
当然结果取决于这两个函数的执行顺序,这是未知的。可以使用一些同步机制来解决,但是使用许多编写并行函数会变得更加困难。使用非阻塞赋值将使情况更加清晰和简单......也许解决方案是将 GRF 的所有成员都设为静态?