UVM 基础入门(一)

本文介绍了UVM的基础框架,包括组件(如sequencer、driver、monitor、agent、scoreboard和env)及其关系。此外,还详细讲解了uvm_object类的预定义方法,如clone、print、compare等,以及UVM的消息管理和域的自动化。最后提到了参数化的数据类在UVM中的应用。
摘要由CSDN通过智能技术生成

一、框架

框架一

img

构成环境的组件都从uvm_component类继承而来,这是因为它们都从uvm_component类继承了phase机制,都会经历各个phase阶段。常见组件如下:

  • uvm_sequencer:所有的sequencer都要派生自uvm_sequencer。
          sequencer功能:组织管理sequence,driver申请数据时,它就把sequence生成的sequence_item发给driver

  • uvm_driver:所有的driver都要派生自uvm_driver。
         driver功能:向sequencer申请sequence_item(数据包),并将包里的信息按照总线协议规定驱动到DUT的端口上。

    //uvm_driver定义
    class uvm_driver #(type REQ=uvm_sequence_item,type RSP=REQ) extends uvm_component;
    
  • uvm_monitor:所有的的monitor都要派生自uvm_monitor。
         monitor功能:为了检测接口数据,从DUT接收数据,并将其转成transaction级别的sequence_item,发送给scoreboard,供其比较

  • uvm_agent:所有的agent要派生自uvm_agent。
         agent功能:将sequencer、driver和monitor封装在一起,agent模块的使用提高了代码的可重用性
         (UVM_ACTIVE/UVM_PASSIVE、两种模式)

  • uvm_scoreboard:一般的scoreboard都要派生自uvm_scoreboard。
         scoreboard功能:比较reference model和monitor分别发送来的数据,根据比较结果判断DUT是否正确工作。

  • uvm_env:所有的env要派生自uvm_env。
         env功能:将平台上的component组件封装在一起,实现一个环境多个用例。运行不同用例时,在其中实例化env即可。可以看做一个结构化的容器。

  • uvm_test:所有的测试用例要派生自uvm_test或其派生类
         任何一个派生的测试用例中,都要实例化env。这样,当用例运行时,才能把数据发给DUT,并接收DUT的数据。

  • reference model:UVM中并没有针对reference model定义一个类。通常,reference model直接派生自uvm_component
         作用就是模仿DUT,完成与DUT相同的功能。DUT是用Verilog写成的时序电路,而reference model则可以直接使用SystemVerilog高级语言的特性,同时还可以通过DPI等接口调用其他语言来完成与DUT相同的功能。

框架二

img

框架三

在这里插入图片描述

二、各组建关系

component与object是UVM中最基本的两个概念

uvm_object是UVM中最基本的类,几乎全部的类都是由uvm_object类派生出来,其中包含uvm_component。

uvm_object 提供的核心方法主要提供与数据操作的相关服务,CopyCloneComparaPrintpack/unpack

uvm_component有两大特性是uvm_object所不具备的。

  • **一是通过在new的时候必须要指定parent参数来产生一种树形的组织结构
  • 是具有phase的自动执行特点所有的UVM树的结点都是由uvm_component构成的,只有基于uvm_component派生出的类才有可能是UVM树的结点。UVM中一些常见类的继承关系如图3所示。

img

三、uvm_object类

类的预定义

预定义uvm_object的相关扩展类,以便在uvm_object的相关方法中调用:

typedef class uvm_report_object;
typedef class uvm_object_wrapper;
typedef class uvm_objection;          // uvm_object类中未使用
typedef class uvm_component;          // uvm_object类中未使用
typedef class uvm_status_container;

类的方法

类的声明

virtual class uvm_object extends uvm_void;
endclass

变量声明

  // 静态变量,决定是否使能UVM中的播种机制,影响全局的reseed()方法;
  static bit use_uvm_seeding = 1;
  
  // 局部变量,通过new函数将类的实例化名传递给该变量,变量对子类及外部不可见;
  local string m_leaf_name;

  // 局部变量,使用new()函数实例化类时,m_inst_count自动加1并传递给该局部变量,用于返回实例化id,变量对子类及外部不可见;
  local int m_inst_id;

  // 静态局部变量,用于返回实例化次数,该局部变量对子类可见,对外部不可见;
  static protected int m_inst_count;

  static uvm_status_container __m_uvm_status_container = new;
  
  // 查找表,用于copy()函数的实现;
  local static uvm_object uvm_global_copy_map[uvm_object];

方法声明

virtual function void copy(uvm_object  rhs);          // **默认进行深复制**

