这里print()函数还有个uvm_printer类型的参数,是指定我们选择的打印器类型,这个我们后面会讲,这里我们先继续讲图4中的代码,只要我们没有在`uvm_field_queue_int中指定FLAG为UVM_NOPRINT,图4中的宏`uvm_print_array_int3()就会被调用,`uvm_print_array_int3定义在uvm_printer_defines.sv
uvm_field系列宏随着transaction成员变量的不同而不同,如上面的定义中出现了针对bit类型的uvm_field_int及针对byte类型动态数组的uvm_field_array_int。 当使用上述宏注册之后,可以直接调用copy、compare、print等函数,而无需自己定义。这极大地简化了验证平台的搭建,提高了效率。 引入field_automation机制的另外一大...
加入了uvm_objection_utils_begin(mac_transaction)这样一句,这句话跟我们前面提到的factory机制时提到的uvm_objection_utils非常相似。事实上,这其实就是factory机制的实现。field_automation机制并不能单独使用宏来实现。 uvm_field_array_A表示的是动态数组,A表示动态数字中存放的内容的类型。 uvm_field_*系列宏具体...
`uvm_object_utils_begin(my_transaction) `uvm_field_int(dmac, UVM_ALL_ON) `uvm_field_int(smac, UVM_ALL_ON) `uvm_field_int(ether_type, UVM_ALL_ON) `uvm_field_array_int(pload, UVM_ALL_ON) `uvm_field_int(crc, UVM_ALL_ON) `uvm_object_utils_end function new(string name = "my_...
`uvm_field_array_int(pload, UVM_ALL_ON) `uvm_field_int(crc, UVM_ALL_ON) `uvm_object_utils_end 那么将会先放入smac,再依次放入dmac、ether_type、pload、crc。 my_monitor的collect_one_pkt可以简化成: //my_monitor.sv 34taskmy_monitor::collect_one_pkt(my_transaction tr); ...
`uvm_field_int(smac, UVM_ALL_ON) `uvm_field_int(ether_type, UVM_ALL_ON) `uvm_field_array_int(pload, UVM_ALL_ON) `uvm_field_int(crc, UVM_ALL_ON) `uvm_field_int(crc_err, UVM_ALL_ON | UVM_NOPACK) `uvm_object_utils_end ...
`defineuvm_field_array_string(ARG,FLAG 这里只有4种,相比于前面的uvm_field系列宏少了event类型和real类型。另外一个重要的变化是enum类型的数组里也只有两个 参数。 与静态数组相关的uvm_field系列宏有: `defineuvm_field_sarray_int(ARG,FLAG) `defineuvm_field_sarray_enum(ARG,FLAG) ...
(my_transaction)31`uvm_field_int(dmac,UVM_ALL_ON)32`uvm_field_int(smac,UVM_ALL_ON)33`uvm_field_int(ether_type,UVM_ALL_ON)34`uvm_field_array_int(pload,UVM_ALL_ON)35`uvm_field_int(crc,UVM_ALL_ON)36`uvm_object_utils_end3738functionnew(stringname ="my_transaction");39super.new()...
这里大家注意下,数组类型声明的是uvm_field_sarray_int, 传递参数的时候还是按照int的方式传递,只不过变量名字带了数组元素下表,并且支持星号通配符。 2.5 传递string数组和enum数组 string数组、enum数组的使用方法和int数组类似,没什么可说的。参照图9的声明方法和图10的命令行参数。
2. 修改UVM源代码中的相关设定 关键宏与函数:UVM的打印机制主要通过UVM_FIELD_QDA_INT宏与UVM_FIELD_UTILS_BEGIN宏结合调用_m_uvm_field_automation函数实现。该函数根据指定的参数调用相应的打印函数。 控制打印数量的变量:在调用print函数时,最终会调用到uvm_print_array_int3宏,该宏通过uvm_print...