sequence_item、sequence、sequencer、driver的关系

2023-11-01

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

框图

这里写图片描述

  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*500

driver   -> 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. 待续。。。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sequence_item、sequence、sequencer、driver的关系 的相关文章

  • 文章UVM and C – Perfect Together的解读与思考

    解读UVM and C Perfect Together 文章获取方式 xff1a 路科验证 gt 资源 gt DVCon2018 USA zip gt 08 3 http rockeric com resource paper 文章主要内
  • APB协议UVM验证环境的搭建

    APB协议UVM验证环境的搭建 一 编译文件 只需编译这两个文件即可 apb pkg sv 里面包含了 apb svh 即编译apb pkg sv这个文件的同时 也会编译所需要的所有的头文件 ifndef APB PKG SV define
  • UVM的构造函数new的个人理解

    构造函数new 自己总结的规律 理解 结合UVM实战这本书的阅读理解 归纳一下自己对new函数的个人理解 只是书本前几章阅读后的认知 还不能完善 在此只为记录防丢失 构造函数new 一般类的实例化 包含类的声明和类的构造 比如 my dri
  • UVM中的phase机制

    5 1 phase机制 5 1 1 task phase与function phase UVM中的phase 按照其是否消耗仿真时间 time打印出的时间 的特性 可以分成两大类 一类是function phase 如build phase
  • vcs覆盖率选项

    vcs中常用的收集覆盖率选项如下 1 cm dir
  • 说一说system verilog内建函数$value$plusargs()

    在学习system verilog的时候遇到了一个长的很奇怪的函数 奇怪到啥程度 别的函数都是一个 xxx 这个函数一次来了两个 长的虽然奇怪 但是这个函数的作用很大 首先看一下它的基本格式 value plusargs user stri
  • sequence_item、sequence、sequencer、driver的关系

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

    1 uvm自带的打印信息国语繁重 不利于debug uvm info TESTCASE sformatf my case0 new UVM DEBUG UVM INFO home zl Desktop uvm study template
  • uvm之寄存器模型

    寄存器模型的意义 寄存器模型的搭建 寄存器模型的FAQ 寄存器模型的意义 寄存器模型 字面理解 跟参考模型类似 就是为工程里的寄存器提供一个参考模型 这个模型里 包括各个寄存器字段描述 寄存器 寄存器组 寄存器地址映射等信息 有如下好处 寄
  • UVM::phase的run order

    1 build time bulid connect end of elaboration 2 run time start of simulation run run有分为 pre reset reset post reset pre c
  • UVM环境(env)树形结构

    UVM验证环境的组成 sequencer 负责将数据转给 driver driver 负责数据的 发送 driver 有时钟 时序的概念 agent 其实只是简单的把 driver monitor 和 sequencer 封装在一起 age
  • UVM 寄存器内建测试序列(built-in sequences)

    原文链接 https blog csdn net qq 42419590 article details 121487295 UVM 寄存器内建测试序列 built in sequences 不少有经验的UVM用户可能会忽略UVM针对寄存器
  • Verdi之nTrace/nSchema

    目录 3 nTrace介绍 3 1 启动Verdi 3 2查看Verdi中的设计结构 3 3查看Verdi中的验证结构 3 4 查找模块和trace信号 3 5 查找string 3 6 信号drive load 3 7 快速查看设计有哪些
  • 验证网站列表,持续更新中...

    verificationacademy com verificationguide com chipverify com https www runoob com w3cnote verilog2 sdf html https www th
  • IC验证工程师工作一周年的体会

    转眼之间自己已经工作一周年了 作为一名验证工程师 这一年里面感觉自己虽然有了一定的成长 但是成长的还是比较缓慢的 接下来从个人的角度说说我现在对从IC验证的一些体会 一 要养成良好的工作习惯 1 自己在工作中发现很多时候都是可以偷懒的 有时
  • 电力电子转战数字IC——我的IC面试(2022.10.14更新)

    目录 感谢信 HKWS10 14面试 25mins JXC10 13面试 30mins JDSK9 23面试 42mins 快速的自我介绍 介绍一下这个MCDF的项目 你这里写SV搭建的验证环境 和UVM搭建的有什么区别吗 你这里写了覆盖率
  • uvm的config_db

    config db 是用于在各个uvm对象里传递参数 一般参数类型 是interface int等 据说参数必须是静态类型 这个可以在uvm config db相关代码里确认 后来知道 config db还能设置sequence和seque
  • SV 或 UVM 中的正则表达式

    我需要调用哪些函数才能在 Systemverilog UVM 中使用正则表达式 注意 我不是问如何使用正则表达式 只是问方法名称 首先 如果您想使用正则表达式 您需要确保您使用的是与其 DPI 代码一起编译的 UVM 库 即UVM NO D
  • UVM 测试平台 - 将两个不同驱动程序连接到同一接口的“UVM”方式是什么?

    在我的测试平台中 我有一个需要驱动的接口 该接口可以以两种不同的模式驱动 每种模式都有自己的驱动程序协议和事务类型 到目前为止 我已经分别设计了两个 uvm agents 现在 我需要一种方法来交换其中一个或另一个 具体取决于我正在运行的测
  • 从测试台访问 uvm_config_db 的最佳方式?

    我想在我的顶级测试平台中创建一个时钟 其周期可以通过测试进行控制 我所做的是将周期设置到 uvm config db 中并将其返回到测试台中 我必须输入 1 以确保构建阶段已完成 否则 get 返回错误值 module testbench

