从上文uvm_component的学习中我们知道uvm_root的父类是uvm_component,因而其创建的时候必须指定parent,但是我们看到uvm_root的构造函数new并未传递任何参数(不仅没有parent,甚至连name都没用),只是调用了父类中的new函数,传入参数name=“__top__”,parent=null,我们在回头看uvm_component中的new函数时发现1818-1821...
在前一篇文章的简单的UVM框架Testbench中,我们曾提到继承自uvm_component的类可以作为UVM树的节点,有与验证平台一样的生命周期;继承自uvm_object的类生命周期短于验证平台,通常作为一些临时部件类或传递的信息类等。其实,uvm_component本身也是继承自uvm_object的,其具体的继承关系如下图所示。 从图上给可以看出,除了...
1.uvm_component中的parent UVM通过uvm_component来实现树形结构,所有的UVM树的节点都是一个uvm_component。每个uvm_component都有一个特点:他们在new的时候,需要指定一个类型为uvm_component,名字为parent的变量。 Function new(string name, uvm_component parent) 一般的,在使用的时候,parent都是this。假设现在有一...
在271行,提到了uvm_root::new(),其实在uvm_root::new()中不需要任何参数,它调用 super.new,传入的 name 参数为__top__, 而 parent 参数为 null。 又回到uvm_component.new(),看一下下边关于uvm_root相关的代码: 在uvm_component 中,判断parent=null && name == “__top__”的时候,就知道这是uvm的...
uvm_objection 和 uvm_component 是 uvm 中两大基础类,刚开始学习的时候,对两个东西认识不深,以为它们俩差不多,谁知道它两是一个是“爷爷”,一个是孙子的关系,两者贯穿整个 uvm 验证方法学。至于为什么要划分 uvm_object 和 uvm_component 呢,是因为前辈们在验证的过程中发现,对事情进行分工能降低复杂...
在简单的测试平台里,component之间通过变量或者config_db机制通信是可行的,但是如果在复杂测试平台中依然使用这种耦合性很强的方式通信的话,就不太行了。因此,UVM提供了TLM这样的概念。接下来将会从需求出发,逐步引入port、export、imp、analysis端口、uvm_analysis_imp_decl宏以及FIFO等。
UVM的组建类(uvm_component)是验证环境的骨架,用于验证环境的结构的创建。主要包括uvm_driver、uvm_monitor、uvm_sequencer、uvm_agent、uvm_scoreboard、uvm_env、uvm_test等。 在对组件类进行工厂机制的注册时,需使用宏`uvm_component_utils()。而对于组件的构建函数,其固定形式为: ...
但从继承图中可以看出,其实,uvm_component是uvm_object的“孩子”。uvm_object是UVM中最最基本的类,工作中常用的类基本都是派生自uvm_object,uvm_void更是类的祖宗。而工作中UVM验证平台常见的组件,比如,uvm_agent,uvm_driver,uvm_monitor,uvm_scoreboard,uvm_env,uvm_test都继承自uvm_component。
UVM:3.1.6 uvm_component 的限制 题目讲的只是uvm_component 这个单独 class,不包括它的extends。 1.uvm_component 从 uvm_object 派生来的。理论来说,uvm_component 应该具有uvm_object 的所有行为特性。但是 uvm_component 作为UVM 的树节点,使它失去了uvm_object 的某些特性。
Env相当于一个特大容器,把所有的uvm_component都包含在其内部作为其成员变量。 实际验证平台: 类的定义与实例化: 类的定义:及编辑器写的:class A;……….endclass 类的实例化:及A a_inst;a_inst = new(); 类的定义相当于通知systemverilog仿真器,可能要用到这样一个类,类的实例化在于通过new(),来通知s...