精华内容
下载资源
问答
  • 年轻人的第一个UVM验证平台搭建——介绍验证平台的组成UVM验证平台的框图验证平台介绍目录 验证平台的组成 验证用于找出DUT中的bug,这个过程通常是把DUT放入一个验证平台中来实现的。一个验证平台要实现如下基本...

    年轻人的第一个UVM验证平台搭建之介绍

    验证平台的组成

    验证用于找出DUT中的bug,这个过程通常是把DUT放入一个验证平台中来实现的。一个验证平台要实现如下基本功能:

    • 验证平台要模拟DUT的各种真实使用情况,这意味着要给DUT施加各种激励。
    • 验证平台要能够根据DUT的输出来判断DUT的行为是否与预期相符合,完成这个功能的是记分板(scoreboard)
    • 验证平台要收集DUT的输出并把它们传递给scoreboard,完成这个功能的是monitor。
    • 验证平台要能够给出预期结果,在验证平台中,完成这个过程的是参考模型(reference model)。

    UVM验证平台的框图

    验证平台的典型框图如下图所示:
    在这里插入图片描述

    验证平台介绍

    module dut(clk,
               rst_n, 
               rxd,
               rx_dv,
               txd,
               tx_en);
    input clk;
    input rst_n;
    input[7:0] rxd;
    input rx_dv;
    output [7:0] txd;
    output tx_en;
    
    reg[7:0] txd;
    reg tx_en;
    
    always @(posedge clk) begin
       if(!rst_n) begin
          txd <= 8'b0;
          tx_en <= 1'b0;
       end
       else begin
          txd <= rxd;
          tx_en <= rx_dv;
       end
    end
    endmodule
    

          这个DUT通过rxd接收数据,再通过txd发送出去。其中rx_dv是接收的数据有效指示,tx_en是发送的数据有效指示
          UVM是一个库,在这个库中,几乎所有的东西都是使用类(class)来实现的。driver、monitor、reference model、scoreboard等组成部分都是类。
          类有函数(function)、有任务(task),通过这些函数和任务可以      完成driver的输出激励功能,完成monitor的监测功能,完成参考模型的计算功能,完成scoreboard的比较功能。
          类有成员变量,这些成员变量可以控制类的行为,如控制driver的行为等。
          当要实现一个功能时,首先应该想到的是从UVM的某个类派生出一个新的类,在这个新的类中实现所期望的功能。所以,使用UVM的第一条原则是:验证平台中所有的组件应该派生自UVM中的类

    目录

    后面的章节将从各个组件展开学习,后续更新链接将添加至下方:
    年轻人的第一个UVM验证平台搭建——driver:https://blog.csdn.net/qq_40051553/article/details/121301976?spm=1001.2014.3001.5501

    这篇笔记参考《UVM实战》、《芯片验证漫游指南》和某验证视频整理而成,仅作学习心得交流,如果涉及侵权烦请请告知,我将第一时间处理。

    展开全文
  • 该文档详细介绍利用UVM验证方法学库搭建system Verilog 测试验证平台的步骤和方法,我看完后感觉很好。能够很快入门UVM,是个不错的资料,分享给大家。
  • 技术领域本发明涉及芯片设计验证领域,具体地说是一种实用性强、连接UVM验证平台搭建方法。背景技术:伴随着芯片集成度增加,各种通信与信号处理算法被集成到系统芯片中,这些算法通常需要先利用Matlab或Simulink...

    技术领域本发明涉及芯片设计验证领域,具体地说是一种实用性强、连接UVM验证平台的搭建方法。

    背景技术:

    伴随着芯片集成度增加,各种通信与信号处理算法被集成到系统芯片中,这些算法通常需要先利用Matlab或Simulink进性算法层的建模,然后利用Matlab自带的转换器转换成RTL代码,或者人工将Matlab代码转换为RTL代码,供系统芯片集成,仿真综合使用。这种转换过程,尤其是人工转换,需要确保其功能的正确性,也就是算法层与逻辑层的功能相一致。这就需要进性一些验证与测试。UVM验证方法是芯片验证业界最新研发的一种验证方法学。工程师用它可创建坚实、可重用、具互操作性的验证组件和验证平台。UVM提供基于SystemVerilog语言开发的一套库函数,工程师通过调用库可以省去自己从零开始开发验证环境的麻烦。此套方法已经在芯片开发的行业得到较广泛应用,它的受控随机数产生机制能大大提高验证效率,对于算法实现类的模块的验证尤其适用。UVM本身是针对SystemVerilog语言开发的,所以若想将这套验证环境与Matlab环境连接,还是需要解决一些具体问题的。为了有效的利用UVM验证方法的优点,来验证算法实现电路的功能,本发明构建一个验证平台中同时运行针对SystemVerilog的仿真以及Matlab模型的仿真。

    技术实现要素:

    本发明的技术任务是针对以上不足之处,提供一种实用性强、连接UVM验证平台的搭建方法。一种连接UVM验证平台的搭建方法,其搭建过程为:通过UVM验证平台产生激励,将激励同时发送给RTL代码被测对象以及Matlab模型,比较两者输出的一致性,来确认RTL代码的正确性。其具体搭建过程为:设置UVM验证平台;设置Matlab模型;通过SystemVerilog的动态程序接口DPI连接UVM验证平台与Matlab模型;设置仿真器及可控制仿真器的脚本,并运行验证平台。所述UVM验证平台内置计分板,该记分板里嵌入上述Matlab模型,该UVM验证平台产生激励数据包并发送给RTL代码被测对象,同时将此数据记录下来,发送给记分板;RTL代码被测对象再输出数据信号给UVM验证平台,UVM验证平台进行收集后也发送给记分板,记分板对两组数据流进性比较,判断是否正确。UVM验证平台里嵌入Matlab模型的具体过程为:首先实现SystemVerilog与Matlab的协同,两者的协同通过一个C程序的头文件来实现,即:通过Matlab自带的C函数库实现对Matlab的控制,调用Matlab的启动、关闭、输入输出;SystemVerilog的动态程序接口DPI直接导入和导出上述C函数库中的函数,从而实现通过SystemVerilog调用C程序然后控制Matlab,实现把Matlab模型嵌入UVM验证平台。所述仿真器包括逻辑仿真器和算法仿真器,并通过脚本实现对仿真器控制,来打开DPI的使能以及使Matlab工具与逻辑仿真器同时启动,以便完成验证平台的数据监测功能;通过使用SystemVerilogDPI连接UVM验证平台与Matlab模型使得逻辑仿真器与算法仿真器同时运行,保证了算法到逻辑映射转换的正确性。本发明的一种连接UVM验证平台的搭建方法,具有以下优点:本发明提供的一种连接UVM验证平台的搭建方法通过利用UVM验证平台产生激励,将激励同时发送给RTL代码被测对象以及高层次Matlab模型,比较两者输出的一致性来,来确认RTL代码的正确性,有效的利用UVM验证方法的优点,来验证算法实现电路的功能,能极大提高带有各种复杂算法的芯片验证的效率,缩短芯片开发周期,实用性强,易于推广。附图说明附图1为本发明的UVM验证平台示意图。附图2为UVM验证平台与Matlab模型的连接关系图。附图3为Matlab控制的C头文件图。附图4为Matlab控制的SystemVerilog调用过程图。具体实施方式下面结合附图和具体实施例对本发明作进一步说明。如附图1、图2所示,本发明的一种连接UVM验证平台的搭建方法,其搭建过程为:通过UVM验证平台产生激励,将激励同时发送给RTL代码被测对象以及高层次Matlab或simulink模型,比较两者输出的一致性,来确认RTL代码的正确性。其具体搭建过程为:设置UVM验证平台;设置Matlab模型;通过SystemVerilog的动态程序接口DPI连接UVM验证平台与Matlab模型;设置仿真器及可控制仿真器的脚本,并运行验证平台。所述UVM验证平台内置计分板,该记分板里嵌入上述Matlab模型,该UVM验证平台产生激励数据包并发送给RTL代码被测对象,同时将此数据记录下来,发送给记分板;RTL代码被测对象再输出数据信号给UVM验证平台,UVM验证平台进行收集后也发送给记分板,记分板对两组数据流进性比较,判断是否正确。与普通UVM验证平台不用的唯一一点是记分板里接入了一个Matlab模型,来运行被测对象的算法实现。为了让SystemVerilog实现的UVM验证平台与Matlab模型同时运行,需要正确的连接他们,图2表示了这种连接的实现。UVM验证平台里嵌入Matlab模型的具体过程为:首先实现SystemVerilog与Matlab的协同,两者的协同通过一个C程序的头文件来实现,即:通过Matlab自带的C函数库实现对Matlab的控制,调用Matlab的启动、关闭、输入输出,图3是这个C头文件的示例;SystemVerilog的动态程序接口DPI直接导入和导出上述C函数库中的函数,从而实现通过SystemVerilog调用C程序然后控制Matlab,实现把Matlab模型嵌入UVM验证平台,图4是SystemVerilog调用C控制Matlab的过程示例。所述仿真器包括逻辑仿真器和算法仿真器,并通过脚本实现对仿真器控制。对于不同的仿真器,也需要加入一些特别的仿真器控制指令,即上述控制脚本来打开DPI的使能以及使Matlab工具与逻辑仿真器同时启动,以便完成验证平台的数据监测功能。通过使用SystemVerilogDPI连接UVM验证平台与Matlab模型能使得逻辑仿真器与算法仿真器同时运行,保证了算法到逻辑映射转换的正确性,提高了开发效率。上述具体实施方式仅是本发明的具体个案,本发明的专利保护范围包括但不限于上述具体实施方式,任何符合本发明的一种连接UVM验证平台的搭建方法的权利要求书的且任何所述技术领域的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。

    展开全文
  • 上次更新完《IC验证"UVM验证平台"组成》后本打算不再更新…但有人反映要继续更新…继续连载…小编考虑到一个好的连续剧不能没有结尾,所以后期会持续更新ic验证的UVM相关内容… 今天更新一个最简单的验证平台,只有...

    上次更新完《IC验证"UVM验证平台"组成》后本打算不再更新…但有人反映要继续更新…继续连载…小编考虑到一个好的连续剧不能没有结尾,所以后期会持续更新ic验证的UVM相关内容…

    今天更新一个最简单的验证平台,只有driver的验证平台…

    driver是验证平台最基本的组件,是整个验证平台数据流的源泉。本节以一个简单的DUT为例,说明一个只有driver的UVM验 证平台是如何搭建的。

    最简单的验证平台,假设有如下的DUT定义:
    在这里插入图片描述
    在这里插入图片描述

    这个DUT的功能非常简单,通过rxd接收数据,再通过txd发送出去。其中rx_dv是接收的数据有效指示,tx_en是发送的数据有 效指示。这里所有例子都是基于这个DUT。

    UVM中的driver应该如何搭建?

    UVM是一个库,在这个库中,几乎所有的东西都是使用类(class)来实现的。driver、 monitor、reference model、scoreboard等组成部分都是类。类是像SystemVerilog这些面向对象编程语言中最伟大的发明之一,是面 向对象的精髓所在。类有函数(function),另外还可以有任务(task),通过这些函数和任务可以完成driver的输出激励功能,完 成monitor的监测功能,完成参考模型的计算功能,完成scoreboard的比较功能。类中可以有成员变量,这些成员变量可以控制类 的行为,如控制driver的行为等。当要实现一个功能时,首先应该想到的是从UVM的某个类派生出一个新的类,在这个新的类中 实现所期望的功能。所以,使用UVM的第一条原则是:验证平台中所有的组件应该派生自UVM中的类。

    UVM验证平台中的driver应该派生自uvm_driver,一个简单的driver如下例所示:

    在这里插入图片描述
    在这里插入图片描述

    这个driver的功能非常简单,只是向rxd上发送256个随机数据,并将rx_dv信号置为高电平。当数据发送完毕后,将rx_dv信号 置为低电平。

    上述代码中还出现了uvm_info宏。这个宏的功能与Verilog中display语句的功能类似,但是它比display语句更加强大。它有三个参数:

    第一个参数是字符串,用于把打印的信息归类;

    第二个参数也是字符串,是具体需要打印的信息;

    第三个参数则是冗余级别。

    在验证平台中,某些信息是非常关键的,这样的信息可以设置为UVM_LOW,而有些信息可有可无,就可以设置为 UVM_HIGH,介于两者之间的就是UVM_MEDIUM。UVM默认只显示UVM_MEDIUM或者UVM_LOW的信息,uvm_info宏打印的结果如下:

    UVM_INFO my_driver.sv (20 )@48500000
    :drv[my_driver]data is drived

    在uvm_info宏打印的结果中有如下几项:

    1.UVM_INFO关键字:表明这是一个uvm_info宏打印的结果。除了uvm_info宏外,还有uvm_error宏、uvm_warning宏,后文中 将会介绍。

    2.my_driver.sv(20):指明此条打印信息的来源,其中括号里的数字表示原始的uvm_info打印语句在my_driver.sv中的行号。

    3.48500000:表明此条信息的打印时间。

    4.drv:这是driver在UVM树中的路径索引。UVM采用树形结构,对于树中任何一个结点,都有一个与其相应的字符串类型的 路径索引。路径索引可以通过get_full_name函数来获取,把下列代码加入任何UVM树的结点中就可以得知当前结点的路径索引:

    $display(“the full name of current component is: %s”, get_full_name());

    [my_driver]:方括号中显示的信息即调用uvm_info宏时传递的第一个参数。

    data is drived:表明宏最终打印的信息。

    可见,uvm_info宏非常强大,它包含了打印信息的物理文件来源、逻辑结点信息(在UVM树中的路径索引)、打印时间、对信息的分类组织及打印的信息。读者在搭建验证平台时应该尽量使用uvm_info宏取代display语句。

    定义my_driver后需要将其实例化。这里需要注意类的定义与类的实例化的区别。所谓类的定义,就是用编辑器写下:

    classs A;

    endclass

    而所谓类的实例化指的是通过new创造出A的一个实例。如:

    A a_inst;
    a_inst = new();

    类的定义类似于在纸上写下一纸条文,然后把这些条文通知给SystemVerilog的仿真器:验证平台可能会用到这样的一个类, 请做好准备工作。而类的实例化在于通过new()来通知SystemVerilog的仿真器:请创建一个A的实例。仿真器接到new的指令 后,就会在内存中划分一块空间,在划分前,会首先检查是否已经预先定义过这个类,在已经定义过的情况下,按照定义中所指 定的“条文”分配空间,并且把这块空间的指针返回给a_inst,之后就可以通过a_inst来查看类中的各个成员变量,调用成员函数/任 务等。对大部分的类来说,如果只定义而不实例化,是没有任何意义的 [3];而如果不定义就直接实例化,仿真器将会报错。

    对my_driver实例化并且最终搭建的验证平台如下:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    第2行把uvm_macros.svh文件通过include语句包含进来。这是UVM中的一个文件,里面包含了众多的宏定义,只需要包含一 次。

    第4行通过import语句将整个uvm_pkg导入验证平台中。只有导入了这个库,编译器在编译my_driver.sv文件时才会认识其中的 uvm_driver等类名。

    第24和25行定义一个my_driver的实例并将其实例化。注意这里调用new函数时,其传入的名字参数为drv,前文介绍uvm_info 宏的打印信息时出现的代表路径索引的drv就是在这里传入的参数drv。另外传入的parent参数为null,在真正的验证平台中,这个 参数一般不是null,这里暂且使用null。

    第26行显式地调用my_driver的main_phase。在main_phase的声明中,有一个uvm_phase类型的参数phase,在真正的验证平台 中,这个参数是不需要用户理会的。本节的验证平台还算不上一个完整的UVM验证平台,所以暂且传入null。

    第27行调用finish函数结束整个仿真,这是一个Verilog中提供的函数。

    运行这个例子,可以看到“data is drived”被输出了256次。


    通知:
    本章更新后将持续更新更新…
    如:
    加入factory机制
    加入objection机制
    加入virtual inteRFace
    加入transaction
    加入env
    加入monitor
    封装成agent
    加入reference model
    加入scoreboard
    加入field_automation机制…
    如果有任何疑问请在下方评论…

    展开全文
  • UVM验证环境代码下载​ ======================================================= 版本记录: V1 20211018第一次发布by Qingyiyu(smile@cqu.edu.cn) 集成2个独立的agent以及reg_model 集成virtual_squence和...

    近期研究学习了UVM相关知识,自己手动创建并优化了一套比较完善的环境模板,有需要的朋友可前往下载学习使用

    UVM验证环境代码下载​

    =======================================================

    版本记录:

    V1 20211018第一次发布by Qingyiyu(smile@cqu.edu.cn)

    1. 集成2个独立的agent以及reg_model
    2. 集成virtual_squence和virtual_squencer
    3. 集成独立的seq_lib、tc_lib
    4. 集成功能覆盖率、scb、interface等组件
    5. 集成常用Makefile脚本

    =======================================================

    *************************************************************

    注意事项

    *************************************************************

    1、代码可以使用以下版本进行编译:

    -Synopsys VCS版本D-2010.06-SP2-3及更高版本

    -UVM 1.0及以上

    注:

    1) 要使用VCS安装的UVM1.0内置源:

    在Makefile中使用-ntb_opts UVM命令可以替换环境变量UVM_HOME

    2) 要使用VCS安装目录以外的UVM源,请执行以下操作:

    将环境变量UVM_HOME设置为UVM-1.0安装目录

    *************************************************************

    编译和运行示例的步骤

    *************************************************************

    :cd /release/test_bb/sim/

    make all tc=**

    *************************************************************

    环境树的目录结构

    *************************************************************

    祝学习愉快~

    展开全文
  • 年轻人的第一个UVM验证平台搭建——driver最初版本引入factory机制、objection机制和vitual interface之后 最初版本 `ifndef MY_DRIVER__SV `define MY_DRIVER__SV class my_driver extends uvm_driver; function ...
  • 基于简单DUT的UVM验证平台搭建(一)

    千次阅读 多人点赞 2019-10-02 10:45:35
    最近一个月在实习公司做回归测试,对公司的UVM平台用的比较熟练,就想着自己做一个DUT,然后搭建一个UVM验证平台。 首先,DUT是一个简单的32位的加法器,代码如下:alu.v module adder32_cla( input clk , ...
  • 一个简单的UVM验证平台

    万次阅读 2019-08-16 20:14:36
    2.1 验证平台的组成 2.1.1. 何谓验证平台 何谓验证平台?验证最基本的目的在于测试 DUT 的正确性,其最常使用的方法就是给 DUT 施加不同的输入(激励),所以一个验证平台最重要的的功能在于产生各种各样不同的激励...
  • 当然伴随形式验证的发展,assertion也被用于形式验证的条件输入和期望输出。这里主要还是讲在动态仿真中的assertion的应用。在动态仿真中插入assertion能方便快速的对错误源头进行定位,减少debug时间。assert...
  • UVM验证平台入门视频推荐

    千次阅读 2019-10-17 21:37:03
    关于UVM验证平台的简单介绍和入门知识,这位老师讲解的相当不错,仅作为入门了解视频: https://v.qq.com/x/page/k07663evpjl.html
  • UART UVM验证平台平台搭建总结

    千次阅读 2020-02-25 18:29:50
    UART UVM验证平台平台搭建总结 tb_top是整个UVM验证平台的最顶层;tb_top中例化dut,提供时钟和复位信号,定义接口以及设置driver和monitor的virual interface,在intial中调用run_test() UVM入口函数。在基于uvm_...
  • 一个加法器的UVM验证平台设计
  • 本发明涉及数字芯片的功能验证和验证方法学领域,尤其是一种基于UVM验证方法学的SPI验证方法,通过验证平台搭建,随机化激励的生成,功能覆盖率的收集,响应结果的自检等操作完成对SPI的功能验证。背景技术:近年...
  • uvm+vcs+verdi基本平台搭建,也许平台不是很难,但是网上没有 UVM 在 VCS 中的详细教程,但是对于初学者就是一道屏障,我探索了几天,下文将一步一步的举例子说明 UVM+VCS+Verdi 的 liunx 平台搭建过程
  • IC芯片验证 - 手把手教你搭建UVM验证环境

    千次阅读 多人点赞 2021-05-07 08:38:41
    这是一个UVM的demo项目
  • 搭建UVM验证环境之hello world

    千次阅读 2019-12-04 11:30:06
    搭建UVM验证环境历程
  • 该平台使用高级验证方法学(Universal Verification Methodology,UVM搭建验证平台的主要结构,并在验证平台中使用外接Matlab作为复杂数字信号处理的参考模型。介绍了功能验证平台的主要结构和组件的设计,详细...
  • UVM(一)——UVM验证平台

    千次阅读 2020-07-16 13:35:09
    UVM(一)——UVM验证平台UVM验证平台组成driver组件factory机制objection机制virtual interfaceconfig_db机制transaction UVM验证平台组成 之前一直在忙比赛的事情,时隔一个月终于又能开始继续学习验证了! 这次刚...
  • 附件为fpga的验证平台的代码,使用了uvm的框架来搭建,分享111111111

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 410
精华内容 164
关键字:

uvm验证平台搭建