我对SystemVerilog中的竞态条件有疑问,特别是在UVM中。在标准情况下,我们所拥有的是多个驱动程序,它们在同一时钟前驱动我们的小玩意儿,在记分牌中产生一些函数调用。这些调用是同时进行的,他们检查/修改黄金参考模型中的某些共享变量是现实的。如果这些操作是在非阻塞赋值的情况下完成的,那就没有问题,但是阻塞赋值可能会存在竞争条件。哪个是解决这个问题的最好方法?要不在课堂上实现黄金参考模型? 预先感谢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的所有成员都是静态的?
这就是为什么你通常实现一些同步机制来处理并行性。 – 2014-11-15 00:43:10
如果我没有记错,应该使用uvm_analysis功能自动处理计划和同步记分板。 – Greg 2014-11-15 19:03:22