field automation 机制
field automation 机制相关的宏
'define uvm_field_int (ARG,FLAG)
'define uvm_field_real (ARG, FLAG)
'define uvm_field_enum(T,ARG, FLAG)
'define uvm_field_object (ARG,ELAG)
'define uvm_field_event (ARG, FLAG)
'define uvm_field_string (ARG, FLAG)
上述几个宏分别用于要注册的字段是整数、实数、枚举类型、直接或间接派生自 uvm_object 的类型、事件及字符串类型。这里除了枚举类型外,都是两个参数。
对于枚举类型来说,需要有三个参数。假如有枚举类型 tb_bool_e,同时有变量 tb_flag,那么在使用field automation 机制时应该使用如下方式实现
typedef enum {TB TRUE,TB FALSE} tb_bool_e;
tb_bool_e tb_flag;
......
'uvm_field_enum(tb_bool_e, tb_flag,UVM_ALL_ON)
与动态数组有关的uvm feld 系列宏有:
'define uvm_field_array_enum (ARG,FLAG)
'define uvm_field_array_int (ARG,FLAG)
'define uvm_field_array_object(ARG,FLAG)
'define uvm_field_array_string (ARG,FLAG)
这里只有4种,相比于前面的uvm feld 系列宏少了event类型和real类型重要的变化是 enum 类型的数组里也只有两个参数。
与静态数组相关的uvm_feld 系列宏有:
'define uvm_field_sarray int (ARG,FLAG)
'define uvm_field_sarray_enum (ARG, FLAG)
'define uvm_field_sarray_object (ARG,FLAG)
'define uvm_field_sarray_string(ARG,FLAG)
与队列相关的 uvm_field 系列宏有:
'define uvm_field_queue_enum (ARG,FLAG)
'define uvm_field queue_int (ARG,FLAG)
'define uvm_field_queue_object (ARG,FLAG)
'define uvm_field_queue_string (ARG,FLAG)
同样的,这里也是 4种,且对于 enum 类型来说,也只需要两个参数。
联合数组是 SystemVerilog 中定义的一种非常有用的数据类型,在验证平台中经微用。UVM 对其提供了良好的支持,与联合数组相关的 uvm field 宏有:
'define uvm_field_aa_int_string (ARG,FLAG)
'define uvm_field_aa_string_string(ARG,FLAG)
'define uvm_field_aa_object_string(ARG,FLAG)
'define uvm_field_aa_int_int (ARG,FLAG)
'define uvm_field_aa_int_int unsigned(ARG,FLAG)
'define uvm_field_aa_int_integer (ARG,FLAG)
'define uvm_field_aa_int_integer unsigned(ARG,FLAG)
'define uvm_field_aa_int_byte(ARG,FLAG)
'define uvm_field_aa_int_byte unsigned(ARG,FLAG)
'define uvm_field_aa_int_shortint (ARG,FLAG)
'define uvm_field_aa_int_shortint unsigned(ARG,FLAG)
'define uvm_field_aa_int_longint(ARG,FLAG)
'define uvm_field_aa_int_longint unsigned(ARG,FLAG)
'define uvm_field_aa_string_int(ARG,FLAG)
'define uvm_field_aa_object_int (ARG,FLAG)
这里一共出现了 15 种。联合数组有两大识别标志,一是索引的类型,二是存储数据类型。在这一系列 uvm_field 系列宏中,出现的第一个类型是存储数据类型,第二个类型是索引类型,如uvm field_aa_int_string 用于声明那些存储的数据是int,而其索引是 string型的联合数组。
field automation 机制的常用函数
field antomarion 功能非常强大,它主要提供了如下函数
copy 函数用于实例的复制
如果要把某个 A 实例复制到 B 实例中,那么应该使用 B.copy(A)。在使用此函数前,B实例必须已经使用 new 函数分配好了内存空间。
compare 函数用于比较两个实例是否一样
如果要比较A与 B 是否一样,可以使用 A.comparc(B),也可以使用 B.compare(A)。当
两者一致时,返回1;否则为 0。
pack_bytes 函数用于将所有的字段打包成 byte 流
unpack_bytes 函数用于将一个 byte 流逐一恢复到某个类的实例中
pack 函数用于将所有的字段打包成 bit 流
unpack 函数用于将一个 bit 流逐一恢复到某个类的实例中
pack_int 函数用于将所有的字段打包成 int (4个byte,或者 dword)流
unpack_int 函数用于将一个int 流逐一恢复到某个类的实例中
print 函数用于打印所有的字段。
clone 函数
除了上述函数之外,feld automation 机制还提供自动得到使用 config_db::set设置的数的功能,
field automation 机制中标志位的使用
考虑实现这样一种功能:给 DUT施加一种 CRC错误的异常激励。实现这个功能的种方法是在my_transaction 中添加一个crc err 的标志位.