首页 > 其他分享 >【学习记录丨UVM】1.2驱动器driver(1)——最简单的driver及其实例化

【学习记录丨UVM】1.2驱动器driver(1)——最简单的driver及其实例化

时间:2024-10-08 13:46:43浏览次数:14  
标签:1.2 driver drv UVM phase main uvm

《UVM白皮书》关于driver的介绍

一、只有driver —— 最简单的验证平台

UVM是一个库,其中的driver等组件都是派生(extends)自UVM库中的类(class)。类中通过 function 和 task 实现组件功能。

UVM常用类及树形结构_uvm树-CSDN博客  下边这张图展示了UVM常用的类之间的派生关系。可以看到构建验证平台的大都是继承自uvm_component。

 1.  function new 

关于派生自uvm_component的类 ,它们的 function new 都有两个参数:name 和 parent. 示例如下:这是一个简单的driver。

class a_driver extends uvm_driver;
    function new (string name = "my_driver", uvm_component parent=null);
        super.new(name,parent);
    endfunction
    
    extern virtual task main_phase(uvm_phase phase);
endclass

task my_driver::main_phase(uvm_phase phase);
    ...
    `uvm_info("a_driver","data is drived",UVM_LOW)
endtask

 示例中出现了main_phase。driver所做的事情几乎都在main_phase中完成。

2.  main_phase

UVM是由phase来管理验证平台运行。UVMphase的命名为 xx_phase,都有一个类型为uvm_phase 名字为phase的参数。

3.  uvm_info 

    `uvm_info("a_driver","data is drived",UVM_LOW)
*******************************************************************
    UVM_INFO a_driver.sv(20) @245000.000 ns : drv [a_driver] data is drived

第一个参数是字符串,用于把打印信息归类;第二个参数的字符串是具体要打印的信息;第三个参数是冗余级别。

打印效果:UVM_INFO关键字 a_driver.sv(20)此条打印信息的文件来源和行号 @24500.000 ns 仿真中此条信息的打印时间 : drv 逻辑节点信息,即在UVM树中的路径索引

关于路径索引,UVM采用树形结构,其中的任何一个节点,都有一个与之对应的路径索引,是字符串类型。路径索引可以通过get_full_name函数来获得。

$dispaly("the full name of current component is : %s",get_full_name());

[a_driver] 是uvm_info宏传递的第一个字符串 data is drived 是uvm_info宏传递的第二个字符串,也就是要打印的信息

在搭建验证平台时,尽量用uvm_info代替display 

二、实例化driver搭建的最简单验证平台

 上边介绍了最简单的driver完成了,我们怎么才能使用它呢?—— 实例化driver。 在自己验证平台driver层次的上一级进行其实例化。

这里介绍最简单的只有driver验证平台,那上一层次就是我们的top_tb了。下边例子里harness是top_tb的名字,名字是自由的,都可以啦

`timescale 1ns/1ps//时间精度
`include "uvm_macros.svh"//导入uvm中一个包含很多宏定义的文件

import uvm_pkg::*;//导入uvm,前文有提到uvm是一个库
`include “a_driver.sv”

`ifndef HARNESS_SV
`define HARNESS_SV

module harness();
    reg clk;
    ...信号声明...

    dut my_dut(.clk(clk),
                ...)

    initial begin
        a_driver drv; //实例化drv 第一步
        drv = new("drv",null); //实例化drv 第二步
        drv.main_phase(null);
        $finish();
    end

    ...
endmodule

上例中的null只是代替。除了上边写的实例化语句,还有一种:

a_driver drv;
drv = a_driver::type_id::create ("drv",null);

这样就是最简单的验证平台结构了,只用了简单的driver,目前还并不怎么涉及UVM。

标签:1.2,driver,drv,UVM,phase,main,uvm
From: https://blog.csdn.net/yanwenyu123/article/details/142630740

相关文章

  • FL Studio 24.1.2.4381中文版免费下载及FL Studio 24最新使用学习教程
    家好呀,作为一个资深的音乐爱好者和制作人,今天我要安利一个我最近超级痴迷的数字音频工作站软件——FLStudio24.1.2.4381中文版。这款产品可是让我的音乐创作之路如虎添翼,快来跟我一起看看它的炫酷功能吧!最近接到很多小伙伴的私信,都在问我平时会使用哪些音乐软件,能不能给一......
  • 1.2 监督学习
    前言:我往后看了看这本书,发现很多机器学习的术语定义出现,我推测这门课是机器学习的先修课程,有趣的是我们学校在上机器学习之前没有上过这门课,怪不得看的时候云里雾里,因此我觉得改变计划,把接下来的重心放到统计学习方法上来。1.2监督学习在统计学习中,学习方法主要包括监......