【数字设计验证】-- UVM

本文介绍了UVM(通用验证方法学)在FPGA开发中的作用,通过一个简单的UVM验证例子展示了验证平台的组成部分,如driver、记分板、monitor和参考模型。讲解了UVM的基础,包括UVM类的继承关系、UVM树、field_automation机制和组件间的通信。此外,还详细阐述了UVM验证平台的运行过程,包括phase、objection机制和sequence的使用。
摘要由CSDN通过智能技术生成

有点类似软件测试中的测试框架。

一个简单的UVM例子

名词解释

UVM:universal verification methdoogy通用验证方法学

可以基于UVM使用system verilog搭建测试平台。

DUT:Design under test被测设计代码

验证平台的组成

driver:产生各种激励信号给DUT;

记分板(也叫checker):检验DUT在指定激励下的输出是否和预期相符;

monitor:收集DUT的输出,并把它传递给记分板;

参考模型:用于制造产生预期输出,根据被测功能在DUT运算时,参考模型也做相应逻辑的运算。

以下是只有driver的测试平台:

典型测试平台

 构造各组成部分

UVM是个库,库中提供可以生成验证平台各组成部分的类,可以被使用,通过类中提供的函数和任务完成各部件的功能,因此各个组件派生自UVM提供的类。

driver构造

class my_driver extends uvm_driver;
    function new(string name = "my_driver", uvm_component parent = null);
        super.new(name, parent);//name是driver的名字,parent是uvm规定的
    endfunction
    
    //driver具体实现在这里,phase管理验证平台的运行
    extern virtual task main_phase(uvm_phase phase);
endclass

task my_driver::main_phase(uvm_phase phase);
    top.tx = 8'b00000000;....//这里实现产生激励信号的代码
endtask

`uvm_info(s1, s2, s3);

uvm宏,用于打印信息,s1用于信息归类,s2是要打印的内容,s3打印等级。

打印等级:UVM_HIGH:信息可有可无;

UVM_LOW:信息非常关键;

UVM_MEDIUM:信息重要程度介于high和low之间;

uvm_info打印low和medium信息。

使用driver的测试平台

`include "uvm_macros.svh"//这里包含uvm的众多宏定义
import uvm_pkg::*;//导入uvm库
`include "my_driver.sv"//导入自己的driver

module top;
    //信号定义
    //被测设计和驱动器的信号连接
    //信号初始化等
    initial begin
        my_driver dv;//实例化driver
        dv = new("dr", null);
        dv.main_phase(null);//调用产生激励
        $finish();
    end
    
endmodule

factory机制:自动创建实例和执行

上面是需要自己显式实例化类和调用driver方法,引入factory机制后,可以自动创建实例调用对应方法。

与上例的区别:注册自己的驱动类,注册之后就可以实现自动创建实例和调用方法。

class my_driver extends uvm_driver;
    `uvm_component_utils(my_driver);//使用uvm宏注册自己的驱动类
    function new(string name = "my_driver", uvm_component parent = null);
        super.new(name, parent);//name是driver的名字,parent是uvm规定的
    endfunction
    
    //driver具体实现在这里,phase管理验证平台的运行
    extern virtual task main_phase(uvm_phase phase);
endclass

task my_driver::main_phase(uvm_phase phase);
    top.tx = 8'b00000000;....//这里实现产生激励信号的代码
endtask

 在top模块中的使用run_test();代替实例化和调用函数:

`include "uvm_macros.svh"//这里包含uvm的众多宏定义
import uvm_pkg::*;//导入uvm库
`include "my_driver.sv"//导入自己的driver

module top;
    //信号定义
    //被测设计和驱动器的信号连接
    //信号初始化等
    initial begin
        run_test("my_driver");//根据传入的字符串决定其要实例化的类
        $finish();
    end
    
endmodule

 加入objection机制

uvm自动调用phase时通过objection机制来控制验证平台的关闭,如果UVM监测到有objection,则需要等objection被撤销后才结束验证仿真,如果没有监测到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值