3

假设我只有一个接口和多个序列项定义:

class link_pkt extends uvm_sequence_item;
class phy_pkt  extends uvm_sequence_item;

在测试过程中,这些项目可以通过该接口动态传输出去。

实现驱动程序/定序器的正确方法是什么?一个司机够吗?还是需要多个驱动程序?

似乎由于序列项的多个定义,我将需要不止一个驱动程序和定序器。但这不好,因为我无法控制/仲裁传输。

这里有类似的情况,这是一种静态 - 我们不能即时切换驱动程序。我需要的是我可以在一个测试/序列中动态驱动那些不同的序列项。

4

1 回答 1

3

你想在这里看到的是协议分层。您需要为每个协议提供一个定序器,将项目向下发送到每个较低层。在底部,您将拥有实际驱动 DUT 信号的驱动程序。

每个音序器都需要运行一个翻译序列,将更高层的项目转换为自己的项目:

+-----------+
| link SEQR |   <---- can start items here
+-----------+
      |
      |    link 2 phys
      v
+-----------+
| phys SEQR |   <---- can also start items here
+-----------+
      |
      |
      v
+-----------+
| phys DRV  |
+-----------+

您可以在两个排序器上启动项目,这使您能够在您选择的抽象级别上工作。定序器本身会处理优先级,并确保在物理界面上只驱动一个项目。

您可以查看以下几个链接以了解有关如何实现分层的更多信息:

http://verificationhorizo​​ns.verificationacademy.com/volume-7_issue-3/articles/stream/layering-in-uvm_vh-v7-i3.pdf

http://www.doulos.com/knowhow/sysverilog/uvm/easier_uvm_guidelines/layering/

我已经在这里讨论过这个话题。

于 2015-02-10T12:35:57.100 回答