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

uvm_do sequence marcos

在《 creating and using  sequence》中,我们了解到sequence会调用任务start_item()finish_item()。通过直接调用UVM sequence宏uvm_douvm_do_with,你可以避免在代码中写入所有这些语句。在编译时,这些宏将被替换为对start_item()finish_item()的调用。主要有四种类型的UVM宏可以在默认sequencer上执行。

Macros `uvm_do_*

你必须提供一个 uvm_sequence_item 对象或序列,其内部会执行以下操作:

1. 必要时通过 uvm_create 创建条目。若无需创建条目,请使用 uvm_send
2. 对条目或序列进行随机化
3. 若为 uvm_sequence_item 对象,则调用 start_item() 和 finish_item()
4. 若为序列,则调用 start() 任务

  • uvm_do:在默认sequencer上执行提供的sequence item
  • uvm_do_with:用行内值覆盖默认约束
  • uvm_do_pri:根据优先级值执行,用于同时运行多个sequence时
  • uvm_do_pri_with:根据优先级执行,并用行内值覆盖默认约束

uvm_do_*宏会判断参数是sequence还是sequence item,并相应调用start()start_item()

Example

下面的序列将生成四个项目,随机排列后发送至驱动器

class base_sequence extends uvm_sequence #(my_data);`uvm_object_utils (base_sequence)...virtual task body ();`uvm_info ("BASE_SEQ", $sformatf ("Starting body of %s", this.get_name()), UVM_MEDIUM)`uvm_do (req)`uvm_do_with (req, { data == 8'h4e;addr == 8'ha1; })`uvm_do_pri (req, 9)`uvm_do_pri_with (req, 3, { data == 8'hc5; })`uvm_info ("BASE_SEQ", $sformatf ("Sequence %s is over", this.get_name()), UVM_MEDIUM)endtask...
endclass

变量req已在序列类的参数中声明并定义,其类型为my_datauvm_do_*宏将默认使用内置的m_sequencer执行序列。若需在其他用户自定义的sequencer上执行该序列,则需调用uvm_do_on_*宏,示例如下:

`uvm_do_on          (SEQ_OR_ITEM, SEQR)
`uvm_do_on_pri      (SEQ_OR_ITEM, SEQR, PRIORITY)
`uvm_do_on_with     (SEQ_OR_ITEM, SEQR, CONSTRAINTS)
`uvm_do_on_pri_with (SEQ_OR_ITEM, SEQR, PRIORITY, CONSTRAINTS)
Structure

uvm_do macros ultimately call uvm_do_on_pri_with

注意:所有宏均使用UVM中的define进行编码,每个宏都会调用uvm_do_on_pri_with并传入适当的参数。例如,

`define uvm_do (SEQ_OR_ITEM)`uvm_do_on_pri_with (SEQ_OR_ITEM, m_sequencer, -1 {})`define uvm_do_on_with (SEQ_OR_ITEM, SEQR, CONSTRAINTS)`uvm_do_on_pri_with (SEQ_OR_ITEM, SEQR, -1, CONSTRAINTS)

http://www.dtcms.com/a/303203.html

相关文章:

  • SQL之防止误删数据
  • Spring核心机制:深入理解控制反转(IoC)
  • Kotlin的datetime库
  • 荣耀应用市场《2025上半年应用合规治理报告》丨开发加油站
  • C# 静态类_静态方法_静态字段(static 声明静态的关键字 )
  • R语言与作物模型(DSSAT模型)技术应用
  • 未授权访问漏洞 总结
  • mysql 关于树形数据结构的一些操作
  • STM32中集成USB驱动
  • SQL 查询语法笔记
  • C语言笔记03 :关于指针的补充
  • 力扣面试150题--颠倒二进制位
  • 第18章 泛型 笔记
  • 第一第二章笔记整理
  • AutoGen - model_clients和model_context使用示例
  • Docker学习相关视频笔记(一)
  • 机器学习sklearn:决策树的参数、属性、接口
  • redis getshell得方式
  • Redis 部署模式详解
  • stm32开发 -- TFTLCD相关
  • Zabbix 6.0 监控AWS全栈实战|EC2至Lambda的无缝监控
  • 配置 MCP 让 cursor 结合 Figma 自动生成设计稿组件
  • Python defaultdict 的强大之处:告别繁琐的字典键检查: Effective Python 第17条
  • Python动态规划:从基础到高阶优化的全面指南
  • 网络与信息安全有哪些岗位:(3)安全运维工程师
  • 微算法科技(NASDAQ:MLGO)利用基于区块链的机器学习模型进行交易分类,实现交易数据的匿名化
  • Linux内核驱动开发核心问题全解
  • shell每日三题大神之路:第三天
  • Java 笔记 transient 用法
  • 四、计算机组成原理——第4章:指令系统