0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析UVM中的Virtual Sequences

芯片验证工程师 来源:芯片验证工程师 2023-06-20 09:28 次阅读

在一个系统级的验证环境中,多个验证组件并行地产生激励。测试用例开发者可能希望协调多个通道激励之间的时序和数据。

Virtual sequences与virtual sequencer相关联,用于协调测试平台中的激励生成。一般来说,一个virtual sequencer包含对其子sequencer的引用,即driver sequencers或其他virtual sequencers。

Virtual sequences可以调用其他virtual sequences,以及每个子sequencer中的sequences(driversequences)。

在下图中,virtual sequencer在ethernetcpu验证组件上调用配置sequences。这些配置sequences是在模块级测试期间开发的,可以在系统级测试时复用

f9662d78-0eab-11ee-962d-dac502259ad0.png

有三种方式可以让virtual sequencer与它的subsequencers交互:

Virtual sequencers和subsequencers同时发送激励。

禁用subsequencers。Virtualsequencers是唯一的驱动。

使用grab()和ungrab()--Virtualsequencers在有限的时间内控制激励发送。

当使用virtual sequences时,大多数测试用例开发用户都会只从virtual sequences中调用sequences。要调用sequences,需要执行以下操作之一:

使用'uvm_do宏 。

使用sequence start()方法。

创建一个Virtual Sequencer

为了从一个sequencer中对多个sequencers进行控制,可以使用一个不附属于driver的sequencer,这就是virtual sequencer。要创建一个virtual sequencer,需要:

从uvm_sequencer类派生出一个virtual sequencer类。

在virtual sequencer中添加对其他subsequencer的指针(在更高层次的验证组件(通常是top-level environment)中)。

下面的例子声明了一个有两个subsequencers的virtual sequencer。

f99fd1ea-0eab-11ee-962d-dac502259ad0.png

Subsequencers可以是driver sequencers或其他virtual sequencers。

创建一个Virtual Sequence

要创建一个virtual sequence:

从uvm_sequence派生出一个sequence类。

定义一个body()方法。

使用`uvm_ do_on(或` uvm_do_on_with)宏来调用subsequencers的sequences。

使用`uvm_do(或`uvm_do_with)宏来调用当前virtual sequencer中的其他virtual sequences。

一个virtual sequence不能使用`uvm_do或`uvm_do_with来执行数据项的发送,只能执行sequences。

下面的例子显示了一个简单的virtual sequence控制两个subsequencers:cpu sequencerethernet sequencer。假设cpu sequencer有 一 个 cpu_config_seq sequence,ethernet sequencer有一个 eth_large_payload_seq序列。

f9d01e7c-0eab-11ee-962d-dac502259ad0.png

f9d75e80-0eab-11ee-962d-dac502259ad0.png

控制其他Sequencers

当使用virtual sequencer时,需要考虑subsequencers和virtualsequence之间的关系。有三种典型的可能性:

virtual sequencer和subsequencers同时产生激励。subsequencers产生的数据项和virtual sequencer产生的数据项被混合在一起,并由driver以任意顺序执行。

禁用subsequencers。使用uvm_config_db::set将subsequencers的default_sequence属性设置为null。

fa0449a4-0eab-11ee-962d-dac502259ad0.png

使用grab()/lock()和ungrab()/unlock()。在这种情况下,一个virtual sequence可以在有限的时间内实现对其subsequencers的完全控制,然后让原始sequences继续工作。grab和lock防止其他sequence在被锁定的sequencer上被执行。

grab()方法将lock request放在sequencer仲裁队列的头部,允许调用者阻止当前等待授予的数据项被处理,而lock()方法将lock request放在队列的末端,允许数据项在授予lock之前被处理。

fa35d5e6-0eab-11ee-962d-dac502259ad0.png

将Virtual Sequencer连接到Subsequencers上

要连接一个virtual sequencer和它的subsequencers,需要在验证环境的connect()phase将sequencer的实例赋值给virtual sequencer中指定的sequencer指针。

v_sequencer.cpu_seqr = cpu_seqr; 
v_sequencer.eth_seqr = eth_seqr;

下面这个例子显示了一个top-level environment,它实例化了ethernet和cpu验证组件以及控制这两个组件的virtual sequencer。

在top-level environment中,各个组件内部的sequencers的路径是已知的,可以根据该路径将sequencers连接到virtual sequencer上。

fa427ab2-0eab-11ee-962d-dac502259ad0.png





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 连接器
    +关注

    关注

    96

    文章

    12655

    浏览量

    133145
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18972
  • sequence
    +关注

    关注

    0

    文章

    23

    浏览量

    2807

