• 框图
  • 简单描述
    • driver
    • sequencer
    • sequence
    • sequence_item
  • 细节理解
    • 最初的验证平台只需要driver即可为什么还需要sequence机制
    • sequence机制的内部协议
    • sequence还有很多细节需要补充

试写,纯属看书个人理解;无任何实践经验。

框图

  1. sequence_item,负责定义事务,就是transaction;
  2. sequence,负责产生事务。注意sequence是uvm_object,不在UVM树形结构里,它要负责raise_objectiondrop_objection的工作,从而决定了仿真的结束$finish
  3. sequencer,负责事务相关请求的调度。sequence、sequencer、driver之间有一个完整的协议(这时由OVM之sequence机制的一篇网文了解的。类似总线的握手协议),需要遵守。这个协议,是由uvm内部的factory机制实现。
  4. driver,负责申请事务。另外还要负责事务到信号的转换。

简单描述

基于UVM实战的代码2.5.2章节。

driver

关键功能,都在task main_phase里。
1. 申请事务transaction。利用的TLM(Transaction Level Model),端口之类的原理。
2. 事务转化为信号级别。
3. 申请事务结束,表明事务处理完成。
4. 循环上述1~3步骤;表示申请下一个事务。注意:是个永久循环,因为driver,不同于uvm_object,不存在仿真生命周期,在仿真过程中,需要保持一直存在。

sequencer

  1. 只需要factory机制化,就可以了。背后的动作,暂时不考虑,按照OVM的说法,整个sequence机制有一套完整的以事务为接口的传输协议,sequencer只是一个调度者而已。uvm_component之间,就是以事务为单位互连的。

sequence

关键功能都在task body里。注意:sequence必须保证要有task body。
1. starting_phase.raise_objection;
2. uvm_do宏,发起事务给sequencer。
3.
starting_phase.drop_objection`;

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还有很多细节需要补充

  1. sequence负责事务的产生;
  2. sequencer负责sequence和driver之间的事务请求调度;
  3. sequencer可以并行执行多个sequence;
  4. sequencer可以按照优先级顺序执行多个sequence;也有lock、grab、is_relevant方式去按照顺序执行多个sequence。
  5. sequence的uvm_do宏,告知相关sequencer,已经有事务产生了。这个时候如果driver申请事务,sequencer就会把sequence的事务传给driver。
  6. sequence可以嵌套。意义是新建sequence时,可以利用已有sequence去构建;而不是非得用uvm_do宏定义。方便代码的实现和理解。
  7. 一个sequencer和一个driver,如何实现传输多种transaction事务?这个是由sequencer和driver类定义时的参数决定的。只需要参数写为uvm_sequence_item即可。这时,考虑driver的seq_item_port.get_next_item(req),req通过$case(your_tr,req)去判断请求的事务类型,是哪一种。
  8. 待续。。。

sequence_item、sequence、sequencer、driver的关系相关推荐

  1. UVM——Sequencer Driver

    driver和sequencer之间的通信方式采取get模式,即由driver发起请求,从sequencer一端获得item,再由sequencer将其传递至drive.driver只要可以从sequ ...

  2. bus,device,driver三者关系

    bus,device,driver三者关系 bus: 总线作为主机和外设的连接通道,有些总线是比较规范的,形成了很多协议.如 PCI,USB,1394,IIC等.任何设备都可以选择合适的总线连接到主机 ...

  3. UVM基础-Sequence、Sequencer(一)

    目录 Sequence.Sequencer.Driver大局观 Sequence和item item与sequence的关系 flat sequence hierarchical sequence s ...

  4. [UVM]UVM Sequence之Response的使用

    UVM Sequence之Response  前言:Sequence機制提供了一種Sequence -> Sequencer -> Driver的單向數據傳輸機制.但是在複雜的驗證平台中, ...

  5. UVM中的sequence

    sequence基础 1. 如果将激励放在driver的main_phase中,是可行的,但是如果要对激励作修改,那么扩展性较差,所以我们将激励改为放在sequence中去写. driver就负责驱动 ...

  6. UVM序列篇之一:新手上路

          声明:本人所有权属路科验证,本人仅为个人学习方便将文章整理至此. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 有了UVM的世界观,知道这座城市的建 ...

  7. uvm学习笔记----适合新手快速学习

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ofH8i8OK-1635320932444)(C:\Users\lenovo\AppData\Roaming\Typor ...

  8. UVM--sequence和item 序列通信

    1 新手上路 本节将主要围绕下面几个核心词, 阐述它们的作用. 分类以及相互之间的互动关系: •    sequence item •    sequence •    sequencer •     ...

  9. UVM和System verilog笔记总结

    UVM是一个方法,是一个平台.UVM-1.2平台提供了: uvm_test/env/sequence/sequencer/driver/monitor/agent. base/comp/tlm/seq ...

  10. UVM——sequence、sequencer、driver概述

    sequence.sequencer.driver关系 三者的关系如上图所示: - sequence产生目标数量的sequence item,并通过随机化使每一个sequence item对象的数据内 ...

最新文章

  1. nginx 的proxy_cache才是王道
  2. 包揽全球50%以上份额,中美发力超级计算
  3. 吴文俊AI最高成就奖颁给清华张钹院士,之前曾空缺七年
  4. java ntpudpclient_Java代码获取NTP服务器时间
  5. es6 --- 对任意对象部署可遍历接口
  6. 如何了解自己的认知偏差_了解吸引力偏差
  7. Python学习---面向对象的学习[深入]
  8. dj鲜生-通过邮箱发送加密的激活链接
  9. 中国开放教育资源协会_教育中的开放数据开始显示出真正的吸引力
  10. git(5)---Git 与Repo 管理Android代码
  11. SqlServer Convert函数 日期格式化
  12. 用Java发起HTTP请求与获取状态码(含状态码列表)
  13. 计算机主机故障有哪些,电脑硬件常见故障有哪些
  14. quarters自动编译生成sof
  15. Java 进阶 hello world! - 中级程序员之路
  16. 详解C语言实现植物大战僵尸阳光9999
  17. 唐都8254电子发声实验
  18. jQuery 选择器 选取第一个 p 元素
  19. [Kong 与 Konga 与 Postgres数据库] 之 Kuberneres 部署
  20. 程序员都逃不脱35岁失业的魔咒?

热门文章

  1. 票务网 php,电影票务网站的设计与制作
  2. 歌评-《胧月夜》-神前暁
  3. [转]你需要个人知识管理(PKM)吗?
  4. 读书笔记:“Python Programming: An Introduction to Computer Science”
  5. JAVAWEB开发之Hibernate详解(二)——Hibernate的持久化类状态与转换、以及一级缓存详解、关联关系的映射(一对多、多对多、级联)
  6. php免费开发环境搭建,Windows PHP 开发环境搭建
  7. iphonex蓝牙打不开转圈_多人反应iPhone X蓝牙连接时遇到问题
  8. 达梦数据库ZYJ实例安装初始化
  9. meta的http-equiv属性
  10. AcWing 292 炮兵阵地