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