如何从记分板发送数据到序列

时间:2016-06-20 13:46:13

标签: uvm

我需要将记分板中的数据发送到我的阅读序列。最好的方法是什么。

我有内存读取序列,应该在写入序列完成后启动。 当写序列生成随机存储器写地址时,我需要在某处保留这些地址。写完序列完成后发送到读序列。 所以我在scorebaord中保留了这些地址,因为我在记分板中也需要该地址,以便稍后与读取数据进行比较。 现在我不知道如何从scorebaord发送数据到读取序列。 我使用put-get端口,但有点不喜欢我需要使用uvm_tlm_fifo连接它们的想法。 还有其他想法吗?

3 个答案:

答案 0 :(得分:0)

如果无法从写序列中收集数据(即写序列生成地址列表/队列),则让主/虚拟序列通过该数组读取序列

main_sequence { 

write_sequence.start( ...);
write_sequence.get_address_list(arr);
read_sequence.set_address_list(arr);
read_sequence.start(...);

}

我们可以尝试以下方法 -

1)列表可以存储在音序器中。由于序列发生器是代理的一部分,因此它可用于整个测试运行。即使它们是从单独的线程运行,它也将被提供给序列。 因此,这两个序列可以通过序列发生器进行通信。

write_sequence { 
  my_sequencer ;
  $cast(my_sequencer,m_sequencer);
  my_sequencer.set_address_list(arr);

}

read_sequence { 
  my_sequencer ;
  $cast(my_sequencer,m_sequencer);
  my_sequencer.get_address_list(arr);

}

2)如果你喜欢记分牌方法,你可以创建一个类来处理地址列表的获取和设置。该类可以在top-env中实例化,并连接到记分板。然后记分板可以使用该类来设置地址列表。 读取序列可以通过uvm_config_db获取此类的句柄,并使用它来获取地址列表。 [该类也被放入top-env中的uvm_config_db]。 在这种方法中,我们必须确保记分板在读取开始之前接收并处理地址。

答案 1 :(得分:0)

记分牌和音序器都是组件。最好通过TLM接口在这些组件之间进行通信。让记分板从分析端口广播一些信息,并让该端口连接到序列发生器中的TLM imp或fifo。

序列应该有一个指向自己的序列器的指针,称为p_sequencer。然后它可以等待FIFO从记分板收到信息。

TLM端口和fifos可能看起来很多开销,但它们是可重用性和可移植性的最佳选择。假设您有多个记分板向多个不同的序列发送数据?仅仅更改连接就可以启用这样的场景而无需修改任何其他内容。

答案 2 :(得分:0)

将数据从记分板发送到序列的想法违反了构建健壮的测试平台的一般原则。您应该做的是共享一个对象,该对象通过相应的定序器在写和读序列之间存储这些地址。为了使事情更简单,您还可以使用更高级别的序列来生成地址,并将该信息传递给读写序列。

相关问题