在搭建验证平台的过程中,我们经常会看到virtual这个单词。常见的有virtual interface,virtual function/task 和virtual class。需要使用virtual的原因如下:
1、virtual interface
在整个验证环境中,我们声明的interface都必须是virtual类型的。因为真实的interface是一组接口,是不可以在class或者program中例化的。所以我们需要使用virtual interface,它是真实interface的指针,可以在class中例化。
2、virtual function/task
我们都知道SV相比于Verilog而言,新增了面向对象编程OOP的语法规则,包括封装、继承和类的多态(虚方法)。类的多态(虚方法)即指的是当使用virtual function/task时,将调用所指向对象的成员变量或者方法。
例如,当父类句柄指向子类对象时,如果父类中的function/task声明了virtual,那么该句柄将可以调用所指向的子类对象中同名的function/task。相反,如果没有声明virtual,那么只能调用父类中该function/task。
【没有添加virtual时,父类句柄不能访问子类的成员变量或方法。但是子类句柄访问父类的成员变量或方法是不受到限制的(这是因为继承的性质)。】
3、virtual class
virtual class目前用到的还比较少。暂时只需要了解virtual class只可以被继承,不可以直接例化即可。