现在我正在尝试研究systemverilog的clss。
从许多类别的例子中,我发现了新的'有两种类型。
构造函数的实现之间有什么区别吗?
另外,函数new()中有什么? 我不确定函数new()
中的用途是什么例如1是。 类xxx ... 功能new(); ... endfunction可写
Endclass
示例2
program
class xxxx
endclass
Initial begin
xxxx x = new;
end
endprogram
谢谢你让我知道。 我有一个问题。
之间有什么区别?Class xxx
...
Function new();
(Variable initialization)
...
Endfunction
Endclass
并且
Class xxx
...
Function new();
(Nothing variable initialization)
Endfunction
Endclass
但是在这种情况下要传递初始语句或任务中的值。 函数new()endfunction是什么?我不确定是否需要初始化变量?
class packet;
//class properties
bit [31:0] addr;
bit [31:0] data;
bit write;
string pkt_type;
//constructor
function new(bit [31:0] addr,data,bit write,string pkt_type);
addr = addr;
data = data;
write = write;
pkt_type = pkt_type;
endfunction
//method to display class prperties
function void display();
$display("---------------------------------------------------------");
$display("\t addr = %0h",addr);
$display("\t data = %0h",data);
$display("\t write = %0h",write);
$display("\t pkt_type = %0s",pkt_type);
$display("---------------------------------------------------------");
endfunction
endclass
module sv_constructor;
packet pkt;
initial begin
pkt = new(32'h10,32'hFF,1,"GOOD_PKT");
pkt.display();
end
endmodule
这就是我的代码。 你可以看到,
两种类型的功能块声明。
1. is with new
function new(bit [31:0] addr,data,bit write,string pkt_type);
addr = addr;
data = data;
write = write;
pkt_type = pkt_type;
endfunction
2. is without new.
//method to display class prperties
function void display();
$display("---------------------------------------------------------");
$display("\t addr = %0h",addr);
$display("\t data = %0h",data);
$display("\t write = %0h",write);
$display("\t pkt_type = %0s",pkt_type);
$display("---------------------------------------------------------");
endfunction
答案 0 :(得分:0)
调用类的new()方法是构造类对象的唯一方法。您可能想要定义一个类并且从不在其上调用new()方法有几个原因,但是当您对SystemVerilog有更好的理解时,您应该稍后提出这个问题。
我想您可能会问在类
中声明函数new()的类之间有什么区别class xxxx;
int x;
function new;
...
endfucntion
endclass
与没有它的班级相比
class xxxx;
int x;
endclass
如果未在类中声明函数new(),SystemVerilog会为您定义一个隐式函数。您可能希望在类中声明一个新函数的原因是,如果要将参数传递给构造函数,或者您需要更复杂的过程代码来初始化。