UVM验证方法学之Virtual Sequence和Virtual Sequencer

1. 简介

什么是虚拟sequencers和虚拟sequences,在什么时候使用它们?当我们需要使用多种驱动agents协调生成激励的测试用例,则需要使用虚拟sequences来完成。今天学习的这篇论文[1]充分详细的介绍了m_sequencerp_sequencer句柄以及与这些句柄一起使用的宏(`uvm_declare_p_sequencer)和方法。

2. 什么时候需要一个virtual sequencer?

如果只有一个激励驱动的 agent,则不需要virtual sequencer。如果你有多个驱动agent,但不需要激励之间的协调(在设计上是相互独立的),则不需要virtual sequencer。如果您有多个驱动 agent并且需要激励间的协调,则需要一个virtual sequencer。如果测试平台将来需要扩展成有多个agent,或者多个独立激励的测试平台需要设计成相互协调的激励,那么环境就要更新到包括一个或多个virtual sequencer。很明显在项目后期执行的这些更新可能会很痛苦(如果你对这个平台不了解),相反的如果从一开始就添加了virtual sequencer并在需要时利用虚拟sequencer就好多了。工程师可能要养成在大多数UVM测试台中添加virtual sequencers的习惯。

图片来源于论文

3. 为什么是“虚拟”的sequencers和sequences?

SystemVerilog具有虚拟类,虚[2]拟方法和虚拟接口,所有这三个都需要“ virtual”关键字。 UVM具有虚拟sequencers和虚拟sequences,但没有一个要求使用“virtual”关键字。 UVM中没有uvm_virtual_sequencer或uvm_virtual_sequence基类。所有sequencers和虚拟sequencers都是uvm_sequencer类的派生类,所有sequence和虚拟sequences都是uvm_sequence类的派生类。

4. 为什么虚拟的sequencers和sequences是虚拟的?

虚拟sequencers的三个属性是:

  • 控制其他sequencers。
  • 未连接到driver。
  • 本身不处理事务。

虚拟sequencer未连接到driver。 它不是通过sequencers端口在driver上执行单个sequence items,而是通过句柄到sub-sequencer目标执行sub-sequences和在sequencers上的sequence items。《UVM用户指南》有时将sub-sequences称为“driver-sequence”。 虚拟sequencer是“虚拟的”,因为通常我们不会真正在此sequencer上运行sequence,而是通过虚拟sequencer中定义的句柄在sub-sequencer上运行序列。

虚拟sequence可以在多个实际sequencers上运行多种事务类型。 虚拟sequence通常只是在适当的子sequencer上协调其他sequences的执行。

在vsqr中声明了2个sqr

5.三种virtual sequencer模式

《UVM用户指南》描述了用户可以使用虚拟sequence与sub-sequnecer进行交互的三种方式:(1)“Business as usual”(也称为产生并行流量,多条流交替),(2)关闭sub-sequencers,(3)使用grab()和 ungrab()。

《UVM用户指南》声称“大多数用户关闭sub-sequencers仅从虚拟sequence中调用sequences”,但是我们的经验以及许多验证同事的经验是,最流行的virtual sequencer模式是产生并行流量,也称为“Business as usual”。

6.如何实现virtual sequencers?

virtual sequencer只不过是一个组件,它提供了一个位置和作用域来配置virtual sequence,并为virtual sequence所需的子序列提供句柄。virtual sequencer的代码非常简单,它在构建完所有组件之后(在buildphase()之后),通常通过在env中的connectphase()中设置虚拟sequencer中声明的子序列句柄,这些子句柄将通过配置数据库(uvm_config_db)进行指定。

例1-简单的virtual sequencer

例1是virtual sequencer的典型结构。在此示例中,用户定义的类名称是vsequencer。 可以看出virtual sequencer是从uvm_sequencer扩展的。 与普通sequencer不同,例1的virtual sequencer没有参数化事务类型,因为该sequencer将能够执行多种事务类型。 从uvm_sequencer基类扩展virtual sequencer而没有任何参数意味着virtual sequencer将使用uvm_sequence_item的默认参数化值。

virtual sequencerz中要声明sub-sequencer句柄。 在例1中,sub-sequencer句柄分别称为ahb_sqr和eth_sqr。 这两个子sequencer句柄将在end_of_elaboration_phase()期间由配置数据库中指定的值分配。

与用于连接UVM测试平台中大多数组件的事务级模型&#x

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值