从零开始搭建UVM平台(十二)-加入sequence机制

news2024/10/12 1:34:37

书接上回:

从零开始搭建UVM平台(一)-只有uvm_driver的验证平台

从零开始搭建UVM平台(二)-加入factory机制

从零开始搭建UVM平台(三)-加入objection机制

从零开始搭建UVM平台(四)-加入interface

从零开始搭建UVM平台(五)-加入transaction机制

从零开始搭建UVM平台(六)-加入env

从零开始搭建UVM平台(七)-加入monitor

从零开始搭建UVM平台(八)-加入agent

从零开始搭建UVM平台(九)-加入reference model

从零开始搭建UVM平台(十)-加入scoreboard

从零开始搭建UVM平台(十一)-加入field automation机制

                                        加入sequence机制

为什么要加入sequence机制?前面driver里例化了transaction,并将trasaction驱动到了总线上,为了使driver的职责变得更加清晰明了,便只让driver完成驱动数据这一个任务,那么创建transaction的任务由谁来完成呢?答案就是sequence机制。

Sequence机制包含了sequence和sequencer。前者可以理解为是一系列的transaction构成一个sequence,因此它本质是一个uvm_object,它的职责是例化一系列transaction并随机化;而后者是一个uvm_component,负责将sequence例化的transaction发送给driver。

在加入sequence机制前,首先要想清楚平台结构的变化以及一些关键注意事项。

第一点:创建sequencer。首先,Sequencer属于component,因此直接继承uvm_sequencer后需要用uvm_component_utils宏进行注册。其次,她负责将sequence产生的transaction传递给driver,那么在创建类时必须是参数化类,其中的参数就是要传递的transaction的类型,同时还要修改driver为参数化类,参数类型是从sqr那边接收到的transaction的类型。修改driver为参数化类有一个好处是可以直接调用在uvm_driver里已经定义好的一个变量req,这个req的类型就是driver的参数化类型。

第二点:需要在agent例化sequencer。

第三点:搭建sqr和drv的transaction通道。前面说过,uvm里实现component之间transaction级别的通信靠的是TLM机制。但是这里不需要自己创建port了,因为uvm_driver里已经定义好了一个port叫seq_item_port,而uvm_sequencer里也已经定义好了一个export叫seq_item_export,那么只需要在agent里将这两个port连接起来即可。

第四点:driver向sqr中拿到transaction。前面port通道已经搭建好了,那么接下来driver怎么向sqr索取transaction?靠的是get_next_item()函数,需要注意的是,driver驱动完成之后,还需要调一下item_done()函数来告知sqr driver已经收到了这笔transaction,这是一种通信握手机制。

第五点:创建sequence。Sequence前面说了它的职责就是例化一系列transaction并随机化。那么它是如何完成这个功能的呢?需要实现一个body函数,并且在body函数里调用`uvm_do宏就可以了。只要调了`uvm_do宏,例化并随机化transaction的动作便会自动完成。

第六点:何时启动seq?只有seq启动了,才能产生transaction并传递给driver。只需要在例化seq之后调用一下seqstart函数。注意在调用start函数时,要给它传入一个参数,这个参数就是seq要传递到的sqr。同时在start函数前后要raise_objection/drop_objection。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2206507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

邮件系统国产化改造: 保障信息安全、提升效率的最佳选择

在当前数字化转型的大背景下,我国政府提出了构建网络强国和数字强国的宏伟蓝图。这一战略的实施,不仅为数字政府的建设提供了坚实的基础,也为政府和企业的数字化升级指明了方向。在这一进程中,邮件系统的国产化改造就显得尤为重要…

功能安全测试安全渗透测试,一文讲清楚

本文我们将以围绕系统安全质量提升为目标,讲述在功能安全测试&安全渗透测试上实践过程。 希望通过此篇文章,帮助大家更深入、透彻地了解安全测试。 安全渗透测试实践 安全前置扫描主要是识别白盒漏洞、黑盒漏洞问题,针对JSRC类问题&am…

pycharm里debug时如何看到数据的维度

