uvm组件

UVM组件

1. uvm_driver

该类会从uvm_sequncer中获取事务(Transaction),经过转化进而在接口中对DUT进行时序激励。该类是参数化类,用户在定义新的driver类时,当声明该类所需要获取的事务参数REQ类型,默认情况下,RSP参数类型同REQ类型保持一致。

class uvm_driver#(type REQ=uvm_sequence_item,type RSP=REQ) extends uvm_component

uvm_driver在uvm_component基础上没有扩展新的函数,而只是扩展了一些用来通信的端口和变量,如下:

uvm_seq_item_pull_port #(REQ,RSP) seq_item_port;
uvm_analysis_port #(RSP) rsp_port;//广播模式,在TLM通信中使用
REQ req;
RSP rsp;

driver和sequencer类之间的通信就是为了获取新的事务对象,通过pull的方式实现的:

driver.seq_item_port.connect(sequencer.seq_item_export);
driver.rsp_port.connnect(sequencer.rsp_export);

自己定义一个driver

class dut_driver extends uvm_driver #(basic_transaction);
    virtual chip_if vif;
    `uvm_component_utils(dut_driver)
    function new(string name,uvm_component parent);
        super.new(name,parent);
    endfunction
    extern task run_phase(uvm_phase phase);//在运行过程中自动执行的run_phase
endclass

extern可以现在这个类中预定义,然后在这个类的外部重新定义

2. uvm_monitor

相比于它的父类uvm_component,没有添加新的成员变量和方法

通常执行的功能:

  • 观测DUT的interface,并且收集总线信息
  • 永远保持PASSIVE模式,即永远不会驱动DUT
  • 在总线协议或者内部信号协议观察时,可以做一些功能和时序的检查
  • 对于更复杂的检查要求,他们可以将数据发送至其他验证组件,例如scoreboard、referencemodel或者coverage collector

3. uvm_sequencer

sequencer如同一个管道,会从这个管道不断地将sequence产生连续的激励事务,通过TLM端口送至driver一侧;也可以从uvm_driver那里获取随后的RSP对象来得知数据通信是否正常。

sequence 承担产生激励的任务,sequencer 承担传输激励的任务并将RSP反馈给sequence

uvm_sequencer也是个参数化的类,需要在定义的时候声明REQ的类型。

它的继承关系:

uvm_component ——> uvm_sequncer_base ——> uvm_sequencer_para_base<REQ,RSP> ——> uvm_sequencer<REQ,RSP>

4. uvm_agent

uvm_agent是一个标准的验证环境单元,通常包括一个driver、一个monitor以及一个sequencer。


is_active是一个agent的成员变量,缺省值是UVM_ACTIVE表示处在active模式的agent需要例化driver、monitor和sequencer;is_active模式既具有激励功能,也有监测功能。

如果is_active的值是UVM_PASSIVE这表示agent是passive模式,只可以例化monitor。passive模式只具有监测功能。

uvm_active_passivce_enum is_active = UVM_ACTIVE;
uvm_active_passivce_enum is_active = UVM_PASSIVE;

往往是在更上层通过config_db来配置不同的模式


按照总线的传输方向划分:

  • Master agent 是用来向DUT发起的Transaction,

  • Slave agent 是用来响应DUT的events,例如 formatter_agent

5. uvm_scoreboard

uvm_scoreboard相比于uvm_component,没有添加额外的成员变量和方法(同monitor)

在scoreboard中国通常会声明TLM端口以供monitor传输数据

//例化方式一:
typedef uvm_in_order_comparator #(bus_xact) comp_t;//将uvm_in_order_comparator #(bus_xact)类型定义成comp_t
comp_t comp_m;//声明
...
comp_m = comp_t::type_id::create("comp_m",this);

//例化方式二:
uvm_in_order_comparator #(bus_xact) comp_m;//声明
comp_m = uvm_in_order_comparator #(bus_xact)::type_id::create("comp_m",this);
	//注意例化时要把参数化类的类型加上

6.uvm_env

uvm_env可能包含多个uvm_agent和其他component

  • uvm_agent作为标准单元,在更上层的集成中应该被例化到uvm_env中;
  • uvm_env在更上层复用时,可以被其他uvm_env嵌套;

7.uvm_test

uvm_test 类本身没有新成员,但是作为测试用例的“代言人”,不但决定着环境的结构和连接关系,也决定着使用哪个测试序列

如果没有这个“代言人”,整个环境都无从建立,所以uvm_test是验证环境建立的唯一入口,只有通过它才可以正常运转UVM的phase机制

推荐在uvm_test中只例化一个顶层uvm_env。


UVM结构总结

uvm_top

uvm_top 是 uvm_root 类的唯一实例

  • 是由UVM创建和管理
  • 它所在的域是uvm_package

uvm_top 是所有test组件的顶层

  • 所有验证环境中的组件在创建时都需要指定它的父一级
  • 如果某些组件在创建时指定父一级为null,那么它将隶属于uvm_top。不过存在风险,并不推荐这样做。

uvm_top提供了一系列的方法来控制仿真,例如phase机制、objection机制


uvm_test

test 类是用户自定义的顶层结构

所有的test 类都应该继承与uvm_test,否则uvm_top将不识别,导致无法启动test

test 的目标包括:

  • 提供不同的配置,包括环境结构配置、测试模式配置等,在创建验证环境
  • 例化测试序列,并且挂载(attach)到目标sequencer,使其命令 driver 发送激励

所有变量部分都放在 test 中,不变的放在env中,


构建环境的主要组件

主要由三类UVM构建模块共同组成验证环境

1.uvm_component

  • 继承与uvm_report_object(进一步继承于uvm_object),提供消息方法;
  • 所有的验证环境组件均继承与uvm_component;
  • 管理验证环境的层次;

uvm_component一个虚类(不能直接例化),所有环境组件均继承与该类。该类提供的接口:

  • 结构,例如get_full_name() , get_parent() , get_num_children()
  • phase机制,例如build_phase() , connect_phase() , run_phase()
  • configuration机制,例如 print_config() ,print_override_info()
  • report机制,例如report_hook() ,set_report_verbosity_level_hier()
  • 事务记录,例如record()
  • factory机制,例如set_inst_override() , set_type_override()

2.uvm_env

  • 继承与uvm_component
  • 没有额外的功能
  • 用来为验证环境提供一个容器

3.uvm_test

  • 继承与uvm_component
  • 没有额外的功能
  • 用来提供对uvm_env的额外配置以及挂载激励
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小verifier

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

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

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

打赏作者

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

抵扣说明:

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

余额充值