What is UVM ?
SV是一门语言有自己的语法和结构,而UVM是SV类的结构框架,从中可以建立完整功能的testbench.简单来说,UVM就是由一系列基本类(类中定义了一系列的方法)组成的类库,SV的验证环境可以通过继承这些基本类来搭建.
Why do we need UVM ?
UVM列举了一系列的指导准则用于testbench的搭建,这保证了不同验证团队之间、不同验证IP之间的统一.也就是说UVM制定了testbench的搭建标准,这有以利于testbench在不同的团队之间共享.
What is the UVM class hierarchy ?
UVM提供了一系列的基类,通过继承这些基类可以定义更加复杂的类.例如,一个新的driver类可以通过继承uvm_driver类来定义.
uvm_void是所有类的基类,通常这个类是空的.uvm_object是主类,在这个类中通用方法例如print、copy等被定义.
在实际的UVM中,所有的类都派生自uvm_object或uvm_component,组件全部派生自uvm_component,uvm_object与uvm_component不是等同的,后者派生自前者! 这说明了component具有object的全部特性,而component还具有自己独有的特性,主要包括两点:(1)通过在new方法中加入parent参数,来将组件添加到uvm树形组织结构中;(2)phase自动执行机制
注意,只有派生自uvm_component的组件才会出现在树形组织结构中!!
上面的层次图主要有两个分支,第一个主要包括验证的组件例如driver、monitor,它们都是uvm_report_object的子类;另一个是被验证组件接收的数据对象,它们都是uvm_transaction的子类.
UVM主要由以下种类构成:
(1)uvm_object
核心类包含了常用的一些方法,所有的uvm_transaction和uvm_component都由继承它而来;在定义类时,除了组件以外,几乎所有的类都是派生自uvm_object;派生自uvm_object的类用uvm_object_utils宏在factory中注册
(2)uvm_transaction
用于产生和分析激励;
(3)uvm_component
component都是静态的,贯穿于整个simulation;
(4)UVM sequence
UVM引入了一个概念:sequence.它包含了输入到设计中的激励.用户所有新建的激励类都可以继承与uvm_sequencer类.
(5)UVM Sequence Items
要输入到DUT中的数据对象通常叫做sequence items,并且可以从uvm_sequence_item继承得到.
(6)Register Layer
设计通常要求控制那些可以被软件配置的寄存器,这对于SV来说是很复杂的,因为对于每个设计你都必须创建一个单独的类来保存和配置这些寄存器.而UVM提供了一系列的类来解决这个问题,这就是register model.
(7)TLM Connections
TLM用于各个component之间的通信.
(8)UVM Phases
这个下面再详细介绍.