[UVM源代码研究] 聊聊uvm_component与uvm_root(uvm-1.2版)
源代码截图都来自uvm-1.2的版本
uvm_component
uvm_component 的派生关系
uvm_component 派生自 uvm_object,而且并不是直接派生,在两者之间还有一个uvm_report_object。
uvm_component类派生关系图

uvm_object 是一个相对简单的类,它主要提供了两大类的方法接口:
- 用于field_automation 机制的方法,如print, copy, pack 等;
- 用于鉴别身份的方法,如 get_name, get_type_name, get_full_name 等。
其中关于 field_automation 机制的一些代码相对比较复杂。这个留在后面讲述 field_automation 机制时再仔细研究。
uvm_report_object 用于提供了UVM 中信息报告机制的一系列方法接口,如uvm_report_info, uvm_report_error, set_report_verbosity_level等,即我们在基础课程中学习的message机制相关方法都是在这里定义的(具体实现有些是在另外的类中完成的,如uvm_report_handler,这里只是做了一层封装而已),后面会专门介绍这种信息报告机制。
无论是 uvm_object 还是uvm_report_object,更多的只是提供一些方法接口,并不涉及什么高深的UVM处理机制,相对来说,uvm_component 里面的内容才更具有实质性意义的。
对于uvm_component 来说,有两大特点:
- 它的每个实例都是UVM树形结构的节点,每个节点创建时都需要指定parent
- 它有 phase 的概念
关于phase的部分将会放在phase 机制中讲述,本章中重点讲述 uvm_component 的树形组织结构。
uvm_component 树形结构的实现
src/base/uvm_component.svh中的源代码

本文详细探讨了UVM中的uvm_component和uvm_root类,介绍了它们的派生关系、树形结构实现、单例模式以及run_test函数的工作原理,展示了如何通过run_test启动验证环境并管理测试案例的执行过程。
最低0.47元/天 解锁文章
4696

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



