作者:一条游荡在重庆的鱼_759 | 来源:互联网 | 2023-06-02 20:55
field automation机制带来的便利性1 首先注册的方式,如下: `uvm_object_utils_begin(my_transaction) `uvm_field_
field automation机制带来的便利性
1 首先注册的方式,如下:
`uvm_object_utils_begin(my_transaction)
`uvm_field_int(data,UVM_ALL_ON )
...
`uvm_object_utils_end
2 对于object类,将类中的变量注册后,可以使用UVM预定义好的函数,如下:
函数名 描述
copy 用于实例的复制 ,如B.copy(A),即将A的内容复制给B
clone 克隆一个对象,如果对象不存在则创建一个新对象
print 打印内容,如B.print( ),即打印 B 对象中所有在域中注册的变量、数组等
pack_bytes 将在域中注册的变量和数组等打包成byte流,输出到一个动态数组中
unpack_bytes 传入一个动态数组,将所有内容根据域中注册的顺序,转换成类中的字段
pack 打包成bit流
unpack 将bit流注意恢复到类中
3 常使用的标志位,包括:
标志 描述
UVM_COPY / UVM_NOCOPY 打开/关闭 复制
UVM_PACK /UVM_NOPACK 打开/关闭 byte流
UVM_ALL_ON 所有功能都打开
UVM_PRINT / UVM_NOPRINT 打开 / 关闭打印功能
4 uvm_field_*系列宏共有如下几种:
`define uvm_field_int(ARG,FLAG) 变量+ 标志位
`define uvm_field_real(ARG,FLAG)
`define uvm_field_enum(T,ARG,FLAG) 类型+ 变量+ 标志位
`define uvm_field_object(ARG,FLAG)
`define uvm_field_event(ARG,FLAG)
`define uvm_field_string(ARG,FLAG)
`define uvm_field_array_enum(ARG,FLAG)
`define uvm_field_array_int(ARG,FLAG)
`define uvm_field_sarray_int(ARG,FLAG)
`define uvm_field_sarray_enum(ARG,FLAG)
`define uvm_field_array_object(ARG,FLAG)
`define uvm_field_sarray_object(ARG,FLAG)
`define uvm_field_array_string(ARG,FLAG)
`define uvm_field_sarray_string(ARG,FLAG)
`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)
`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(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)
5 例子:
`ifndef BUS_TRANSACTION_SV
`define BUS_TRANSACTION_SV //define 使用方法
typedef enum {BUS_RD,BUS_WR} bus_op_e;
class bus_transaction extends uvm_sequence_item;
//rand bit bus_cmd_valid;
rand bus_op_e bus_op;
rand bit[15:0] bus_addr;
rand bit[15:0] bus_wr_data;
rand bit[15:0] bus_rd_data;
`uvm_object_utils_begin(bus_transaction)
//`uvm_field_int(bus_cmd_valid, UVM_ALL_ON)
`uvm_field_int(bus_addr, UVM_ALL_ON)
`uvm_field_int(bus_wr_data, UVM_ALL_ON)
`uvm_field_enum(bus_op_e, bus_rd_data, UVM_ALL_ON)
`uvm_field_int(bus_op, UVM_ALL_ON)
`uvm_object_utils_end
function new(string name = "bus_transaction");
super.new();
endfunction
endclass
`endif