在一个界面中驱动两个不同的序列项
Driving two different sequence items in one interface
假设我只有一个接口和序列项的多个定义:
class link_pkt extends uvm_sequence_item;
class phy_pkt extends uvm_sequence_item;
在测试的时候,这些项目可以通过那个接口动态的传出去。
实施driver/sequencer的正确方法是什么?一个 driver 够吗?还是需要超过一 driver?
看来因为sequence item定义了多个,所以我会需要不止一个driver和sequencer。但这并不好,因为我不能control/arbitrate传输。
有一个类似的情况 here,它是一种静态的 - 我们不能即时切换 driver。我需要的是我可以在一个 test/sequence.
中动态驱动那些不同的序列项
这里你要看的是协议分层。您需要为每个协议都有一个排序器,将项目向下发送到每个较低层。在底部,您将拥有实际驱动 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。
假设我只有一个接口和序列项的多个定义:
class link_pkt extends uvm_sequence_item;
class phy_pkt extends uvm_sequence_item;
在测试的时候,这些项目可以通过那个接口动态的传出去。
实施driver/sequencer的正确方法是什么?一个 driver 够吗?还是需要超过一 driver?
看来因为sequence item定义了多个,所以我会需要不止一个driver和sequencer。但这并不好,因为我不能control/arbitrate传输。
有一个类似的情况 here,它是一种静态的 - 我们不能即时切换 driver。我需要的是我可以在一个 test/sequence.
中动态驱动那些不同的序列项这里你要看的是协议分层。您需要为每个协议都有一个排序器,将项目向下发送到每个较低层。在底部,您将拥有实际驱动 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。