【小白】UVM入门——核心基类

一、uvm_object

  • uvm世界中的类最初都是从一个uvm_void根类(root class)继承来的,而实际上这个类并没有成员变量和方法。
  • uvm_void只是一个虚类(virtual class),还在等待将来继承于它的子类去开垦。在继承于uvm_void的子类中,有两个类:uvm_object类和uvm_port_base类。
  • 除过事务接口(transaction interface)类继承于uvm_port_base,其它所有的类都是从uvm_object类一步一步继承而来的。
    在这里插入图片描述

1.核心方法

从uvm_object提供的方法的相关宏操作来看,它的核心方法主要提供域数据操作的相关服务:

  • copy
  • clone
  • compare
  • print
  • pack/unpack

2.说明

在SV模块的学习中,我们懂得了什么是句柄拷贝和对象拷贝。所以,不管是copy或者clone,都需要确保在操作过程中,需要有source object和target object。

二、域的自动化(field automation)

1.field automation 机制相关的宏

  • uvm_field_int(ARG,FLAG)
  • uvm_field_real(ARG,FLAG)
  • uvm_field_enum(T,ARG,FLAG)
  • uvm_field_object(ARG,FLAG)
  • uvm_field_event(ARG,FLAG)
  • uvm_field_string(ARG,FLAG)
    注:ARG表示成员变量,FLAG表示用来标记的数据操作。
    FLAG:初学者只需要默认采取UVM_ALL_ON或者UVM_DEFAULT,即将所有的数据操作方法都打开。

2.field automation 机制的常用函数

  • copy
  • compare
  • record
  • pack
    接下来的部分逐一介绍这些数据操作方法。

(1)copy

在UVM的数据操作中,需要对copy和clone进行区分。(无论是copy还是clone,都需要对数据进行复制)

  • copy
    copy默认已经创建好了对象,只需要对数据进行拷贝;
  • clone
    clone=new+copy;
    clone会自动创建对象并对source object 进行数据拷贝,再返回target object句柄;

(2)compare

在这里插入图片描述
默认情况下,如果不对比较的情况作出额外配置,用户可以再调用compare()方法是,省略第二个参数,即采用默认的比较配置。

  • 比较方法经常在两个数据类中进行,两者一致时,返回1,否则为0;

(3)print

打印方法是核心基类提供的另外一种便于开发和调试的功能,用于打印所有字段。

  • 通过field automation,使得声明之后的各个成员域会在调用uvm_object::print()函数时自动打印出来。
  • 相比于再仿真中设置断点,逐步调试,打印是另外一种调试方法。它的好处在于可以让仿真继续进行,会在最终回顾执行过程中,从全局理解执行的轨迹和逻辑。

(4)pack &unpack

在这里插入图片描述

  • pack
    为了将自动化声明后的域(标量)打包为比特流(bit stream),即将各个散乱的数据,整理到bit数据串中,类似于struct packed 的整理方式。
  • unpack
    与pack相反,将串行数据解包变为原有的各自域。适用于从硬件一侧接收串行数据,进行校验之后,还原为软件一侧中各自对应的成员变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值