sequence_item、sequence、sequencer、driver的关系
- 框图
- 简单描述
- driver
- sequencer
- sequence
- sequence_item
- 细节理解
- 最初的验证平台只需要driver即可为什么还需要sequence机制
- sequence机制的内部协议
- sequence还有很多细节需要补充
试写,纯属看书个人理解;无任何实践经验。
框图
- sequence_item,负责定义事务,就是transaction;
- sequence,负责产生事务。注意sequence是uvm_object,不在UVM树形结构里,它要负责
raise_objection
和drop_objection
的工作,从而决定了仿真的结束$finish
。 - sequencer,负责事务相关请求的调度。sequence、sequencer、driver之间有一个完整的协议(这时由OVM之sequence机制的一篇网文了解的。类似总线的握手协议),需要遵守。这个协议,是由uvm内部的factory机制实现。
- driver,负责申请事务。另外还要负责事务到信号的转换。
简单描述
基于UVM实战的代码2.5.2章节。
driver
关键功能,都在task main_phase里。
1. 申请事务transaction。利用的TLM(Transaction Level Model),端口之类的原理。
2. 事务转化为信号级别。
3. 申请事务结束,表明事务处理完成。
4. 循环上述1~3步骤;表示申请下一个事务。注意:是个永久循环,因为driver,不同于uvm_object,不存在仿真生命周期,在仿真过程中,需要保持一直存在。
sequencer
- 只需要factory机制化,就可以了。背后的动作,暂时不考虑,按照OVM的说法,整个sequence机制有一套完整的以事务为接口的传输协议,sequencer只是一个调度者而已。uvm_component之间,就是以事务为单位互连的。
sequence
关键功能都在task body里。注意:sequence必须保证要有task body。
1. starting_phase.raise_objection
;
2. uvm_do宏,发起事务给sequencer。
starting_phase.drop_objection`;
3.
sequence_item
负责定义各种各样的transaction
1. rand变量定义;
2. constraint约束定义;
3. 字段注册。目的是使得各个事务transaction都可以使用下述函数,比如copy/print/compare/pack/unpack等等。
细节理解
最初的验证平台,只需要driver即可,为什么还需要sequence机制?
如果事务在driver里定义,会产生一个问题。比如事务种类繁多,岂不是每次启动一个事务,都要修改driver的main_phase代码部分。
如果定义多个driver,那么会把UVM树形结构搞的乱七八糟。
所以,要从driver里剥离,事务产生(具体包括事务定义、事务产生的步骤)的代码部分。driver只负责事务驱动即可。
补充一句,验证的case_list,是用sequence机制去实现的;并保证了UVM树形结构的单一性、统一性。使得可维护的能力大大加强。
上述解释,也是sequence和sequence_item不属于uvm_componet
的原因。case相关的代码改动,都在sequence和sequence_item里实现。
sequence机制的内部协议
还没做。。
下面是plantuml画图工具的源码,借此备份一下。
@startuml
scale 500*500driver -> sequencer: seq_item_port.get_next_item(req) ,申请事务
sequence -> sequencer:
driver -> dut: 事务转换为信号,驱动DUT
driver -> sequencer: seq_item_port.item_done()caption figure uvm sequence机制
@enduml
sequence还有很多细节需要补充
- sequence负责事务的产生;
- sequencer负责sequence和driver之间的事务请求调度;
- sequencer可以并行执行多个sequence;
- sequencer可以按照优先级顺序执行多个sequence;也有lock、grab、is_relevant方式去按照顺序执行多个sequence。
- sequence的uvm_do宏,告知相关sequencer,已经有事务产生了。这个时候如果driver申请事务,sequencer就会把sequence的事务传给driver。
- sequence可以嵌套。意义是新建sequence时,可以利用已有sequence去构建;而不是非得用uvm_do宏定义。方便代码的实现和理解。
- 一个sequencer和一个driver,如何实现传输多种transaction事务?这个是由sequencer和driver类定义时的参数决定的。只需要参数写为
uvm_sequence_item
即可。这时,考虑driver的seq_item_port.get_next_item(req)
,req通过$case(your_tr,req)
去判断请求的事务类型,是哪一种。 - 待续。。。
sequence_item、sequence、sequencer、driver的关系相关推荐
- UVM——Sequencer Driver
driver和sequencer之间的通信方式采取get模式,即由driver发起请求,从sequencer一端获得item,再由sequencer将其传递至drive.driver只要可以从sequ ...
- bus,device,driver三者关系
bus,device,driver三者关系 bus: 总线作为主机和外设的连接通道,有些总线是比较规范的,形成了很多协议.如 PCI,USB,1394,IIC等.任何设备都可以选择合适的总线连接到主机 ...
- UVM基础-Sequence、Sequencer(一)
目录 Sequence.Sequencer.Driver大局观 Sequence和item item与sequence的关系 flat sequence hierarchical sequence s ...
- [UVM]UVM Sequence之Response的使用
UVM Sequence之Response 前言:Sequence機制提供了一種Sequence -> Sequencer -> Driver的單向數據傳輸機制.但是在複雜的驗證平台中, ...
- UVM中的sequence
sequence基础 1. 如果将激励放在driver的main_phase中,是可行的,但是如果要对激励作修改,那么扩展性较差,所以我们将激励改为放在sequence中去写. driver就负责驱动 ...
- UVM序列篇之一:新手上路
声明:本人所有权属路科验证,本人仅为个人学习方便将文章整理至此. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 有了UVM的世界观,知道这座城市的建 ...
- uvm学习笔记----适合新手快速学习
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ofH8i8OK-1635320932444)(C:\Users\lenovo\AppData\Roaming\Typor ...
- UVM--sequence和item 序列通信
1 新手上路 本节将主要围绕下面几个核心词, 阐述它们的作用. 分类以及相互之间的互动关系: • sequence item • sequence • sequencer • ...
- UVM和System verilog笔记总结
UVM是一个方法,是一个平台.UVM-1.2平台提供了: uvm_test/env/sequence/sequencer/driver/monitor/agent. base/comp/tlm/seq ...
- UVM——sequence、sequencer、driver概述
sequence.sequencer.driver关系 三者的关系如上图所示: - sequence产生目标数量的sequence item,并通过随机化使每一个sequence item对象的数据内 ...
最新文章
- nginx 的proxy_cache才是王道
- 包揽全球50%以上份额,中美发力超级计算
- 吴文俊AI最高成就奖颁给清华张钹院士,之前曾空缺七年
- java ntpudpclient_Java代码获取NTP服务器时间
- es6 --- 对任意对象部署可遍历接口
- 如何了解自己的认知偏差_了解吸引力偏差
- Python学习---面向对象的学习[深入]
- dj鲜生-通过邮箱发送加密的激活链接
- 中国开放教育资源协会_教育中的开放数据开始显示出真正的吸引力
- git(5)---Git 与Repo 管理Android代码
- SqlServer Convert函数 日期格式化
- 用Java发起HTTP请求与获取状态码(含状态码列表)
- 计算机主机故障有哪些,电脑硬件常见故障有哪些
- quarters自动编译生成sof
- Java 进阶 hello world! - 中级程序员之路
- 详解C语言实现植物大战僵尸阳光9999
- 唐都8254电子发声实验
- jQuery 选择器 选取第一个 p 元素
- [Kong 与 Konga 与 Postgres数据库] 之 Kuberneres 部署
- 程序员都逃不脱35岁失业的魔咒?
热门文章
- 票务网 php,电影票务网站的设计与制作
- 歌评-《胧月夜》-神前暁
- [转]你需要个人知识管理(PKM)吗?
- 读书笔记:“Python Programming: An Introduction to Computer Science”
- JAVAWEB开发之Hibernate详解(二)——Hibernate的持久化类状态与转换、以及一级缓存详解、关联关系的映射(一对多、多对多、级联)
- php免费开发环境搭建,Windows PHP 开发环境搭建
- iphonex蓝牙打不开转圈_多人反应iPhone X蓝牙连接时遇到问题
- 达梦数据库ZYJ实例安装初始化
- meta的http-equiv属性
- AcWing 292 炮兵阵地