当前位置: 首页 > news >正文

uvm do on

在 UVM 中,uvm_do 宏的第一个参数是 “要执行的事务(sequence_item)或子序列(sequence)的句柄”

  • 若参数是事务(sequence_item 类型)uvm_do 会自动调用 start_item()randomize()finish_item(),完成事务的随机化与发送;
  • 若参数是子序列(sequence 类型)uvm_do 会自动调用该子序列的 start(m_sequencer) 方法,在当前序列的 m_sequencer 上启动子序列。
`uvm_do(req)           // req 是 transaction 句柄,自动发送事务
`uvm_do(sub_seq)       // sub_seq 是子序列句柄,自动启动子序列

在 uvm_do 宏中,若第一个参数是子序列(sequence 类型) 而非事务(sequence_item),则事务的随机化逻辑应在该子序列内部实现

子序列作为独立的 uvm_sequence 派生类,其核心职责之一就是定义 “如何生成、随机化和发送事务”。具体来说,事务的随机化通常在子序列的 body() 任务中完成,通过以下两种方式:

1. 直接在子序列中手动随机化事务

子序列内部会声明并创建事务(sequence_item),然后显式调用 randomize() 进行随机化,再通过 start_item()/finish_item() 发送。

// 子序列定义(包含事务的随机化逻辑)
class sub_seq extends uvm_sequence #(my_trans);`uvm_object_utils(sub_seq)task body();my_trans req; // 声明事务req = my_trans::type_id::create("req");// 在子序列内部随机化事务start_item(req);if (!req.randomize() with {addr inside {[0:100]}; data % 2 == 0;}) begin`uvm_fatal("RAND_ERR", "事务随机化失败")endfinish_item(req); // 发送事务endtask
endclass// 调用方(父序列或测试用例)使用 uvm_do 启动子序列
class parent_seq extends uvm_sequence;`uvm_object_utils(parent_seq)task body();sub_seq s;s = sub_seq::type_id::create("s");// uvm_do 的第一个参数是子序列,事务的随机化在 sub_seq 内部完成`uvm_do(s) endtask
endclass

2. 在子序列中嵌套使用 uvm_do 宏随机化事务

子序列内部也可以直接使用 uvm_do 宏处理事务,此时事务的随机化由子序列中的 uvm_do 自动完成(本质是对 randomize() 的封装)。

示例

class sub_seq extends uvm_sequence #(my_trans);`uvm_object_utils(sub_seq)task body();my_trans req;// 子序列内部用 uvm_do 随机化并发送事务`uvm_do_with(req, {addr == 32'h1000; data > 10;}) endtask
endclass// 父序列调用子序列
class parent_seq extends uvm_sequence;task body();sub_seq s;`uvm_do(s) // 子序列内部已通过 uvm_do_with 完成事务随机化endtask
endclass

文章转载自:

http://5eaNQUcS.hmmtx.cn
http://0i7Qt8MA.hmmtx.cn
http://2BtmY0gd.hmmtx.cn
http://wYdF3ChI.hmmtx.cn
http://JQO4LnBK.hmmtx.cn
http://1TLhG9PD.hmmtx.cn
http://d1Lvxgan.hmmtx.cn
http://7lJ3Fpdl.hmmtx.cn
http://0Ddl3VRo.hmmtx.cn
http://Ak73nSD3.hmmtx.cn
http://s0GVmDy9.hmmtx.cn
http://FvkkPhH2.hmmtx.cn
http://c26qwkxb.hmmtx.cn
http://GI2SAxTj.hmmtx.cn
http://M0uHDuwj.hmmtx.cn
http://MQ460VwK.hmmtx.cn
http://y4b4pAqA.hmmtx.cn
http://JsqIL6Dk.hmmtx.cn
http://hgV7CINX.hmmtx.cn
http://Mwa4r799.hmmtx.cn
http://S5yi5UqG.hmmtx.cn
http://20sSDdht.hmmtx.cn
http://lKDXkwqQ.hmmtx.cn
http://0FFBekA3.hmmtx.cn
http://qgQwE7yP.hmmtx.cn
http://41myemOh.hmmtx.cn
http://C903FlRq.hmmtx.cn
http://13Gciuir.hmmtx.cn
http://hK8Xm5eR.hmmtx.cn
http://p5DsPOqN.hmmtx.cn
http://www.dtcms.com/a/360020.html

相关文章:

  • 【深度学习】配分函数:近似最大似然与替代准则
  • Python毕业设计推荐:基于Django+MySQL的养老社区服务管理系统
  • Spring —— 数据源配置和注解开发
  • 【IDE问题篇】新电脑安装Keil5,出现找不到arm 编译器版本5编译报错;改为版本6后旧代码编译是出现编译报错
  • 通过编辑Offer Letter源代码实现批量修改
  • 刚上线的PHP项目被攻击了怎么办
  • Java全栈开发面试实战:从基础到微服务的全面解析
  • 策略模式:模拟八路军的抗日策略
  • 【Java后端】SpringBoot配置多个环境(开发、测试、生产)
  • LangChain框架深度解析:定位、架构、设计逻辑与优化方向
  • Mysql什么时候建临时表
  • 【机器学习基础】监督学习算法的现代理解:从经典方法到无人驾驶与生成式AI的实践应用
  • 柔性数组与不定长数据
  • SpringAI应用开发面试全流程:核心技术、工程架构与业务场景深度解析
  • KingbaseES V009版本发布:国产数据库的新飞跃
  • 嵌入式学习笔记--Linux系统编程--DAY04进程间通信-信号
  • 【Java学习笔记】18.Java数据库编程 - 1
  • 基于Echarts+HTML5可视化数据大屏展示-惠民服务平台
  • AG32 Nano开发板的烧录与调试工具
  • react-beautiful-dnd ​React 拖拽(Drag and Drop)库
  • 网格dp|
  • 机器视觉opencv教程(三):形态学变换(腐蚀与膨胀)
  • pyinstaller打包后失败问题记录
  • Linux系统(项目)之----进程池
  • 搭建卷积神经网络
  • LangChain 核心链式组件对比:从 SequentialChain 到 LCEL
  • 想学怎么写网站怎么办?初学者专用! (HTML+CSS+JS)
  • 【大语言模型 32】Constitutional AI:自我改进的对齐方法
  • TJA1445学习笔记(二)
  • Python入门教程之类型判别