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

How to synchronize two unrelated UVM sequence items from different UVM agents?

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

现在我有分别用于编码器和解码器输入代理的序列和序列项。但是我如何同步这两个代理,以便解码器重新激活代理添加错误并按顺序为每个数据创建一个新数据包。

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

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

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

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

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