系列文章目录
待补充
文章目录
前言
本节介绍factory机制和field_automation机制
一、factory机制和field_automation机制
1、factory机制
本质:factory机制实际上是对new函数的重载,原生new函数的功能过少,经过factory机制改良后多了许多功能,例如copy、compare、print
对于验证平台内的组件,实例化的方式可以通过new函数,也可以通过factory机制,组件定义时通过uvm_component_utils / uvm_object_utils等宏进行factory的注册,便能使用type_name::type_id::create的方式实例化:
env内:
drv = my_driver::type_id::create("my_drv",this)
另外,factory机制最伟大的地方在于其具有重载机制~(待刷新
,尚未理解)可以在创建类的实例的时候根据是否有重载记录来决定是否创建原始的类,还是创建重载的类的实例。
2、field_automation机制
对于组件内的变量可以通过field_automation机制注册,注册后的变量便可以使用UVM的copy、compare、print等函数:
`uvm_component_utils_begin(my_transcation)
`uvm_field_int(a,UVM_ALL_ON)
if(condition)begin
`uvm_field_array_int(b,UVM_ALL_ON)
end
`uvm_component_utils_end
uvm_field系列宏包括:
bit、int 类型 -> `uvm_field_int(ARG,FLAG) //ARG:变量,FLAG:控制域(后续介绍)
实数类型 -> `uvm_field_real(ARG,FLAG)
枚举类型 -> `uvm_field_enum(ARG,FLAG)
object类型 -> `uvm_field_object(ARG,FLAG)
事件类型 -> `uvm_field_event(ARG,FLAG)
字符类型 -> `uvm_field_string(ARG,FLAG)
动态数组相关
`uvm_field_array_int(ARG,FLAG)
`uvm_field_array_enum(ARG,FLAG)
`uvm_field_array_object(ARG,FLAG)
`uvm_field_array_string(ARG,FLAG)
静态数组相关
`uvm_field_sarray_int(ARG,FLAG)
`uvm_field_sarray_enum(ARG,FLAG)
`uvm_field_sarray_object(ARG,FLAG)
`uvm_field_sarray_string(ARG,FLAG)
队列相关
`uvm_field_queue_int(ARG,FLAG)
`uvm_field_queue_enum(ARG,FLAG)
`uvm_field_queue_object(ARG,FLAG)
`uvm_field_queue_string(ARG,FLAG)