SystemVerilog中的类的赋值

描述

当我们声明一个类时还没有分配内存,只有在实例化(new())时才会分配内存。这个时候对象句柄指向被分配的内存,下面是对象句柄赋值的示例:

 

class PCI;
 ……
 endclass
 PCI p1; //a variable 'p1' of type PCI is created.
 //Memory is not allocated.
 p1 = new; //this is where memory is allocated for 'p1'.

 PCI p2;
 p2 = p1; //class assignment

 

在上面的例子中,p2是一个PCI类型的变量(尚未完成实例化分配内存),而p1是一个完成了实例化的对象句柄。

当赋值p2 = p1时,实际上还是只有一个对象,“p1”和“P2”对象句柄现在都指向相同的内存空间。

正因为它们都指向相同的内存空间,所以“p1”对象的变化将反映到“p2”对象,反之亦然。

System

 

module class_TOP( );
 class PCITop;
 logic [31:0] addr;
 logic [31:0] data;
 function void disp (string instName);
 
 $display("[%s] addr = %h data = %h", instName, 
addr, data);
 endfunction
 endclass : PCITop
 
 PCITop PCI1, PCI2;
 
 initial begin;
 PCI1 = new;//create object PCI1
 PCI2 = PCI1; //class assignment
 PCI1.addr = 'h1234_5678; //using PCI1 handle
 PCI1.data = 'hf0f0_f0f0;
 PCI1.disp("PCI1");
 PCI2.disp("PCI2");
 PCI2.addr = 'h8765_4321; //using PCI2 handle
 PCI2.data = 'hff_0101;
 PCI1.disp("PCI1");
 PCI2.disp("PCI2");
 end
 endmodule

 

仿真log:

 

[PCI1] addr = 12345678 data = f0f0f0f0
[PCI2] addr = 12345678 data = f0f0f0f0
[PCI1] addr = 87654321 data = ffff0101
[PCI2] addr = 87654321 data = ffff0101
 V C S S i m u l a t i o n R e p o r t

 

上面的例子中,我们对对象“PCI1”的修改能反映到“PCI2”,对对象“PCI2”的修改也反映到了“PCI1”。

  审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分