UVM学习整理——UVM结构(component派生类)

本文介绍了UVM验证环境中的重要组件,包括uvm_driver、uvm_monitor、uvm_sequencer、uvm_agent、uvm_scoreboard、reference model、uvm_env和uvm_test,阐述了它们的功能和在验证平台中的作用,以及UVM组件的树形结构和注册宏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

二、UVM结构

2.1UVM组件

2.1.1uvm_driver

2.1.2uvm_monitor

2.1.3uvm_sequencer

2.1.4uvm_agent

2.1.5uvm_scoreboard

2.1.6reference model

2.1.7uvm_env

2.1.8uvm_test

2.1.9uvm_component相关宏

2.2UVM验证平台的树形结构


二、UVM结构

2.1UVM组件

UVM的组件(uvm_component类)继承于UVM的核心基类中一个核心分支,均可构成验证环境,这是因为它们都从uvm_component类继承了phase机制(必须在build_phase中实例化),都会经历各个phase阶段。主要介绍构成环境的常见组件类:uvm_driver、uvm_monitor、uvm_sequencer、uvm_agent、uvm_scoreboard、uvm_env和uvm_test等。

图 5uvm_component类和子类

2.1.1uvm_driver

所有driver派生自uvm_driver。Driver的功能主要就是向sequencer索要sequence_item(transaction),并通过虚拟接口把sequence_item里的信息驱动到DUT的接口上。相当于完成了transaction级别到DUT能够接受的端口级别信息的转变。

drive使用工厂机制注册类通常需要三步:声明,注册,调用new()函数。

class my_driver extends uvm_driver#(my_transaction);     //my_transaction是sequence item类型

   virtual my_if vif; //virtual interface

   `uvm_component_utils(my_driver)    //在factory中注册my_driver
   function new(string name = "my_driver", uvm_component parent = null);
      super.new(name, parent);
   endfunction

   virtual function void build_phase(uvm_phase phase);
      super.build_phase(phase);
      if(!uvm_config_db#(virtual my_if)::get(this, "", "vif", vif))
         `uvm_fatal("my_driver", "virtual interface must be set for vif!!!")
   endfunction

   extern task main_phase(uvm_phase phase);
   extern task drive_one_pkt(my_transaction tr);
endclass

uvm_driver在uvm_component基础上没有扩展新的函数/任务,而只是扩展了一些用来通信的端口seq_item_port和rsp_port。在构建环境组件时,派生uvm_driver和uvm_sequencer的类,可以直接使用这些成员变量。

如果不想使用自带的成员变量,想加入改动,也可以由uvm_component来派生Driver等组件,然后自行定义uvm_seq_item_pull_port #(REQ, RSP)等类型的变量,名字可以不再是seq_item_port等(源码见附录一)

注:uvm_driver和子类都是参数化类,定义新driver类时,应声明获取的事务参数REQ类型(事务参数)。

2.1.2uvm_monitor

monitor通过虚拟接口收集总线信息,并将数据转换成transation级别的sequence_item,再通过端口将数据发送至其他验证组件。收集的数据可用于简单的功能和时序检查。

所有用户自定义数据监测行为的monitor都继承自uvm_monitor,uvm_monitor继承自uvm_component,从源代码来看并没有增添新的成员和方法,但将monitor类都继承于uvm_monitor有助于实现父类monitor的方法和特性。(源码见附录一)

monitor使用工厂机制注册类通常也需要三步:声明uvm_monitor,向工厂注册并调用new()函数。

class my_monitor extends uvm_monitor;

   virtual my_if vif;

   uvm_analysis_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Like_ai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值