sv copy

Posted littlema

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sv copy相关的知识,希望对你有一定的参考价值。

1. 使用new操作符复制一个对象

 1 class Header;
 2     int id;
 3     function new (int id);
 4         this.id = id;
 5     endfunction
 6     
 7     function showId();
 8         $display ("id=0x%0d", id);
 9     endfunction
10 endclass
11 
12 class Packet;
13     int     addr;
14     int     data;
15     Header     hdr;
16     
17     function new (int addr, int data, int id);
18         hdr = new (id);
19         this.addr = addr;
20         this.data = data;
21     endfunction
22     
23     function display (string name);
24         $display ("[%s] addr=0x%0h data=0x%0h id=%0d", name, addr, data, hdr.id);
25     endfunction
26 endclass
27 
28 module tb;
29     Packet p1, p2;
30     initial begin
31         // Create a new pkt object called p1
32         p1 = new (32hface_cafe, 32h1234_5678, 26);
33         p1.display ("p1");
34         
35         // Shallow copy p1 into p2; p2 is a new object with contents in p1
36         p2 = new p1;
37         p2.display ("p2");
38         
39         // Now let‘s change the addr and id in p1
40         p1.addr = 32habcd_ef12;
41         p1.data = 32h5a5a_5a5a;
42         p1.hdr.id = 17;
43         p1.display ("p1");
44         
45         // Print p2 and see that hdr.id points to the hdr in p1, while
46         // addr and data remain unchanged.
47         p2.display ("p2");
48     end
49 endmodule

技术图片

 这是一种简易复制(shallow copy),原对象的值被盲目copy到对象中,如果类A1中包含一个指向另一个子类B的句柄,那么复制类A2中只是复制了子类B的句柄,A1和A2中的B对象指向的是同一个对象。

2. 定义copy函数,实现深拷贝

 1 class Header;
 2     int id;
 3     function new (int id);
 4         this.id = id;
 5     endfunction
 6     
 7     function showId();
 8         $display ("id=0x%0d", id);
 9     endfunction
10 endclass
11 
12 class Packet;
13     int     addr;
14     int     data;
15     Header     hdr;
16     
17     function new (int addr, int data, int id);
18         hdr = new (id);
19         this.addr = addr;
20         this.data = data;
21     endfunction
22   
23    function copy (Packet p);
24       this.addr = p.addr;
25       this.data = p.data;
26       this.hdr.id = p.hdr.id;
27    endfunction    
28   
29     function display (string name);
30         $display ("[%s] addr=0x%0h data=0x%0h id=%0d", name, addr, data, hdr.id);
31     endfunction
32 endclass
33 
34 module tb;
35     Packet p1, p2;
36     initial begin
37         p1 = new (32hface_cafe, 32h1234_5678, 32h1a);
38         p1.display ("p1");
39         
40         p2 = new (1,2,3);  // give some values
41         p2.copy (p1);
42         p2.display ("p2");
43         
44         // Now let‘s change the addr and id in p1
45         p1.addr = 32habcd_ef12;
46         p1.data = 32h5a5a_5a5a;
47         p1.hdr.id = 32h11;
48         p1.display ("p1");
49         
50         // Now let‘s print p2 - you‘ll see the changes made to hdr id 
51         // but not addr
52         p2.display ("p2");
53     end
54 endmodule

技术图片

 

以上是关于sv copy的主要内容,如果未能解决你的问题,请参考以下文章

论文阅读 SV-RCNet: Workflow Recognition From Surgical Videos Using Recurrent Convolutional Network

超实用的php代码片段

还在做SNP-GWAS?来看看SV-GWAS吧!

11SpringBoot-CRUD-thymeleaf公共页面元素抽取

thymeleaf

thymeleaf公共页面元素抽取