数字IC验证学习,uvm资源库uvm componentuvm平台的结构树

Posted IC设计_云一哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字IC验证学习,uvm资源库uvm componentuvm平台的结构树相关的知识,希望对你有一定的参考价值。

本章的重要内容是关于uvm平台组件的一些相关知识,主要内容有uvm的资源库,然后是uvm所有平台组件最基本的类uvm component,最后是uvm平台的结构树。

接下来主要简单的介绍一下uvm的资源库,uvm是通过类的继承和封装来实现的。uvm作为一种验证方法学有三个层次的内容:
在这里插入图片描述

第一层,是数据建模的简称,它是uvm重要的通讯机制,用于平台各个组件之间的连接。

第二层,结构要素,它包含了平台组件,信息服务系统,以及平台的执行阶段等等。

第三层,方法学,uvm的主要目的是可以使平台具有很高的重用性,它提供了用于实现平台重用的接口,使用这些接口配置的验证工程师在不改变原来代码的情况下,更改平台的配置,替换平台的组件,更换不同的测试激励等等,甚至可以改变仿真的行为。

下面来看一下uvm库文件的目录结构:
在这里插入图片描述

在根目录下,包含了uvm的参考文档,uvm的发布信息。

在bin子文件夹下放置着用于ovm与uvm代码实现相互转化的脚本文件,重点就是src文件夹所有的源文件均在于此;

base中是uvm最底层的库文件,里面包含了一些最基本的类,这些类是uvm自己用来扩展的;

comp中是经常会用到的基类,是构成平台组件的基础,比如uvm driver,uvm monitor等基类;

dpi以及rag分别是dpi接口的支持文件以及il组件,il可以用来建立dut的寄存器模型;

macros中包含了所有的宏文件,比如之前所用到的uvm infer,uvm object,utl等宏;

seq包含了由于创建事物和sequencer上的基类;

tlm包含了用于组件间通信的类;

uvm_packed.sv这个文件将uvm的所有空文件包含进来,所以在编译的时候,只需要编译这个文件即可;

uvm_ macros这个文件包含了uvm所有的宏定义文件,也需要对它进行编译;

在uvm中经常提到和使用的基本类有三种:

第一种是uvm component,它是用来构建uvm测试平台最基本的类,像uvm driver这种基类都是扩展于它。

第二种是uvm objection,可以将它看作是uvm的一种数据结构,可以作为配置对象来配置测试平台。

第三种是uvm transaction,使用它作为事物进行建模,产生激励或者是收集响应,在下节课中,开始讲述uvm component的相关内容。

到底什么是uvm的平台组件呢?

先来看一下uvm源码库当中一些相关类的继承关系,其中箭头的方向表示基类,在uvm当中,一个比较基本的类是uvm object,以这个类为基类,uvm向下分为两个分支进行扩展。

在这里插入图片描述

一方面扩展出了uvm report object这样一个类,又去添加了信息报告的属性,这个类作为一个中间的延伸类,一般不使用,在uvm report object的基础上,才扩展出了由于构建测试平台组件的uvm component类,在这个类中,增加了组件所具有的特殊属性,比如组件的分层组件的phase机制,以及可以对组件进行配置的接口等等,我们称这一分支为component分支,因为它是专门为构建组件扩展而来的。

另一方面,uvm object又扩展出了uvm transaction类,这个类也是一个中间的延生类,一般不使用,接着扩展出了用于对事物建模的uvm section类,在这个类中增加了sequence hooks,这是为将事物与sequence相关联而服务的,最后扩展出了uvm sequence类,在这个类中,为其增加了专门用于产生事物对象的body方法,因为这一分支是为事物服务的,所以称之为sequence分支。

作为构成uvm测试平台,组件最基本的类evm component,它具有了平台组件最基本的特性,为了再次减少验证工程师的工作量,uvm对平台组件进行了进一步的细分。

在这里插入图片描述

以uvm component为基类,分别扩展出了功能更加专一的其他基类,比如为driver和sequencer添加彼此互联的端口等等,

