一、类和继承
类的第二核心要素,即类的“继承”,继承也符合我们认识实际的观点,在自然界和科学界我们对世界的认识无外乎归纳法和演绎法。
归纳论证是一种由个别到一般的论证方法。它通过许多个别的事例或分论点,然后归纳出它们所共有的特性,从而得出一个一般性的结论。所以从具体对象抽象出类的属性和方法,就符合定义类时的思维方式。
class cat;
protected color_t color;
local bit is_good;
function set_good(bit s);
this.is_good = s;
endfunction
endclass
class black_cat extends cat; //extends 继承
function new();
this.color = BLACK;
endfunction
endclass
class white_cat extends cat;
function new();
this.color = WHITE;
endfunction
endclass
black_cat bk;
white_cat wk;
initial begin
bk=new();
wt=new();
bk.set_good(1);
wt.set_good(1);
end
如果我们要将数据发送给dut,那么需要有以下的基本元素和数据处理方法,我们将它封装到Transaction类种。
class Transaction;
rand bit [31:0] src,dst,data[8]; //随机成员变量
bit [31:0] crc ; //二次处理后的成员数据
virtual function void clac_crc();
crc=src^ dst^ data.xor ;
endfuction
virtual function void display( input string prefix= “”);
$display("%sTr: src=%h, dst=%h , crc=%h ", prefix, src, dst crc);
endfuction
endclass
如果我们为了测试DUT 的稳定性 ,需要加如一些错误的数据来测试DUT的反馈,但我们又想复用原有的验证环境(也包括定义好的类)
那我们就需要考虑使用继承的方式来创建一个类BadTr。