验证学习记录

类class相关

  1. 基本概念
    class bad_packet extends packet
    packet 是bad_packet的父类,是一个基类,也是bad_packet的super class
    bad_packet是packet的子类,是一个扩展类,由packet衍生而来(derived class)

  2. 句柄使用事项
    2.1:派生类句柄可以赋值给基类句柄,基类句柄不能直接赋值给派生类句柄。(大的可以赋值给小的,因为小的句柄总能在大的里面找到自己需要的东西)如果一个基类句柄确实指向一个派生类对象时,可以借助$cast进行类型转换。
    2.2:super.method_name()这种调用基类方法的方式只针对于扩展类对其父类方法的调用。如果是在test中扩展类与其父类都有句柄的情况下则不能这样,需要通过句柄来调用。

  3. 虚方法
    若父类中的方法为虚方法,SV将根据对象类型而非句柄类型来调用方法。
    当定义了虚方法时,所有带有该虚方法的扩展类就必须保证有跟父类相同类型和个数的参数

UVM相关

  1. component与phase
    UVM的component是一个空间的概念,phase则是一个时间上的概念。

  2. `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注册结束的标志。

其他

其他基础知识见这篇博客

  1. 关于句柄不能悬空
    在这里插入图片描述
    因为create的参数tr并未表明其方向,所以默认为输入,因此即使在create中使用new来给tr赋予了空间,这个值并不会返回到主程序中(initial中)。

  2. 关于静态变量、动态变量、动态成员变量
    在这里插入图片描述
    静态变量就相当于全局变量,parameter这种。一旦更改就可以被全局看到;而动态变量就是一直在变。
    静态方法内可以声明并使用静态变量(而非动态变量,猜博主打错了),但不能使用类的动态成员变量,如下图所示
    在这里插入图片描述

  3. program、module、class、packet之间的层次关系
    program>packet>class=module在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值