SV中的深拷贝、浅拷贝与句柄复制

SV中的深拷贝、浅拷贝与句柄复制

  1. 句柄复制
    只复制句柄,相当于两个句柄指向同一个对象,永远都只有一个对象
module tb;
class trans1;
    int A = 1,B = 2;
    function FA();
    endfunction
 endclass
  
 class trans2;
    int A1 = 3,B1 = 4;
    trans1 a = new(); // trans2 里边套一个trans1
    function FB();
    endfunction
endclass
 
 initial begin
    trans2 b = new();
    // 句柄复制
    trans2 c = b;
    c.A1 = 13;    
    c.a.A = 11;  
  end
   
endmodule

改了c句柄里边的内容,b句柄里边的内容会同步更改。因为他们都指向了同一个对象。
在这里插入图片描述

================================================
2. 深拷贝和浅拷贝都是指拷贝一个对象,而不是句柄。
浅拷贝时,只会拷贝b对象中的 成员变量A1 ,B1的句柄a,而不会拷贝句柄a所指向的对象中的内容;
深拷贝时,不仅仅会拷贝当前b的对象的成员变量,还会拷贝b实例中的a句柄的对象内容,即进行深层次的复制

1) 浅拷贝

module tb;
class trans1;
    int A = 1,B = 2;
    function FA();
    endfunction
 endclass
  
 class trans2;
    int A1 = 3,B1 = 4;
    trans1 a = new(); // trans2 里边套一个trans1
    function FB();
    endfunction
endclass
 
 initial begin
    trans2 b = new();
   // 浅拷贝 
    trans2 d = new b; // d浅拷贝b,只会拷贝b中的变量和a的句柄。
    d.A1 = 23;        // 更改d句柄指向的trans中的元素
    d.a.A = 21;       // 更改d句柄指向的trans中a句柄指向的对象的元素
    #20;
  end
   
endmodule

很明显,我更改了d句柄指向的trans中的A1,和d句柄指向的trans中a句柄指向的对象的元素A。
最后b中的A1没有发生任何变化。但是b中句柄a中(套中套)的变量****同步变化了,d中的a的值变为21 2,b中也跟着这样变化。
在这里插入图片描述
在这里插入图片描述

2 ) 深拷贝需要自定义方法。或者用uvm_copy。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan_WC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值