[UVM源代码研究] UVM report机制分析(uvm-1.2版)
引子:如何定制一款个性化的打印格式
如果使用默认的打印格式,我们执行以下代码:
`uvm_info语句
实际打印结果格式如下:
`uvm_info打印结果

打印内容包含了下面几个方面:
- severity信息(UVM_INFO)
- 打印位置(文件…/env/my_case0.sv的第43行)
- 打印仿真时间 (0ns)
- 打印信息所在组件在树形结构中的位置 (uvm_test_top)
- ID信息 (BUILD_PHASE)
- 打印message实体(case0 on going)
也就是说UVM源代码已经帮我们做了处理,将我们执行的uvm_info内的内容输出固定的打印格式到终端上,如果我们想调整打印的内容格式,那就需要对UVM中的report机制有个比较深入系统的了解,下面我们就以uvm_info为例看下UVM源代码具体是怎么样一个执行过程。
`uvm_info宏的定义
src/macros/uvm_message_defines.svh中的源代码

src/macros/uvm_message_defines.svh中的源代码

113-115行这个行我们没有定义,这里就不讨论应用场景了。
这个宏封装的主体执行的代码就是117-118这两行代码。
uvm_report_enabled
src/base/uvm_report_object.svh中的源代码

src/base/uvm_globals.svh中的源代码

函数定义位置:对于这个uvm_report_enabled函数我们搜索UVM源代码文件发现有两个文件中有定义,分别如右图所示。对于uvm_globals.svh中的定义,我们分析其代码实现通过之前学习的知识发现其本质调用的是uvm_root单例中的uvm_report_enabled函数,而uvm_root的继承关系又是从uvm_component extends uvm_report_object继承而来,这样一来,uvm_report_enabled函数的实现根源

本文详细探讨了UVM1.2版本中如何通过uvm_info宏定制打印格式,涉及uvm_report_enabled、uvm_report_object、uvm_report_handler和uvm_report_server等关键组件,以及如何通过自定义report_server类和compose_report_message函数实现个性化打印。

最低0.47元/天 解锁文章
914

被折叠的 条评论
为什么被折叠?



