驱动两个不同序列的项目在一个界面
问题描述:
让说我只有一个接口和序列项的多个定义:驱动两个不同序列的项目在一个界面
class link_pkt extends uvm_sequence_item;
class phy_pkt extends uvm_sequence_item;
在测试过程中,这些项目可以动态地通过一个接口发送出去。
实现驱动程序/音序器的正确方法是什么?一个司机是否足够?或需要多个司机?
看来,由于序列项目的多重定义,我将需要多个驱动程序和音序器。但这并不好,因为我无法控制/仲裁传输。
有类似的情况here这是一种静态 - 我们不能动态地切换驱动程序。我需要的是我可以在一个测试/序列中动态地驱动这些不同的序列项目。
答
你想要看的是协议分层。您需要为每个协议都有一个序列发送器,将项目向下发送到每个较低层。在底部,您可以让您的驱动程序实际驱动DUT信号。
每个序运行所需要的,从高层项目转换到自己的项目翻译序列:
+-----------+
| link SEQR | <---- can start items here
+-----------+
|
| link 2 phys
v
+-----------+
| phys SEQR | <---- can also start items here
+-----------+
|
|
v
+-----------+
| phys DRV |
+-----------+
,您可以开始在两个序项目,使您能够在您选择的抽象级别上工作。定序器本身将负责确定优先级,并确保在物理界面上只驱动一个项目。
以下是你可以看看,以了解更多有关如何实现分层几个环节:
http://www.doulos.com/knowhow/sysverilog/uvm/easier_uvm_guidelines/layering/
我已经对话题here交谈。
你必须给我们更多的背景。这两种物品类型如何在同一界面上传输?它是一种什么样的串行接口,所有的位都被打包到一个流中并发送出去? – 2015-02-10 09:56:09
是的,接口是一种串行接口。这两个项目由不同的协议处理并转换成流比特并发送出去。 – AldoT 2015-02-10 10:04:28
准确地说,就协议而言,'link_pkt'高于'phys_pkt'。它可以分成几个'phys_pkt'。我需要能够灵活地发送任何项目。 – AldoT 2015-02-10 10:12:34