类class相关
-
基本概念
class bad_packet extends packet
packet 是bad_packet的父类,是一个基类,也是bad_packet的super class
bad_packet是packet的子类,是一个扩展类,由packet衍生而来(derived class) -
句柄使用事项
2.1:派生类句柄可以赋值给基类句柄,基类句柄不能直接赋值给派生类句柄。(大的可以赋值给小的,因为小的句柄总能在大的里面找到自己需要的东西)如果一个基类句柄确实指向一个派生类对象时,可以借助$cast进行类型转换。
2.2:super.method_name()这种调用基类方法的方式只针对于扩展类对其父类方法的调用。如果是在test中扩展类与其父类都有句柄的情况下则不能这样,需要通过句柄来调用。 -
虚方法
若父类中的方法为虚方法,SV将根据对象类型而非句柄类型来调用方法。
当定义了虚方法时,所有带有该虚方法的扩展类就必须保证有跟父类相同类型和个数的参数
UVM相关
-
component与phase
UVM的component是一个空间的概念,phase则是一个时间上的概念。 -
`uvm_object_utils与field automation机制
2.1:uvm_object_utils_begin总与uvm_object_utils_end成对出现,其一般出现于field_automation机制使用时。
2.2:field automation机制是对事务进行copy、print、compare、clone等操作的机制,一般先定义field_automation机制的成员,再定义该机制需要进行什么样的操作。
2.3:uvm_object_end为factory注册结束的标志。
其他
其他基础知识见这篇博客
-
关于句柄不能悬空
因为create的参数tr并未表明其方向,所以默认为输入,因此即使在create中使用new来给tr赋予了空间,这个值并不会返回到主程序中(initial中)。 -
关于静态变量、动态变量、动态成员变量
静态变量就相当于全局变量,parameter这种。一旦更改就可以被全局看到;而动态变量就是一直在变。
静态方法内可以声明并使用静态变量(而非动态变量,猜博主打错了),但不能使用类的动态成员变量,如下图所示
-
program、module、class、packet之间的层次关系
program>packet>class=module