UVM验证之fieldautomation机制
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::t设置的参数的功能,其使⽤⽅法为:
(1)对某个类的实例中的成员变量使⽤uvm_component_utils宏注册;
(2)成员变量使⽤对应的uvm_field宏注册;
(3)调⽤uvm_config_db t函数时,函数第三个参数必须与get函数中的变量名字⼀致;
在上述条件全部满⾜时,在build_pha中调⽤super.build_pha(),就可以省略调⽤uvm_config_db get函数,得到对应成员变量的值。