通过上面的分析我们发现UVM_REFERENCE似乎把UVM_SHALLOW的事都干了,那么UVM_SHALLOW都干嘛了呢? grep下我们发现UVM_SHALLOW只有在联合数组相关的field_automation相关的定义里才有提到,并且还都是定义在UVM_COMPARE里,所以我们就可以把这个应用忽略不计了,基本不会使用UVM_SHALLOW(因为UVM源代码都不太支持) 关于UVM中co...
并在main_phase中,通过fork建立起两个进程,一个进程处理exp_port的数据(ref),当收到数据后,把数据放入expect_queue中;另外一个进程处理act_port的数据(dut),当收集到这些数据后,从expect_queue中弹出之前从exp_port收到的数据,并调用my_transaction的my_compare函数。
1. function bit uvm_object::compare (uvm_object rhs, uvm_comparer comparer=null); //调用比较策略器进行比较 1. The optional comparer argument specifies the comparison policy. It allows you to control some aspects of the comparison operation. It also stores the results of the comparison, such ...
function bit uvm_object::compare (uvm_object rhs, uvm_comparer comparer=null); ... __m_uvm_field_automation(rhs, UVM_COMPARE, ""); dc = do_compare(rhs, comparer); ... endfunction function void uvm_object::m_pack (inout uvm_packer packer); ... __m_uvm_field_automation(null, UV...
每个继承于uvm_object的类都可以通过comparer, printer进行compare, print操作,所以uvm便创建了一个静态类的容器,方便管理。 静态类 __m_uvm_status_container 的例化: 这个类包含了compare, printer等,一般默认使用uvm_object_globals.svh中的全局变量,uvm_default_comparer, uvm_default_table_printer。也可以自己配...
uvm_object类是所有UVM数据和层次化类的基类。它主要的角色是为像create/copy/compare/print/record这样的通用操作来定义一系列method。从uvm_object派生出来的类必须执行像create和get_type_name这样的纯虚函数。 uvm_object的methods介绍: a) new – 用给定的实例名字创建一个新的uvm_object。
图中,由宏定义`uvm_object_utils_begin和`uvm_object_utils_end包起来的部分,为域自动化部分。UVM_ALL_ON是一个用于数据操作的内容, 为什么要做域的自动化声明?因为用了域的自动化声明,把变量声明后,那么接下来的一些操作例如copy,clone,compare等函数都不需要自己实现,UVM可以自动的调用函数帮你实现,而不需要像...
UVM的第二个关键词是systemverilog类库,这些类库一方面包括了各种组件的基础代码,如uvm_driver,uvm_scoreboard,验证工程师通过扩展这些源代码,就可以为各种项目开发组件,搭建验证平台,另一方面这些类库包含了各种内建的函数,例如copy,compare,这些通用函数帮助我们减少工作...
();38 //result = get_actual.my_compare(tmp_tran);39 result = get_actual.compare(tmp_tran);40 if(result) begin 41 `uvm_info("my_scoreboard", "Compare SUCCESSFULLY", UVM_LOW);42 end43 else begin44 `uvm_error("my_scoreboard", "Compare FAILED");45 $display("the expect pkt is");...
uvm_void根类是最初的类,没有成员变量和方法,只是一个虚类,从类库地图我们可以看到根类下面有uvm_object类和uvm_port_base类,前者是大部分类的父类,提供了一些核心方法,比如copy,clone,compare,print,pack/unpack。这些方法都会被他的子类继承。后者与传输有关,后续学习。