field automation 机制

 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 的标志位.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值