1、field automation机制相关的宏
uvm_field系列宏有如下几种:
uvm_field_int(ARG,FLAG)
uvm_field_real(ARG,FLAG)
uvm_field_enum(T,ARG,FLAG)
uvm_field_object(ARG,FLAG)
uvm_field_event(ARG,FLAG)
uvm_field_string(ARG,FLAG)
上述宏分别用于注册整数、实数、枚举类型、uvm_object类型、事件、及字符串类型。
与动态数组相关的宏有:
uvm_field_array_enum(ARG,FLAG)
uvm_field_array_int(ARG,FLAG)
uvm_field_array_object(ARG,FLAG)
uvm_field_array_string(ARG,FLAG)
与静态数组相关的宏有:
uvm_field_sarray_enum(ARG,FLAG)
uvm_field_sarray_int(ARG,FLAG)
uvm_field_sarray_object(ARG,FLAG)
uvm_field_sarray_string(ARG,FLAG)
与队列相关的宏有:
uvm_field_queue_enum(ARG,FLAG)
uvm_field_queue_int(ARG,FLAG)
uvm_field_queue_object(ARG,FLAG)
uvm_field_queue_string(ARG,FLAG)
与联合数组相关的宏有:
uvm_field_aa_int_string(ARG,FLAG)
uvm_field_aa_string_string(ARG,FLAG)
uvm_field_aa_object_string(ARG,FLAG)
uvm_field_aa_int_int(ARG,FLAG)
uvm_field_aa_int_int_unsigned(ARG,FLAG)
uvm_field_aa_int_integer(ARG,FLAG)
uvm_field_aa_int_integer_unsigned(ARG,FLAG)
uvm_field_aa_int_byte(ARG,FLAG)
uvm_field_aa_int_byte_unsigned(ARG,FLAG)
uvm_field_aa_int_shortint(ARG,FLAG)
uvm_field_aa_int_shortint_unsigned(ARG,FLAG)
uvm_field_aa_int_longint(ARG,FLAG)
uvm_field_aa_int_longint_unsigned(ARG,FLAG)
uvm_field_aa_string_int(ARG,FLAG)
uvm_field_aa_object_int(ARG,FLAG)
在该系列宏中,出现的第一个类型是存储数据类型,第二个类型是索引类型,比如uvm_field_aa_string_int声明的数据存储类型是string,而索引类型为int。
2、field automation机制的常用函数
field automation的强大之处在于它提供了非常多的函数,使用field automation宏注册之后,可以直接调用这些函数,而无需自己定义。比如:
print函数用于实例中所有字段的打印,其原型为
extern function void print();
clone函数用于分配内存空间和把某一实例复制到该内存空间中,其原型为
extern virtual function uvm_object clone();
copy函数用于实例的复制,其原型为
extern function void copy(uvm_object rhs);
compare函数用于比较两个实例是否一样,其原型为
extern function bit compare(uvm_object rhs,uvm_comparer comparer=null);
pack_bytes函数用于将所有的字段打包成byte流,其原型为
extern function int pack_bytes(ref byte unsigned bytestream[],input uvm_packer packer=null);
unpack_bytes函数用于将byte流恢复到某个类的实例中,其原型为
extern function int unpack_bytes(ref byte unsigned bytestream[],input uvm_packer packer=null);
pack函数用于将所有的字段打包成bit流,其原型为
extern function int pack(ref bit bitstream[],input uvm_packer packer=null);
unpack函数用于将bit流恢复到某个类的实例中,其原型为
extern function int unpack(ref bit bitstream[],input uvm_packer packer=null);
pack_ints函数用于将所有的字段打包成int流,其原型为
extern function int pack_ints(ref int unsigned intstream[],input uvm_packer packer=null);
unpack_ints函数用于将int流恢复到某个类的实例中,其原型为
`extern function int unpack_ints(ref int unsigned intstream[],input uvm_packer packer=null);
除此之外,field automation机制还提供自动获取使用config_db::set设置的参数的功能,其使用方法为:
(1)对某个类的实例中的成员变量使用uvm_component_utils宏注册;
(2)成员变量使用对应的uvm_field宏注册;
(3)调用uvm_config_db set函数时,函数第三个参数必须与get函数中的变量名字一致;
在上述条件全部满足时,在build_phase中调用super.build_phase(),就可以省略调用uvm_config_db get函数,得到对应成员变量的值。