[UT]记录case中seq.start(sequencer)的位置变化带来的执行行为的变化

在这里插入图片描述
现象:
代码选择打开57行,注释掉60行执行,结果58行不会打印。
代码选择打开60行,注释57行执行,结果58行正常打印。
sequence的执行需要时间!!!

SV中代码57行切换到60行的区别?
这两行代码的位置变化带来了完全不同的执行行为:

🔄 执行顺序的根本区别
第57行(注释掉的位置)

57    //write_vseq.start(vsequencer);//-h8000  [顺序执行]
58    `uvm_info(get_type_name(),$sformatf("wya_debug 000"),UVM_LOW)
59    fork
60    write_vseq.start(vsequencer);//-h8000    [并行执行]
61    wait(WR_DWRR.rx_rdy[0] == 1);
62    wait(WR_DWRR.rx_rdy[1] == 1);
63    wait(WR_DWRR.rx_rdy[2] == 1);
64    join

📊 两种位置的对比
在这里插入图片描述
🎯 具体行为分析
情况1:第57行(顺序执行)

//write_vseq.start(vsequencer);  // 1. 先执行sequence(如果取消注释)
`uvm_info("DEBUG", "wya_debug 000", UVM_LOW);  // 2. 打印信息
fork  // 3. 然后开始并行等待wait(WR_DWRR.rx_rdy[0] == 1);wait(WR_DWRR.rx_rdy[1] == 1); wait(WR_DWRR.rx_rdy[2] == 1);
join
// 4. 等待所有信号就绪

执行流程:sequence → 打印 → 等待信号
情况2:第60行(并行执行)

`uvm_info("DEBUG", "wya_debug 000", UVM_LOW);  // 1. 先打印信息
fork  // 2. 并行执行以下操作write_vseq.start(vsequencer);  // 2.1 启动sequencewait(WR_DWRR.rx_rdy[0] == 1); // 2.2 同时等待信号wait(WR_DWRR.rx_rdy[1] == 1);wait(WR_DWRR.rx_rdy[2] == 1);
join  // 3. 等待sequence完成且所有信号就绪

执行流程:打印 → (sequence + 等待信号) 并行执行
⏱️ 时序差异
第57行位置的时序(如果取消注释)

时间轴:
0ns: 启动write_vseq sequence→ sequence执行各种操作→ 可能驱动信号、产生流量
???ns: sequence完成执行→ 打印"wya_debug 000"→ 开始等待rx_rdy信号

第60行位置的时序

时间轴:
0ns: 打印"wya_debug 000"→ 同时:启动write_vseq sequence(后台运行)开始等待rx_rdy[0]信号开始等待rx_rdy[1]信号  开始等待rx_rdy[2]信号→ 等待所有条件满足:sequence完成 + 所有信号就绪

💡 建议的使用方式
使用第57行位置(顺序执行)当:
需要先完成sequence的初始化

sequence执行时间很短

等待信号需要在sequence之后

使用第60行位置(并行执行)当:
sequence可以后台运行

希望尽快开始等待信号

sequence执行时间和信号等待可以重叠
🔧 更好的写法

`uvm_info(get_type_name(), $sformatf("wya_debug 000"), UVM_LOW)forkbeginwrite_vseq.start(vsequencer);  // 运行sequence`uvm_info("DEBUG", "Sequence completed", UVM_LOW)endbeginwait(WR_DWRR.rx_rdy[0] == 1);wait(WR_DWRR.rx_rdy[1] == 1);wait(WR_DWRR.rx_rdy[2] == 1);`uvm_info("DEBUG", "All signals ready", UVM_LOW)end
join
// 等待sequence完成并且所有信号就绪

**结论:**从57行移到60行改变了sequence的执行时机,从顺序执行变为并行执行,这会影响程序的同步逻辑和时序行为。

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

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

相关文章

利用keytool实现https协议(生成自签名证书)

利用keytool实现https协议(生成自签名证书)什么是https协议?https(安全超文本传输协议)是 HTTP 的安全版本,通过 SSL/TLS 加密技术,在客户端(如浏览器)和服务器之间建立加…

拆解 AI 大模型 “思考” 逻辑:从参数训练到语义理解的核心链路

一、引言:揭开 AI 大模型 “思考” 的神秘面纱​日常生活中的 AI 大模型 “思考” 场景呈现(如 ChatGPT 对话、AI 写作辅助、智能客服应答)​提出核心问题:看似具备 “思考” 能力的 AI 大模型,其背后的运作逻辑究竟是…

element plus 使用细节 (二)

接上一篇文章: element plus 使用细节 最近菜鸟忙于系统开发,都没时间总结项目中使用的问题,幸好还是在空闲之余总结了一点(后续也会来补充),希望能给大家带来帮助! 文章目录table fixed 的 v…

【机器学习学习笔记】numpy基础2

零基础小白的 NumPy 入门指南如果你想用电竞(打游戏)的思路理解编程:Python 是基础操作键位,而 NumPy 就是 “英雄专属技能包”—— 专门帮你搞定 “数值计算” 这类复杂任务,比如算游戏里的伤害公式、地图坐标&#x…

从自动化到智能化:家具厂智能化产线需求与解决方案解析

伴随着工业4.0浪潮和智能制造技术的成熟,家具行业正逐步从传统的自动化生产迈向智能化生产。智能化产线的构建不仅可以提升生产效率,还能满足个性化定制和柔性制造的需求。本文以某家具厂为例,详细解析智能化产线的核心需求,并提出…

