uvm ch20 深copy
do_copy /convert2string这些函数在使用field_automation的时候不用自己写,否则需要自己实现;建议自己实现方便调试;
convert2string
在本类中只处理这个类新增加的数据成员,其他的调用super实现;
class mammal extends animal;
int babies_in_litter;
function new(int a = 0, b = 0);
super.new(a);
babies_in_litter = b;
endfunction : new
function string convert2string();
return {super.convert2string(),
$sformatf("\nbabies in litter: %0d",babies_in_litter)};
endfunction : convert2string
function void do_copy(animal copied_animal);
mammal copied_mammal;
super.do_copy(copied_animal);
$cast(copied_mammal, copied_animal);
babies_in_litter = copied_mammal.babies_in_litter;
endfunction : do_copy
endclass : mammal
class lion extends mammal;
bit is_female;
function new(int age = 0, int babies_in_litter = 0, bit is_female = 0);
super.new(age, babies_in_litter);
this.is_female = is_female;
endfunction : new
function string convert2string();
string gender_s;
gender_s = (is_female) ? "Female" : "Male";
return {super.convert2string(), "\nGender: ",gender_s};
endfunction : convert2string
function void do_copy(animal copied_animal);
lion copied_lion;
super.do_copy(copied_animal);
$cast(copied_lion, copied_animal);
this.is_female = copied_lion.is_female;
endfunction : do_copy
endclass : lion
class captive_lion extends lion;
string name;
function new(int age=0, int babies_in_litter = 0, bit is_female=0, string name="");
super.new(age,babies_in_litter, is_female);
this.name = name;
endfunction : new
function string convert2string();
return { super.convert2string(),"\nName: ", name };
endfunction : convert2string
function void do_copy(animal copied_animal); //终点 是animal 类型的
captive_lion copied_captive_lion;
super.do_copy(copied_animal);
$cast(copied_captive_lion, copied_animal);
this.name = copied_captive_lion.name;
endfunction : do_copy
endclass : captive_lion
class circus_lion extends captive_lion;
byte numb_tricks;
function new(int age=0, bit is_female=0, int babies_in_litter = 0,
string name="", byte numb_tricks=0);
super.new(age,babies_in_litter, is_female, name);
this.numb_tricks = numb_tricks;
endfunction : new
function string convert2string();
return {super.convert2string(),"\n",
$sformatf("numb_tricks: %0d",numb_tricks)};
endfunction : convert2string
function void do_copy(animal copied_animal);
circus_lion copied_circus_lion;
super.do_copy(copied_animal);
$cast(copied_circus_lion, copied_animal);
this.numb_tricks = copied_circus_lion.numb_tricks;
endfunction : do_copy
endclass : circus_lion