UVM(九)之sequence机制

UVM(九)之sequence机制

如果说transaction是子弹的话,那么sequence无疑就是弹夹了。在整个的UVM验证平台中,sequence负责transaction的产生,并通过sequence发送给driver,driver则根据transaction里存储的信息产生激励。要产生不同的transaction,那么就要在sequence中下功夫。验证中要对DUT施加不同的激励,也就是施加不同的case,在UVM中,不同的case的差异主要是就是体现在sequence的不同上。通过控制sequence,可以完美的产生各种不同的激励。

sequence的另外一个重要的作用就是控制整个验证平台的关闭,

1. 激励信息的产生与驱动的分离

为了防止每次修改case而可能改变本身代码,所以需要将信息的产生独立实现。

2. 数据流的独立

UVM为了解决这个问题,引入了sequence机制,在解决的过程中还使用了factory机制,config机制。使用sequence机制之后,在不同的case中,把不同的sequence设置成sequencer的main_phase的default_sequence。当sequencer执行到main_phase时,发现有default_phase,那么他就会把这个sequence启动起来。

3. sequence的启动和执行

假设有如下的sequence定义:

那么启动一个sequence就应该这么做:

可见,要启动一个sequence非常简单,第一步就是把这个sequence给实例化,第二部就是调用sequence的start任务,调用时要传入sequencer参数。

4. 通过sequence控制验证平台的关闭

伴随着sequence机制的使用,数据流完全的独立出来了,但是一个新的问题产生了:driver中来raise_objection和drop_objection。现在,数据的产生从driver中完全的独立出去了,那么作为driver来说,它只负责从sequencer中索要transaction,如果索要到了那么就把这个transaction驱动到接口上,如果没有,那么就等在那里。也就是说driver失去了控制验证平台退出的能力。

raise_objection属于phase的一个函数,即我们只能采用如下方式调用此函数:phase.raise_objection(this);

而phase是属于component的一个概念,是component专属的东西,而sequence的本质是objection,是没有phase的,那么怎么办?这个问题其实非常简单,可以在uvm_sequence中添加一个指向phase的指针,然后当sequencer在main_phase中启动default_sequence时,把sequencer的main_phase中的phase赋值给sequence中这个指针,这样在sequence中就可以进行objection操作了。

原文发布于微信公众号 - 瓜大三哥(xiguazai_tortoise)

原文发表时间:2017-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Youngxj

[分享]危险命令拦截

1584
来自专栏ytkah

Sql批量修改帝国cms文章发布时间(需unix时间,否则会变为1970-01-01)

  在迁移网站时,有时我们需要将帝国cms文章发表时间批量修改为当前时间,在帝国cms后台→系统设置→备份与恢复数据→执行sql语句: update phome...

3207
来自专栏Java成神之路

重拾安卓_01_安卓开发环境搭建(android studio)

1033
来自专栏区块链入门

2018中国区块链行业分析报告-鲸准

本文由鲸准研究院出品,PDF下载地址如下: 链接: https://pan.baidu.com/s/1HRtqLM08ow_eJ47aSavBJQ 密码: f...

741
来自专栏别先生

plsql的汉化问题

1:汉化工具下载地址:https://www.allroundautomations.com/bodyplsqldevreg.html ? 汉化吗。然后选择ch...

2185
来自专栏网站漏洞修补

ecshop全系列版本网站漏洞修复 清理网站木马后门

ecshop漏洞于2018年9月12日被某安全组织披露爆出,该漏洞受影响范围较广,ecshop2.73版本以及目前最新的3.0、3.6、4.0版本都受此次ecs...

4741
来自专栏ios 技术积累

等待开发者发布的App如何构建版本

今天遇到一个问题,开发的一个处于“等待开发者发布”的状态,突然发现有bug,需要重新提交一个版本。现把流程记录一下:

1492
来自专栏LinXunFeng的专栏

解决fatal: The remote end hung up unexpectedly

1555
来自专栏kevin-blog

linux下实现计划任务的方法

2.如果要设置周期性任务,可以用crontab命令来完成,“crontab -e”编辑cron表,“crontab -l”查看当前cron表,“crontab ...

870
来自专栏性能与架构

用Redis实现锁机制的简单方法

看redis文档时,看到一个官方示例,就是使用redis来实现资源锁,思路简单实用 实现方式 1 加锁 使用SET命令实现 SET 资源名 '随机token...

3447

扫码关注云+社区

领取腾讯云代金券