UVM1.2 笔记1-introduction
UVM1.2 笔记1-introduction

UVM1.2 笔记1-introduction

UVM1.2 笔记1-introduction

UVM=通用验证方法学。
它基于SV语法定义了一组类库,已纳入IEEE规范。目的是提供可重用的验证组件和测试环境,提高效率。

UVM类和工具大致分为以下16组:

  • globals

uvm_pkg里定义了一系列类型/变量/函数/任务,在任意importuvm_pkg的地方都可以使用。

  • base

所有环境的基础建构模块就是组件(components),用于执行真正的工作transaction-即将信息在不同的组件和端口(接口)之间进行传递。

  • reporting

用于提交信息

  • factory

工厂模式用来创建/制造UVM对象和组件。可以配置工厂模式,以产生基于给定类型的对象。

工厂模式支持动态配置组件层次和对象置换,无需修改代码或打破封装。

  • phasing

UVM实现了一种自动机制,将一个testench中各种组件的执行自动分为不同相位。

  • configuration and resources

这一组类提供了配置数据库。该配置数据库用于存储和恢复配置时间和run time等属性。

uvm_resource_db是底层资源数据库,可供读写;uvm_config_db是顶层资源数据库,且提供了一个类型化的配置接口。

一项resource可以跟特定的层次化的uvm_conponent相关联,也可以无关hierachy、对所有components可见。

  • synchronization

UVM提供了事件和关卡的同步控制类,用于处理同步控制。用于管理并行处理。

uvm_event/uvm_barrier/uvm_pool/uvm_event_callback

  • containters

容器类是类型参数化的数据结构,提供了队列和pool服务。

相较于SV中内建的容器,基于该容器类的队列和pool类型允许数据结构的高效共享。

  • policies

策略类基于uvm_object基类,实现了一个特定任务:打印,比较,记录,组包,解包。他们和uvm_object类分开执行,这样用户可以植入不同的打印/比较方式等等。

  • TLM

UVM TLM库定义了几种抽象的transaction级接口,以及方便他们应用的ports和exports。

每个TLM接口由一种或多种一次数据(整个transactions)传输方法组成。

这样使用TLM ports/exports来交流的组件设计方法本身就具有更好的重用性,互通性,模块化。

TLM1提供了阻塞和非阻塞的传数据接口,是基于数值传递的,在语义方面仅限于message传递。

TLM2相较于TLM1,具备了定义更加完善的完备语义。

  • components

组件构成了UVM的基础。他们封装了driver的行为, scoreboard行为, 和一个testbench中所需其他对象的行为。

UVM库提供了一组预定义的组件类型,都是uvm_component的直接派生类或间接派生类。

  • sequencers

序列器作为仲裁器,用来控制从多个激励产生器生成的transaction流。

更具体来讲,序列器控制基类是uvm_sequence_item的transaction流,这些transaction流由一个或多个序列产生(这些序列的基类都是uvm_sequence)。

序列器有两种变体,uvm_sequencer和uvm_push_sequencer. 前者由driver直接驱动,后者由序列器push给driver。

序列器-driver之间的通信有pull/push两种,取决于使用的序列器类型。但是序列-序列器之间的通信永远是由序列发起的,即总是follow push机制。

同所有的UVM组件一样,序列器和driver都是用TLM接口来传递transactions。序列器-driver对还会使用一个sequence item pull port来实现语义需求的特殊操作。

seq_item_port;

(uvm_seq_item_pull_port/uvm_seq_item_pull_export/uvm_seq_item_pull_imp)

  • sequences

*序列封装了用户自定义的程序,用于产生多种transaction(uvm_sequence_item基类)。

这些序列可以被重用,派生,随机化,可以时序化和层次化地组合起来,以各种有效地方式来为DUT产生真实的激励。

uvm_sequence类是uvm_sequence_item类的派生类。

  • macros

UVM提供了几种宏,用于提高生产力。主要用于reporting/components/object/sequence/cakkbacks/TLM/registers。

  • register layer

寄存器层是寄存器抽象类的组合,加以合理地派生,可以抽象出一个DUT下所有寄存器/memory的读写操作。

因为每个dut的寄存器都不一样又都很多,所以一般这些类需要由模块生成器(which is脚本)来产生。模块生成器的输入文件是一份最新的寄存器规格说明(which is ralf文件)。

模块生成器不在uvm库的体系之内。

  • command line processor

命令行处理器提供了一个通用接口,用来处理给定仿真中提供的命令行语句。

这个类本打算作为单一实例使用,但是没有这个应用需求。持有命令行语句信息的数据结构在构造类对象的时候产生。

在初始化阶段会创建一个全局变量uvm_cmdline_proc,可以用于获取命令行信息。

uvm_cmdline_processor: 该类的基类是uvm_report_object(which基类is uvm_object).

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注