//相比于copy函数,print(), compare(), pack()等函数需要对数据操作做出额外的配置,声明如下:
virtual function void print(uvm_printer  printer=null);   
virtual function void sprint(uvm_printer  printer=null);          
virtual function bit compare(uvm_object  rhs, uvm_comparer comparer=null); 
virtual function int pack(ref bit bitstream[],  input uvm_packer packer=null);
virtual function int unpack(ref bit bitstream[
  • 36
    点赞
  • 350
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《UVM入门进阶实验1文档》是一份用于帮助初学者进一步理解和学习UVM的实验指导文档。该文档提供了UVM编程框架的第一个实验,旨在帮助读者熟悉UVM的基本概念和用法。 实验1的目标是创建一个简单的UVM测试环境,并展示如何使用UVM框架进行测试。实验包括以下几个主要步骤: 1. 创建一个UVM测试环境:在这一步骤,我们需要定义测试环境的结构和组件。包括创建一个顶层测试模块、一个顶层环境模块,以及其他必要的组件,如驱动器、监视器、生成器等。 2. 编写测试用例:在这一步骤,我们需要编写一个简单的测试用例来验证被测设计的功能。测试用例需要继承自UVM的`uvm_test_case`类,并在`run_phase`定义测试过程。 3. 编写环境配置:在这一步骤,我们需要将测试用例和测试环境进行连接,并设置一些必要的运行时参数。通过配置对象的方式,我们可以很方便地配置测试环境的各个组件。 4. 运行仿真:在这一步骤,我们需要运行仿真并观察测试结果。通过在测试用例创建一个sequence对象,我们可以在运行时动态生成测试序列。 《UVM入门进阶实验1文档》详细说明了每一步的具体实现方法,并提供了代码示例和可参考的资源链接。 通过完成实验1,读者可以对UVM的基本概念和使用方法有一个更深入的了解。这将为进一步学习和掌握UVM提供坚实的基础,并为以后的工作打下良好的基础。同时,实验1还可以帮助读者培养UVM编程的思维方式和调试技巧,提高工作效率。 总之,《UVM入门进阶实验1文档》是一份非常有价值的学习资料,通过按照文档的指导完成实验,读者可以在短时间内快速入门并掌握UVM的基本用法。 ### 回答2: 《UVM入门进阶实验1文档》是一本介绍UVM(Universal Verification Methodology)的入门实验指导书。UVM是一种用于验证硬件设计的方法学,它提供了一套面向对象的验证框架,可以用于设计验证的自动化和重用。 本文档首先简要介绍了UVM的概念和特点,然后详细讲解了实验1的内容。实验1主要涉及到UVM基础的概念和类的使用方法。首先,介绍了UVM基础类,如uvm_component、uvm_object和uvm_sequence等,以及它们的继承关系和功能。然后,介绍了如何创建和管理UVM环境,并讲解了如何使用UVM Testbench的各种组件来进行设计验证。最后,讲解了一些常用的调试技巧和工具,如波形查看器和消息记录器等。 在实验1,学员将通过几个简单的示例,来熟悉UVM的基本概念和使用方法。例如,学员将学习如何创建一个简单的UVM Testbench,并使用UVM的配置机制来对其进行配置。此外,学员还将学习如何创建和管理UVM Sequences,并在Testbench使用它们来生成随机的输入数据。最后,学员将学习如何使用UVM里的Transaction来封装输入输出数据,以及如何使用Scoreboard来进行结果验证。 通过完成实验1,学员将掌握UVM最基本的概念和使用方法,为后续的进阶实验打下基础。同时,学员将对UVM的工作原理和设计验证的流程有一个清晰的认识,为进一步深入学习和应用UVM提供了基础。 ### 回答3: 《UVM入门进阶实验1文档》是一份详细介绍了如何使用UVM进行验证的教程。UVM是一种用于硬件验证的开放式框架,能够帮助工程师更高效地开发和执行验证环境。 该文档首先简要介绍了UVM的背景和原理,包括UVM Testbench的组成结构和工作流程。然后,文档逐步指导读者完成实验1,并提供了实验所需的样例代码和测试平台。 在实验1,文档首先指导读者创建一个简单的UVM环境,并介绍了UVM的基本类和功能。然后,通过一个简单的例子演示了如何创建一个UVM测试,包括定义测试类、产生和驱动测试向量、分析和比较结果等。读者可以按照文档提供的步骤和示例代码,逐步完成实验。 在实验进行过程,文档还不断提供了一些常见问题和解决方法。这些问题和解决方法能够帮助读者更好地理解和应用UVM,解决遇到的困惑和难题。 该文档还包括对实验的详细说明和解析,比如UVM环境的搭建、测试向量的生成和分析等。通过这些详细说明和解析,读者可以更深入地理解UVM的工作原理和实现方式。 总之,《UVM入门进阶实验1文档》是一份非常实用的教程,帮助读者快速入门和进阶使用UVM进行硬件验证。通过该文档的学习和实验,读者能够掌握UVM的基本概念和使用方法,为日后的硬件验证工作打下坚实的基础

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值