1)systemverilog中的virtual 使用
我们会经常看到virtual interface、virtual task、virtual function、virtual class,什么意思呢?
virtual声明的是一个模板,后续的例化和引用不会修改virtual后面的内容。
例如
virtual task cb_pre_run( );
$display("base callback run");
endtask:cb_pre_run
其他的任务在调用此task时,不会将cb_pre_run的任务修改。
如果没有定义virtual时,任意一个任务调用cb_pre_run时,修改了内部的值,则其他的任务也会相应的调用修改之后的值。
当virtual 后面定义的任务或者接口等会被继承时,一般添加virtual。
2) interface、class的区别
接口是为了方便的连接各模块,
接口的定义:在模块和程序块之外进行定义;
modport 可以分割interface中的信号。
class 是具有共同特性的类,类中可以定义各种特性,函数,interface不行。