在SystemVerilog中所有类的方法都可以定义于类内,也可以定义于类外。一般将比较复杂的方法的实现放在类外,这样可以增加代码的可读性,而比较简单的方法在类内实现。如果什么方法的定义都放于类内部的话,那么查找一个方法将会比较麻烦。所以在实际使用时,经常将方法定义于类外,方法定义于类外一般分为两步实现:
第一步:在类内完成方法原型的声明,此时在方法原型前要使用关键字extern;
第二步:在类外实现方法,此时方法名前需要加上“类名::”,用于限定了该方法属于哪个类;
在完成了上述两步后,就完成了类内方法在类外实现的步骤。在完成了类内声明和类外定义之后,在使用时还需要注意类内和类外方法的匹配问题,也就是方法原型与实现的声明匹配问题,下面将通过示例说明常遇到的声明匹配问题。
1 方法原型有参数默认值,方法实现也有参数默认值,且默认值匹配
【示例】
【仿真结果】
示例中仿真结果显示d1和d2的值为方法参数列表中设置的默认值,所以当方法原型与方法实现的参数默认值匹配,且在调用该方法时没有传递对应的实参,那么这些参数将采用原型中设置的默认值。