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

打印trans的小tips

在 UVM 验证平台中,打印 transaction(事务)通常需要结合 UVM 的打印机制和事务的自定义信息输出。以下是常用的实现方法:

基础方法:使用 uvm_info 配合 sprint()

transaction 通常继承于 uvm_sequence_item,而 uvm_sequence_item 提供了 sprint() 方法,可将事务的字段信息格式化为字符串。结合 uvm_info 打印:

// 在序列或驱动中打印 transaction
class my_sequence extends uvm_sequence#(my_transaction);`uvm_object_utils(my_sequence)virtual task body();my_transaction trans;trans = my_transaction::type_id::create("trans");// 随机化或赋值事务字段assert(trans.randomize());// 打印事务:使用 sprint() 转换为字符串`uvm_info("SEQ", $sformatf("发送事务:\n%s", trans.sprint()), UVM_LOW)// 发送事务(示例)start_item(trans);finish_item(trans);endtask
endclass
  • trans.sprint():返回事务所有字段的格式化字符串(包含字段名和值)。
  • 输出效果类似:
UVM_INFO SEQ (my_sequence.sv:10) [SEQ] 发送事务:
my_transaction@1234 {addr: 32'h1000_0000data: 32'h1234_5678wr_en: 1'b1...
}

自定义打印格式:重写 do_print() 方法

如果需要自定义事务的打印内容(如筛选字段、调整格式),可以在 transaction 类中重写 do_print() 方法:

class my_transaction extends uvm_sequence_item;rand bit [31:0] addr;rand bit [31:0] data;rand bit        wr_en;`uvm_object_utils_begin(my_transaction)`uvm_field_int(addr, UVM_DEFAULT)`uvm_field_int(data, UVM_DEFAULT)`uvm_field_int(wr_en, UVM_DEFAULT)`uvm_object_utils_endfunction new(string name = "my_transaction");super.new(name);endfunction// 重写 do_print() 自定义打印格式virtual function void do_print(uvm_printer printer);super.do_print(printer);  // 保留默认打印(可选)// 添加自定义打印内容printer.print_string("操作类型", wr_en ? "写" : "读");printer.print_field("地址", addr, 32, UVM_HEX);  // 显式指定位宽和格式printer.print_field("数据", data, 32, UVM_HEX);endfunction
endclass

重写后,trans.sprint() 会包含自定义内容,打印更直观。

简化打印:使用 uvm_transaction 的 print() 方法

uvm_sequence_item 继承于 uvm_transaction,自带 print() 方法可直接打印事务信息(内部调用 sprint()):

trans.print();  // 直接打印事务,等效于 `uvm_info(..., trans.sprint(), ...)

该方法会自动输出事务的类型、名称和字段信息,无需手动拼接字符串。

http://www.aitangshan.cn/news/998.html

相关文章:

  • 关于uvm_reg_data_t
  • Gin网站部署
  • 2025-08-04 模拟赛总结
  • 2025-08-07 模拟赛总结(还没写)
  • uvm十万个为什么
  • 2025-08-12 模拟赛总结(还没写)
  • 2025-07-30 模拟赛总结(还没写)
  • ctfshow ssrf web351-360
  • 构建百万级实时排行榜:Redis Sorted Set 与 Java 实战指南
  • python ocr 识别 文字
  • 嗯可能就是deepseek像小狗一样吧(⁄ ⁄⁄ ▽⁄⁄ ⁄)
  • 【自学嵌入式:stm32单片机】定时器外部时钟
  • 树状数组学习笔记
  • 借项销售订单创建发票,报凭证不完成
  • GAS_Aura-Constructing the ASC and AS
  • 02-内核符号导出
  • tcpdump抓包命令
  • arduino开发你好小智(3)流程和原理 - MKT
  • PCIe【9】Linux内核 PCI驱动
  • GAS_Aura-GAS in Multiplayer
  • 随机种子
  • 爬虫逆向--Day13Day14--JS逆向核心案例
  • 线段树优化建图
  • Docker生成容器时使用GPU资源异常:could not select device driver ““ with capabilities: [[gpu]]
  • logrotate日志切割详解
  • 双栈维护滑动窗口的 trick
  • 目前组合数学我学过的
  • nim语言的fmt
  • nim语言获取windows用户名
  • 微雪电子发布工业级ESP32-S3-POE工控板:8路隔离IO,双核240MHz赋能AIoT,一根网线解决供电与通信,工业物联网迎来高性价比控制新选择 - 实践