如何同步来自不同UVM代理的两个不相关的UVM序列项?

时间:2017-09-05 19:23:56

标签: system-verilog uvm

UVM Testbench scenario

这是我验证奇偶校验编码器 - 解码器DUT的方案。此处的解码器输入代理是重新激活的代理,并将错误注入从编码器输出代理中的被动监视器捕获的数据流中。

现在,我为编码器和解码器输入代理分别提供了序列和序列项。但是,如何同步两个代理程序,使解码器重新活动代理程序添加错误并按顺序为每个数据创建新数据包。

例如假设编码器按顺序发送数据 - 1000,1010,0100,1011,解码器重新激活代理按顺序创建错误数据包(一个热位) - 0010,1000,0001,0100。现在两者都创建数据包彼此无关。然而,即使从被动代理监视器一起接收到两个数据,即1000和1010,重新激活的代理也应该将第一个数据与第一个数据包相似,如1000 ^ 0010。 此外,由于两个代理都在生成项目,因此解码器在从编码器代理接收数据之前不应发送项目(通过被动编码器代理监视器)。

2 个答案:

答案 0 :(得分:0)

一种选择是使用config_db将endcoder事务放在那里并从解码器重新激活代理获取它。我认为这不是一个好方法。 另一个选择是让虚拟序列(包括编码器和解码器序列)获取编码器数据包并提供给解码器序列。

答案 1 :(得分:0)

我想,你想在不同的对象之间使用锁定机制。

您可以使用IPC(进程间通信)方法来控制它,例如事件,邮箱,信号量。

在UVM中,可以使用高级方法,例如uvm_eventTLM FIFOs,可用于您的目的。