UVM系列
文章目录
前言
很久没写文了,决定把之前学习的UVM白皮书做一个总结,系列会持续更新
本文主要介绍uvm_component 和 uvm_object的基本概念,以及区别和联系
一、派生基础类
1. uvm_object 是最基础的类,uvm_component 派生自uvm_object
那么说明uvm_component 拥有的特性比 uvm_object 来得丰富。其中有两大特性是 uvm_object 所没有的:
- 通过new的时候指定parent参数形成树形结构
- phase自动执行
但是uvm_component 作为UVM树形结构的节点,因此失去了一些uvm_object 的特性:
- 无法使用clone函数(分配内存空间并把另一个实例复制到新的内存空间),因为新clone出来的类无法指定parent。但是可以使用copy()函数(clone=new+copy)
经典平台中,除 uvm_transcation\ uvm_sequence_item\ uvm_sequence \ uvm_phase,其他基本都是派生自 uvm_component:
2. 派生自uvm_object
- uvm_sequence_item: 平台的transcation派生于uvm_sequence_item,而不是uvm_transcation
- uvm_sequence: 所有的 sequence 要派生自uvm_sequence
- config: 用于平台参数整合控制
- uvm_reg_item: 派生自uvm_sequence_item,用于寄存器模型
- uvm_reg_map、uvm_reg_field、uvm_reg、uvm_reg_block等寄存器模型的其他类派生自uvm_object
- uvm_phase: 派生自uvm_object,用于控制平台行为
3. 派生自uvm_component
- uvm_driver: 所有的driver派生自uvm_driver,相较uvm_component 没有过多拓展,多了几个成员变量
- uvm_monitor:所有的monitor派生自uvm_monitor,相较uvm_component 几乎没有拓展
- uvm_sequencer:所有的sequencer派生自uvm_sequencer,相较uvm_componen有拓展多
- uvm_scoreboard:一般的scoreboard派生自uvm_scoreboard,相较uvm_componen拓展不多
- rm: 直接派生自uvm_component,没有什么通用方法因此
- uvm_agent: 所有的agent派生自uvm_agent
- uvm_env: 所有的env派生自uvm_env
- uvm_test: 所有的test派生自uvm_test或者其派生类(base_tc)
二、相关宏
1. uvm_object相关factory宏
- `uvm_object_utils: 将一个直接或者间接派生自uvm_object的类注册到factory
- `uvm_object_param_utils: 将一个直接或者间接派生自uvm_object的参数化的类注册到factory:class A #(int a) extends uvm_object
对于类中某些成员变量需要使用field_automation机制的类(下篇介绍),使用下述宏注册:
- `uvm_object_utils_begin(myclass)
- `uvm_object_utils_end
- `uvm_object_param_utils_begin(myclass)
- `uvm_object_param_utils_end
1. uvm_component相关factory宏
- `uvm_component_utils: 将一个直接或者间接派生自uvm_component的类注册到factory
- `uvm_component_param_utils: 将一个直接或者间接派生自uvm_component的参数化的类注册到factory
对于类中某些成员变量需要使用field_automation机制的类(下篇介绍),使用下述宏注册:
- `uvm_component_utils_begin(myclass)
- `uvm_component_utils_end
- `uvm_component_param_utils_begin(myclass)
- `uvm_component_param_utils_end