首页 > 解决方案 > 与 UVM 中的多个定序器相同的序列

问题描述

我有一个带有 2 个相同类型接口的 DUT。我创建了 2 个代理来驱动这两个接口。我的想法是在接口端口上驱动相同的信号来测试特定的场景。因此,我想创建一个序列并将其驱动到代理的两个序列器。但我得到一个错误。代码如下:

my_sequencer m_seqr[2];
my_sequence m_seq;

for(int i=0; i<2; i++) begin
  fork
    int idx = i;
      m_seq.start(p_sequencer.m_seqr[i];
  join_none
end  

我没有显示完整的代码来保持帖子简短。我认为我的声明和初始化是正确的,因为我有一个类似的测试,其中 2 个序列输入 2 个序列发生器正常工作。

我的问题是如何实现将相同序列驱动到 2 个或更多序列器的目标?

错误如下(没有添加完整的错误行):

uvm_test_top.m_env.m_my_agent_env.m_my_agent[1].m_seqr@@m_in_seq%0d[SEQ_NOT_DONE] Sequuence .... already started

标签: system-veriloguvm

解决方案


您需要为要开始的每个序列构造一个新对象。此外,您需要参考[idx]not [i]

my_sequencer m_seqr[2];
...
for(int i=0; i<2; i++) 
  fork
    int idx = i;
    my_sequence m_seq = my_sequence::type_id::create(...);
    
    m_seq.start(p_sequencer.m_seqr[idx];

  join_none 

推荐阅读