在systemverilog中支持class,class与module有些相似,此class与c++中的class类似。
class只有经过了new()函数才真正开辟了内存,否则只是一个空的、没有实际存在。
Sonet_static sta1;//此时只是一个空的sta1
sta1 = new();//真正开辟了内存空间,并进行了初始化,若在class中未实现new()函数,则会有系统默认new(),进行开辟内存工作。
static and automatic: static 变量为静态的,在整个程序执行过程中都存在,并且无论被实例多少次,在内存中只存在一份,每次实例都是指向这一个地址,共享一个变量;automatic是每次实例均产生一个新的内存,互相不共享,是单独、不同的,default默认是automatic。
static:
`timescale 1 ns / 1 ps
program sim_top();
class data_packet;
static integer Data = 32'hff;// Static variable declaration
function new();
Data--;
endfunction
endclass
initial
begin
automatic data_packet packet_one = new;
automatic data_packet packet_two = new;
$display("%d--Value of static data packet before decrement", packet_one.Data);
$display("\n%d--Value of static data packet after decrement", packet_two.Data);
end
endprogramoutput:
# 253--Value of static da

本文探讨了SystemVerilog中的class及其new()函数的使用。类的实例化需要通过new()来分配内存,否则仅是空的引用。static变量在整个程序执行期间存在并共享,而automatic变量每次实例化都会创建新的内存,互不共享。
最低0.47元/天 解锁文章
1232

被折叠的 条评论
为什么被折叠?