随机推荐

  • nginx try_files用法 及Nginx location的一些配置

    实例 Yii2推荐ngnix try files配置 location try files uri uri index html args 找指定路径下文件 如果不存在 则转给哪个文件执行 try files 语法 try files fi
  • Java 内存模型(JMM),一看就懂 清晰明了

    一 线程私有的内存区域 1 程序计数器 当前线程所执行的字节码的行号指示器 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 它是程序控制流的指示器 2 虚拟机栈 线程调用 Java 方法时 每个方法每次调用都会
  • 基于形状的模板匹配来寻找稍微变形的图像

    方案 直接用整幅图像做模板匹配 下面是过程 原图 创建模板 下图是模板的轮廓 需要识别的图像 识别结果 代码 dev update off read image ModelImage food cocoa package model dev
  • Java 运行jar包变更配置文件与变量

    文章目录 前言 实现原理 不同环境的配置文件 变更配置变量 前言 为实现快速搭建和开发 项目以Springboot框架搭建 springboot搭建的项目可以将项目直接打成jar包并运行 无需自己安装配置Tomcat或者其他服务器 是一种方
  • 李宏毅2023机器学习作业HW03解析和代码分享

    ML2023Spring HW3 相关信息 课程主页 课程视频 Kaggle link Sample code HW03 视频 HW03 PDF 个人完整代码分享 GitHub Gitee GitCode P S 即便 kaggle 上的时
  • 我的C++学习日志

    安装Mac上的C 编辑器 clang cmake 安装方法 Xnode shell 编译 方法 在Mac上设置iTerm 设置方法 写出第一个 Hello World 的程序 学习计划 听youtube视频 阅读c primer
  • s5pv210-uboot移植前言

    最近找工作 买了块飞凌的ok210 使用s5pv210的开发板 但是最重要的nandflash居然不开源 很恼火 于是想从头自己在这个板子上开发 计划这个工作做两年 看看两年的业余时间到底能够搞出点什么东西出来 感觉难度应该很大 但是应该可
  • JDK17遇到报错 module java.base does not “opens java.util“ to unnamed module 问题解决

    在Java 9及以上版本运行应用程序时 在各种情况下都会发生此异常 详细可以参考 module java base does not opens java lang to unnamed module 滔天蟹 博客园 https www c
  • SpringSecurity学习笔记(四)注销登录、获取用户数据

    参考视频 编程不良人 注销登录 默认情况下 如果我们已经登录了 然后get方式访问 logout接口就会注销登录 下次再访问受限资源就会提示我们重新登录 我们可以在ss过滤器的配置里面添加下面的配置 and logout logoutUrl
  • tensorflow 运行时候遇到 Error in `python': double free or corruption (fasttop)

    参考https github com tensorflow tensorflow issues 6968 我是用pip install no binary all force reinstall numpy 解决的
  • 20171007离线赛总结

    考试时的思路 第一题先循环水一个80分出来 第二题先水70分 再用倍增枚举每一个坦克对应的下一个坦克 第三题直接上DFS 能拿多少拿多少 题解 第一题 S数 这道题 我打了个表 然后用二分法来做 记录每个答案的位置 即可得解 但是最后时间不
  • IDE/mingw下动态库(.dll和.a文件)的生成和部署使用(对比MSVC下.dll和.lib)

    文章目录 概述 问题的产生 基于mingw的DLL动态库 基于mingw的EXE可执行程序 Makefile文件中使用Qt库的 a文件 mingw下的 a 文件 和 dll 到底谁起作用 小插曲 mingw 生成的 a文件到底是什么 为啥m
  • jquery easyui combobox加载数量过多引起渲染页面缓慢问题

    有些时候 当我们用easyui combobox控件加载页面数据的时候 由于数据量过多 几千几万 而且如果操作频繁的话 进而会引起需要加载半天才能去打开下拉面板 还有可能卡死 其实这种问题主要时间浪费在了渲染下拉面板上面 作者在遇到这种问题
  • linux内核-网络

    网络栈 linux内核网络协议栈架构分析 全流程分析 干货 舞起勿忘的博客 CSDN博客 内核协议栈 https blog csdn net yming0221 column info linux kernel net netfilter的
  • Scala作业(9)---模式匹配&&&高阶函数

    模式匹配 1 利用模式匹配 编写一个swap函数 接受一个整数的对偶 返回对偶的两个组成部件互换位置的新对偶 下面是使用模式匹配编写的 swap 函数 接受一个整数的对偶 返回对偶的两个组成部分互换位置的新对偶 def swap pair
  • 【零基础 快速学Java】韩顺平 p156-170 数组、3种初始化、赋值机制

    数组 数组可以存放多个同一类型的数据 数组也是一种数据类型 是引用类型 即 数组就是一组数据 使用方法 使用方式1 动态初始化 使用方式2 动态初始化 使用方式3 静态初始化 注意事项 数组赋值机制 值传递 VS 引用传递 jvm的内存 栈
  • Redis第二十九讲 Redis集群发布订阅模式以及Redis集群事务

    Redis集群状态下的发布订阅 在Redis的几个基本数据结构介绍中 有讲过List数据结构 可以使用List的阻塞特性实现订阅消费 关于Redis的底层数据结构可以参考我的这篇博客 Redis第六讲 Redis之List底层数据结构实现
  • vue中使用vconsole

    Vue中使用vconsole npm install vconsole 新建 vconsole js 文件 在文件中写入 import Vconsole from vconsole const vConsole new Vconsole e
  • ToList()所带来的性能影响

    原文 ToList 所带来的性能影响 前几天优化师弟写的代码 有一个地方给我留下很深刻的印象 就是我发现他总是将PLINQ的结果ToList lt gt 然后再返回给主程序 对于这一点我十分不解 于是去问他是什么原因 得到的答案很幽默 因为
  • sequence_item、sequence、sequencer、driver的关系

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