macOS下基于Qt/C++的OpenGL开发环境的搭建

系统配置 MacBook Pro 2015 Intel macOS 12Xcode 14 Qt开发环境搭建 Qt Creator的下载与安装 在Qt官网的下载页面上下载,即Download Qt Online Installer for macOS。下载完成就得到一个文件名类似于qt-online-installer-macOS-x64-x.y.z.dmg的安装包。 下一步 …

当液态玻璃计划遭遇反叛者:一场 iOS 26 界面的暗战

引子 在硅谷的地下代码俱乐部里,流传着一个关于 “液态玻璃” 的传说 —— 那是 Apple 秘密研发的界面改造计划,如同电影《变脸》中那张能改变命运的面具,一旦启用,所有 App 都将被迫换上流光溢彩的新面孔。 而今天,我…

探究Linux系统的SSL/TLS证书机制

一、SSL/TLS证书的基本概念 1.1 SSL/TLS协议简介 SSL/TLS是一种加密协议,旨在为网络通信提供机密性、完整性和身份验证。它广泛应用于HTTPS网站、电子邮件服务、VPN以及其他需要安全通信的场景。SSL(安全套接字层)是TLS(传输层安全…

python和java爬虫优劣对比

Python和Java作为爬虫开发的两大主流语言,核心差异源于语法特性、生态工具链、性能表现的不同,其优势与劣势需结合具体场景(如开发效率、爬取规模、反爬复杂度)判断。以下从 优势、劣势、适用场景 三个维度展开对比,帮…

Unity 枪械红点瞄准器计算

今天突然别人问我红点瞄准器在镜子上如何计算,之前的吃鸡项目做过不记得,今天写个小用例整理下。 主体思想记得是目标位置到眼睛穿过红点瞄准器获取当前点的位置就可以。应该是这样吧,:) 武器测试结构 首先整个结构&am…

题解 洛谷P13778 「o.OI R2」=+#-

文章目录题解代码居然没有题解?我来写一下我的抽象做法。 题解 手玩一下,随便画个他信心的折线图,如下: 可以发现,如果我们知道终止节点,那么我们就可以知道中间有多少个上升长度。(因为它只能…

RTSP流端口占用详解:TCP模式与UDP模式的对比

在音视频传输协议中,RTSP(Real-Time Streaming Protocol,实时流传输协议)被广泛用于点播、直播、监控等场景。开发者在实际部署或调试时,常常会遇到一个问题:一路 RTSP 流到底占用多少个端口? 这…

websocket的key和accept分别是多少个字节

WebSocket的Sec-WebSocket-Key是24字节(192位)的Base64编码字符串,解码后为16字节(128位)的原始随机数据;Sec-WebSocket-Accept是28字节(224位)的Base64编码字符串,解码后…

单片机开发----一个简单的Boot

文章目录一、设计思路**整体框架设计****各文件/模块功能解析**1. main.c(主程序入口,核心控制)2. 隐含的核心模块(框架中未展示但必备)**设计亮点**二、代码bootloader.hbootloader.cflash.cmain.c一、设计思路 整体…

Day2p2 夏暮客的Python之路

day2p2 The Hard Way to learn Python 文章目录day2p2 The Hard Way to learn Python前言一、提问和提示1.1 关于raw_input()1.2 关于input()二、参数、解包、变量2.1 解读参数2.2 解读解包2.3 解读变量2.4 实例2.5 模块和功能2.6 练习前言 author:SummerEnd date…

【C++设计模式】第二篇:策略模式(Strategy)--从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析

C设计模式系列文章目录 【第一篇】C单例模式–懒汉与饿汉以及线程安全 【C设计模式】第二篇:策略模式(Strategy)--从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析一、策略模式的基本介绍1.…

四十岁编程:热爱、沉淀与行业的真相-优雅草卓伊凡

四十岁编程:热爱、沉淀与行业的真相-优雅草卓伊凡今日卓伊凡收到一个问题:「如何看待40岁还在撸代码的程序员?」这让我不禁思考:从何时起,年龄成了程序员职业中的敏感词?在互联网的某些角落,弥漫…

pycharm解释器使用anaconda建立的虚拟环境里面的python,无需系统里面安装python。

Anaconda建立的虚拟环境可以在虚拟环境里设置任何的python版本,pycharm解释器使用anaconda建立的虚拟环境里面的python,比如anaconda建立的虚拟环境1、虚拟环境2,pycharm解释器使用anaconda建立虚拟环境1也可以使用虚拟环境2,根本…

机器学习:后篇

目录 一、KNN算法-分类 样本距离 KNN算法原理 缺点 API 二、模型选择与调优 交叉验证 保留交叉验证(HoldOut) k-折交叉验证(K-fold) 分层k-折交叉验证(Stratified k-fold) 其他交叉验证 三、朴素贝叶斯-分类 理论介绍 拉普拉斯平滑系数 API 四、决策树-分类 理论…

C++17无锁编程实战

在多线程编程里,“锁” 这东西就像把双刃剑 —— 用好了能保数据安全,用不好就麻烦了:大粒度的锁把并发度压得死死的,稍不注意加错锁还可能搞出死锁,程序直接 “僵住”。 但如果能摆脱锁,搞出支持安全并发…