通常情况下,我们将driver,monitor,agent等这些通称为uvm的平台组件,uvm component的另一个特点就是具有phase的自动执行机制,component的功能都在这些phase中完成,所以在构建component的时候,在什么的phase当中完成什么样的功能是关键,uvm平台结构的基本要素是组件,这些组件经过一定的方式构成了一个叫uvm结构树的层次结构,在这个结构树中组件是结构树上的节点,平台中的任何一个组件都应该属于结构树的一个节点,通过向组件的构造函数parent参数传递一个对象锯饼来层层构建整个uvm结构数。

uvm层次结构的结构树:

通过对之前代码的分析逐步了解uvm的结构树是如何建立起来的,先从底层上来看:
在这里插入图片描述

在agent当中通过uvm的factory机制实例化了三个组件,分别是my sequencer,my driver以及my monitor,

而在这三个组件的构造函数当中,有一个类型为uvm component的parent参数,在进行实例化的时候,agent将this指针传递给了这个parent参数,由此来表示,agent是它们的副对象,以driver为例,agent在实例化driver的时候,将自己的指针this作为driver构造函数的参数传递进去,在执行driver构造函数的时候,抓获的实例化对象就将该参数指针作为自己的副对象,monitor以及sequencer与driver类似,结果就是agent一共有三个子对象,sequencer,driver以及monitor。
在这里插入图片描述

接着往上一层上来看,agent会在env中进行实例化,同样的,agent的构造函数也有parent参数,在实例化agent的时候,env将自己的句柄this传递给agent的构造函数,agent在执行构造函数的时候,就会将env作为自己的副对象,前面讲到,agent当中又包含了my sequencer,my driver以及my monitor三个子对象。
在这里插入图片描述

继续来看最顶层testcase,在testcase当中实例化env,testcse将自己的this句柄作为参数传递给env的构造函数,在执行env的构造函数时,env将test作为自己的副对象,env当中有包含了agent子对象,agent又包含了my sequencer,my driver以及my monitor三个子对象,通过对代码的分析,已经清楚了测试平台之间各个组件之间的关系。

下面把这种关系用树状结构表示出来:

在这里插入图片描述

最上evm test top,这是我们定义的testcase,testcase的名字是固定的,uvm总是会把testcase的名字赋值为uvm_test_top,在testcase下是它的子对象my uvm,my uvm的子对象是my agent,在my agent中包含了三个子对象,my driver,my monitor以及my sequencer,对于每一个uvm测试平台来说,都有一个对应的树状结构,我们把这种树状结构称为uvm的结构树。

上面是经过简化平台之后的结构树,但在通常的情况下,因为结构树要稍微有些复杂。
在这里插入图片描述

比如,之前看到了一个典型的一uvm平台的结构,它包含的内容相当丰富,env中包含了更多的子对象,将它的结构用uvm的结构树表示,就变成了,树根是testcase,testcase下面包含了env子对象,env包含了master agent,reference model以及是scoreboard和slave agent,而master agent和slave agent,又分别包含了driver,monitor和sequencer子对象。
在这里插入图片描述

uvm结构树可与之前在一个文件当中打印的平台结构做对照,从打印的结构上来看,最顶层是testcase的实例化名uvm_test_top,这个名字是由uvm决定的,事实上,uvm_test_top并不是uvm结构树的根节点,真正的根节点是一个叫uvm root的类。

当启动uvm平台时,uvm会自动创建这个类的一个对象,并命名为uvm top,这个操作由uvm自动完成,不需要外界干预,

所以说,对每一个uvm测试平台,他们的结构树的根节点均为uvm top,uvm的结构树构成了平台组件之间的逻辑层次结构,这个逻辑层次结构是实现uvm其他功能的重要基础。

那么uvm为什么要构建这种结构呢?

第一这种结构要为uvm的configuration机制提供搜索路径;

第二为uvm的overwrite机制提供搜索路径;

第三为phase的连锁执行提供连接,uvm的逻辑层次结构是实现uvm其他机制和功能的基础。

就到这里吧,下次在更新,

以上是关于数字IC验证学习,uvm资源库uvm componentuvm平台的结构树的主要内容,如果未能解决你的问题,请参考以下文章

UVM系统验证基础知识0(Questasim搭建第一个UVM环境)

请教高手关于uvm验证方法学的学习入门

从零开始学习 UVM4.1UVM Phases —— UVM Phases 介绍

uvm学习杂记

UVM学习记录1:验证平台的各个组件

与uvm_componentt相关的factory宏