gpt4 book ai didi

system-verilog - UVM 阻塞赋值竞争条件

转载 作者:行者123 更新时间:2023-12-04 04:27:14 24 4
gpt4 key购买 nike

我对 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 的所有成员设为静态?

最佳答案

这里的问题是您正在尝试使用行为代码模拟 RTL 行为。您在多个线程中使用多个函数,并以随机顺序在同一时钟沿调用它们。除了对您的操作强制执行命令外,此问题没有任何解决方案。

最简单的方法是将记分板中的所有@(posedge clk) 线程合并为一个线程。这将迫使您每次都以相同的顺序调用函数。

所以代替

@(posedge clk)
write_A(A);

@(posedge clk)
write_B(B);

你有
@(posedge clk) begin
write_A(A);
write_B(B);
end

后面的代码每次都会以相同的方式运行。

关于system-verilog - UVM 阻塞赋值竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26940115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com