|
发表于 2023-10-24 18:05:06
|
显示全部楼层
uvm里面有一个类uvm_copy_map,类里面有一个m_map[],用来实现字典的功能。
存在一个全局的uvm_copy_map uvm_global_copy_map = new,专门用来记录copy操作里面的映射关系。
copy操作的源码部分是:
...
if ((rhs!==null)&&uvm_global_copy_map.exist(rhs)) begin
return;
end
...
uvm_global_copy_map.set(rhs,this);
// do copy here
...
你的代码里面tr1.clone的时候调用了2次__m_uvm_field_automation(),第一次__m_uvm_field_automation(obj1,UVM_COPY,"")的时候map表里面还没有这组映射关系,所以if不成立,把这组句柄-对象写到了表里面,再执行了copy操作。第二次__m_uvm_field_automation(obj2,UVM_COPY,"")的时候,由于这两个句柄指向同一个对象,所以if成立,copy函数直接返回了,不再执行下面的复制操作,导致obj2的值是初始值0。 |
|