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

《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只是代替。除了上边写的实例化语句,还有一种(但这个需要使用factory机制,即在class a_driver中 加入一句 `uvm_component_utils(a_driver);):

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值