uvm之virtual sequence机制

来源:互联网 发布:淘宝店铺运营案例 编辑:程序博客网 时间:2024/06/05 09:02

  • 背景
  • 实现步骤
  • 细节分析

背景

《uvm实战》书上介绍的uvm验证平台,往往只有一个in_agent(即包括driver、in_monitor和sequencer)。

然而,一个agent代表一种协议。
由sequence机制的简单理解,可以知道,1个sequencer负责多个sequence的顺序调度。如果出现多个driver或者多个sequencer,必然出现顺序执行的调度问题。

举个例子,一个IP,包括APB寄存器配置接口、AXIslaver数据接口、AXImaster数据接口。像这样的IP,搭建其验证平台,往往需要3个in_agent;于是出现了3个driver、3个sequencer,另外还有N个sequence。(类似IP env环境,重用到Chip env环境里。)

virtual sequence机制,就是为了解决N个sequence、多个sequencer同时调度的冲突问题。

这里写图片描述

实现步骤

  • 定义virtual sequencer,里面包含各个env里的sequencer类型的指针。
  • base_test作为uvm_test_top,即uvm树形结构的最顶层。负责chip_env和virtual sequencer的规划。
    • 实例化virtual sequencer;
    • virtual sequencer与各env的sequencer连接在一起,具体实现是通过function connect_phase对virtual sequencer的指针,赋值为各个env的sequencer实例层次。
  • 定义virtual sequence。
    • 多个sequence的实例化
    • 利用`uvm_do_on类型宏,实现指定某个sequencer(这个由vritual sequencer的`uvm_declare_p_sequencer宏和p_sequencer公共变量来指定)负责各个sequence的顺序调度。
      注意:`uvm_do这样的宏,针对的处理对象,不仅仅是transaction,还可以处理sequence。
  • 在my_case0类似的case定义中,使用uvm_config_db方式实现virtual sequencer和virtual sequence的default_sequence设置。

细节分析

  1. base_test类里,实例化virtual sequencer。并在其function connect_phase里实现virtual sequencer的指针(其中,virtual sequencer类里定义sequencer的指针)与各env(envA、envB、envC)的sequencer层次连接在一起。
  2. sequence里组织事务的产生。其中virtual sequence里组织的是sequence的顺序调度。所以,在uvm验证平台里,有一个现象,sequence类的参数类型是my_transaction;而virtual sequence类的定义是没有参数的。
  3. virtual sequence里负责start_phase的raise_objection和drop_objection,避免不必要的重复定义。这是uvm实战里约定的。其中drop_objection代码注释后,可以使验证平台不自动$finish。
  4. 4.
0 0
原创粉丝点击