使用表达式计算(Evaluate Expression) 调试时,使用 PyCharm 的 “Evaluate Expression” 功能可以动态查看或修改数据。具体步骤如下: 在调试模式中按 Alt F8(Windows)或 Option F8(Mac&…

ARC学习(4)基本编程模型认识(四)----寄存器以及异常数据读取

笔者来聊一下ARC寄存器的获取 在介绍了ARC编程模型的知识点之后,来看一些具体的编程操作,比如如何获取寄存器,如何编写汇编语言实现特定功能? 1、获取寄存器 可以使用内联汇编来实现寄存器的获取,具体格式如下: _Asm:汇编宏标识符,指示内联汇编代码_Save_all_regs:…

第十二章 RabbitMQ之失败消息处理策略

目录 一、引言 二、RepublishMessageRecoverer 实现 2.1. 实现步骤 2.2. 实现代码 2.2.1. 异常交换机队列回收期配置类 2.2.2. 常规交换机队列配置类 2.2.3. 消费者代码 2.2.4. 消费者yml配置 2.2.5. 生产者代码 2.2.6. 生产者yml配置 2.2.7. 运行效果 一、引言 …

【瑞萨RA8D1 CPK开发板】串口的使用和STDOUT输出重定向

串口 本次串口的使用关于时钟导致串口的波特率不对,坑了我很久的时间 使能时钟 串口发现一个问题就是,只能使用下边的时钟配置,修改时钟源和分频系数都会导致串口波特率不正常,这种问题出现在mdkrasc的使用场景之下&#xff1b…

bclinux安装minio和mc及从服务器上下载文件

下载MinIO服务器二进制文件 访问MinIO的官方网站或使用wget、curl等工具直接从MinIO的官方GitHub存储库下载最新版本的MinIO服务器二进制文件。例如,使用以下命令: 下载命令:wget https://dl.min.io/server/minio/release/linux-amd64/ 授…

Hadoop三大组件的工作原理

Hadoop三大组件的工作原理 一、引言 Hadoop是一个开源的分布式计算框架,在大数据处理领域具有举足轻重的地位。其核心组件包括HDFS(分布式文件系统)、MapReduce(分布式计算框架)和YARN(资源管理系统&…

Vue3 ECharts看板

获取 ECharts - 入门篇 - 使用手册 - Apache ECharts npm install echarts <template><div id"main" style"height:400px;"></div> </template><script lang"ts" setup> import { ref, onMounted } from "…

AcWing 905:区间选点 ← 贪心算法

【题目来源】https://www.acwing.com/problem/content/907/【题目描述】 给定 N 个闭区间 [ai,bi]&#xff0c;请你在数轴上选择尽量少的点&#xff0c;使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。【输入格式】 第一行包…

【论文阅读笔记】End-to-End Object Detection with Transformers

代码地址&#xff1a;https://github.com/facebookresearch/detr 论文小结 本文是Transformer结构应用于目标检测&#xff08;OD&#xff09;任务的开山之作。方法名DETE&#xff0c;取自Detection Transformer。   作为2020年的论文&#xff0c;其表现精度在当时也不算高的…

Linux:信号保存与处理

使用kill -l命令查看信号&#xff1a; 信号量和信号确实一点关系没有 信号是操作系统发出的进程与进程之间的通知于中断&#xff0c;是进程之间时间异步通知的一种方式 先了解同步通信&#xff1a;同步通信是一种比特同步通信技术&#xff0c;要求发收双方具有同频同相的同步…

学以致用 SAP HCM 顾问excel函数实战系列

EXCEL函数&#xff1a;在上学的时候&#xff0c;对word、excel、PPT感觉都很简单&#xff0c;稀里糊涂的学&#xff0c;稀里糊涂的忘&#xff0c;然后走向工作岗位的时候&#xff0c;突然发现这三大宝剑无比锋利&#xff0c;可惜自己太菜&#xff0c;曾经努力学习&#xff0c;但…

前端 | Uncaught (in promise) undefined

前端 | Uncaught (in promise) undefined 最近开发运行前端项目时&#xff0c;经常预计控制台报错 &#xff0c;如下图&#xff1a; 这里我总结下&#xff0c;这种报错的场景和原因&#xff0c;并通过实际代码案例帮助小伙伴更好理解下 。 文章目录 前端 | Uncaught (in promi…

数据丢失的终极克星来了!EasyRecovery17数据恢复软件

数据丢失的终极克星来了&#xff01; 各位亲爱的朋友们&#xff0c;你们有没有经历过那种“哎呀妈呀&#xff0c;重要文件找不到了&#xff01;”的绝望时刻&#xff1f;别急&#xff0c;今天我要向你们安利一款神器——EasyRecovery17数据恢复软件&#xff0c;简直是我们这些“…

Javascript笔试题目(二)

1.如何使用ES6语法对函数所有参数进行求和?请写出具体代码 function sumAll(...args) { // args 是一个数组&#xff0c;包含了函数接收到的所有参数 return args.reduce((accumulator, currentValue) > accumulator currentValue, 0); } // 测试函数 console.log…

查找企业联系电话的几种方法

在商业合作和销售拓展的过程中&#xff0c;找到企业的联系电话是至关重要的一步。无论是精准营销还是客户开发&#xff0c;拥有有效的联系方式可以大大提高成功率。那么&#xff0c;如何快速有效地查找企业联系电话呢&#xff1f;下面介绍几种常见的方法&#xff0c;以及如何借…

摩托车一键启动智能钥匙提高了便捷性和安全性

摩托车一键启动无钥匙进入功能是一种便捷的智能配置 通过PKE智能感应技术实现无钥匙启动&#xff1a; 技术原理与操作 摩托车一键启动无钥匙进入系统采用了RFID无线射频技术和车辆身份编码识别系统&#xff0c;实现了双重射频系统、双重防盗保护。操作简便&#xff0c;只需携…

最后倒计时,SIGMOD 2025全球数据库盛会,你准备好了吗?

一、会议资讯&#xff1a; ACM SIGMOD/PODS International Conference on Management of Data是计算机科学领域中一个顶级的国际学术会议&#xff0c;专注于数据库管理和数据系统的前沿研究。 SIGMOD Conference 每年由 ACM 主办&#xff0c;汇集了全球顶尖的学者、研究人员和…

【使用Java循环输出菱形,空心金字塔】

使用Java循环输出图形的探索之旅 在这篇博客中&#xff0c;我们将探讨如何使用Java中的循环结构来输出各种几何图形&#xff0c;特别是金字塔和菱形。通过这一过程&#xff0c;不仅能够加深对循环的理解&#xff0c;还能提升编程能力。 1. 打印矩形 首先&#xff0c;我们从最…