原文标题:UVM中的Virtual Sequences

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    IC验证"UVM验证平台"组成(三)

    model)。一个简单的验证平台框图:在UVM,引入了agent和sequence的概念,因此UVM验证平台的典型框图长这样:通知:本章更新后在更新一篇《IC验证之
    发表于 12-02 15:21

    IC验证"一个简单的UVM验证平台"是如何搭建的(六)

    数据,再通过txd发送出去。其中rx_dv是接收的数据有效指示,tx_en是发送的数据有 效指示。这里所有例子都是基于这个DUT。UVM的driver应该如何搭建?UVM是一个库,在这个库
    发表于 12-04 15:48

    IC验证"UVM验证平台加入factory机制"(六)

    平台,因为UVM的特性几乎一 点都没有用到。像上节my_driver的实例化及drv.main_phase的显式调用,即使不使用UVM,只使用简单的SystemVerilog也可以完 成。本节将会
    发表于 12-08 12:07

    IC验证“UVM验证平台加入objection机制和virtual interface机制“(七)

    在上一节,**《IC验证"UVM验证平台加入factory机制"(六)》**虽然输出了“main_phase is called”,但是“data is drived”并没有
    发表于 12-09 18:28

    数字IC验证之“什么是UVM”“UVM的特点”“UVM提供哪些资源”(2)连载...

    原文链接:https://zhuanlan.zhihu.com/p/345775995大家好,我是一哥,上章内容主要讲述两个内容,芯片验证以及验证计划。那本章我们主要讲述的内容有介绍什么是uvm
    发表于 01-21 16:00

    什么是uvmuvm的特点有哪些呢

    直观的印象,就是uvm验证平台,它是分层的结构。图中的每一个巨型框都代表着平台的一个构成元素。这些元素呢,我们称为平台组建,下面来简单的分析一下。从最底层上来看,agent 包含了driver,monitor和sequencer,其中driver ,monitor
    发表于 02-14 06:46

    UVM sequence分层有哪几种方式呢

    ; i< u_item.num_items; i++)`uvm_send(u_item.item)endtask : bodyendclass: upper_env_item_seq在上面的例子
    发表于 04-11 16:37

    请问一下在UVM的UVMsequences是什么意思啊

    UVM方法学,UVMsequences 是寿命有限的对象。UVM sequencesuvm_sequence_item基类扩展得到,
    发表于 04-11 16:43

    UVM sequence分层的几种体现

    sequencer,因为sequencer属于静态的UVM组件,属于平台型的内容,不可能每一个用例都需要创建一个sequencer。这里的例外就是virtual sequencer,因为某些
    发表于 04-14 11:08

    谈谈UVMuvm_info打印

    uvm_report_enabled(xxx),会分析传过来的severity和id的配置verbosity要大于传过来的verbosity,(get_report_verbosity_level(severity, id
    发表于 03-17 16:41

    UVMseq.start()和default_sequence执行顺序

      1. 问题  假如用以下两种方式启动sequence,方法1用sequence的start()方法启动seq1,方法2用UVM的default_sequence机制启动seq2。那么seq1
    发表于 04-04 17:15

    virtual sequence和virtual sequencer的操作步骤

    对于初入行的验证工程师,理解和搭建UVM验证环境是很重要的,而其中,virtual sequence的机制又是很有用很重要的一部分。本文希望通过了一些问题的回答,以及一个相对完整的结构帮助经验尚浅的工程师理清思路。
    发表于 09-15 10:33 6次下载
    <b class='flag-5'>virtual</b> sequence和<b class='flag-5'>virtual</b> sequencer的操作步骤

    浅析UVM不同机制的调试功能

    作为UVM的用户,我们需要相信在绝大部分情况下这些机制本身是没有问题的。因此,从顶层获得有效的调试信息就非常关键,比起潜入到内部要高效得多。 这也是本文的目的,盘点UVM针对不同机制提供给用户
    的头像 发表于 02-14 16:23 997次阅读
    <b class='flag-5'>浅析</b><b class='flag-5'>UVM</b>不同机制的调试功能

    为什么需要使用virtual,不用可不可以?

    UVM或者SV中,经常会碰到被virtual修饰的 class、sequence、sequencer、interface、function,不
    的头像 发表于 06-16 11:34 939次阅读

    如何将sequences类型添加或注册到sequence library里呢?

    uvm_sequence_library是从uvm_sequence扩展而来的,它是一个容纳了一系列其它sequences类型的容器,在启动时,它会根据模式从这系列sequences
    的头像 发表于 09-08 15:06 372次阅读
    如何将<b class='flag-5'>sequences</b>类型添加或注册到sequence library里呢?