目录
代码举例
使用UVM平台的搭建的验证环境,所有组件(使用class定义拓展自uvm_object的类)其内部定义的变量都可以使用uvm_field进行注册,注册之后可以使用一些常用的方法,这个就是field automation机制。如下代码使用了`uvm_field_int和`uvm_field_sarray_int。
常见的用法
`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_array_object(ARG,FLAG)
`define uvm_field_array_string(ARG,FLAG)
静态数组
`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)
队列
`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)
支持的功能及对应的开关
上述示例代码中展示的UVM_ALL_ON表示打开field automation的所有功能,即复制,打印,比较等。当我们定义一个环境自身用于定位环境信息的,而不是需要检查的信号。在scoreboard中调用compare时并不想比对这个信号,以上文的cmd为例,会使用如下写法,关闭比对:
`uvm_field_int(cmd, UVM_ALL_ON | UVM_NOCOMPARE)
下面列举field的方法,及对应的开关
pack UVM_NOPACK
compare UVM_NOCOMPARE
print UVM_NOPRINT
copy UVM_NOCOPY
除此之外,还支持clone pack_ints pack_bytes等。
field automation机制还支持环境配置参数,之前举例的代码有提到,简单举例如下:
以上代码表示将配置文件cfg传递给v_sqr,目的是在激励产生的时候参考配置信息。