SystemVerilog面向对象编程
传统的测试平台强调的是要做的操作:创建一个事务、发送、接收检查结果、然后产生报告。而在OOP中.你需要重新考虑测试平台的结构,以及每部分的功能。发生器(generator)创建事务并且将它们传给下一级,驱动器(driver)和设计进行会话,设计返回的事务将被监视器(monitor)捕获,记分板(scoreboard)会将捕获的结果跟预期的结果进行比对。因此,测试平台应该分成若干个(block),然后定义它们相互之间如何通信。
类class
类封装了数据和操作这些数据的子程序
//简单的transaction类
class Transaction;
bit [31:0] addr,crc,data[8];
function void display;
$display("transaction:%h",addr);
endfunction:display
function void calc_crc;
crc = addr ^ data.xor;
endfunction:calc_crc;
endclass:Transaction
定义类
在SystemVerilog中可以把类定义在program,module,package中,或者在这些块之外的任何地方。类可以在程序和模块中使用。在此之前,可以将程序块当作一个包含了测试代码的模块