OOP in Systemverilog
system verilog中的面向对象
下面的代码中,bad_tr继承tr,所以bad_tr具有了成员变量num和good的同时,也有自己的变量bad。
class tr;
bit num;
bit good;
function new();
num = 0;
good = 0;
endfunction // new
endclass // tr
class bad_tr extends tr;
bit bad;
function new();
super.new();
bad = 1;
endfunction // new
endclass // bad_tr
下面的代码,在initial块中create了两个对象,分别是m_tr和m_bad_tr,并且m_tr指向了其子类对象m_bad_tr。当想做downcast时,也就是说比如让m_bad_tr1指向tr的子类时,要用$cast函数。
tr m_tr;
bad_tr m_bad_tr;
bad_tr m_bad_tr1;
initial begin
m_tr = new();
m_bad_tr = new();
m_tr = m_bad_tr;
if ($cast(m_bad_tr1, m_tr))
$display("Successful!");
else
$display("Can not assign!");
end