目录
virtual在uvm是一个经常看到的关键字,这个关键字与OOP三大特性(封装,继承,多态)中的多态特性息息相关,下面主要介绍一些virtual的三种常见用法。
通过virtual声明的类,接口,任务与函数,其本身自带一些方法或者函数。后续的例化或者扩展可以对原有的内容进行增加或者修改,从而实现同一函数不同方法的多种形态。
1、virtual class
不能被直接例化的类被定义为虚类,也就是说这都是概念类,没有能直接对应的实体,只能被扩展(重载)后实例化。比如动物就是虚类,而人类可以被理解为可以直接例化的实类。SV中一般用这个定义最基层的类,防止这些类被错误使用。
虚类中的方法通常使用关键字 " pure virtual " 纯虚方法。同时OOP规定,只要class中存在一个没有被实现的pure function,就不允许例化这个class。
UVM中一个显著虚类是uvm_void:里面不包含任何成员变量以及函数,是所有其他UVM类的基类。
virtual class uvm_void;
endclass
2、virtual function/task
这种使用对应着面向对象中多态的概念。以下SV语法说明自带的例子很好的解释了这种用法
class BasePacket;
intA = 1;
intB = 2;
function void printA;
$display("BasePacket::A is %d", A);
endfunction: printA
virtual function void printB;