UVM基础之--------uvm_root

uvm_root 是uvm的顶层实例扮演了一个top-level and phase controller 的作用,对于component来说。该类不需要用户实例化,他是一个自动实例化了的类,用户直接通过uvm_top调用。任何component,只要没有指定其parent,那么他将作为top的一个child。top管理所有component的phase;

1. The UVM automatically creates a single instance of uvm_root that users can access via the global (uvm_pkg-scope) variable, uvm_top.

2. uvm_top实例的关键作用:

1. Implicit top-level(隐式的顶层)    The uvm_top serves as an implicit top-level component.  Any component whose parent is specified as NULL becomes a child of uvm_top.  Thus, all UVM components in simulation are descendants of uvm_top.所有组建的parent被指定为NULL的,就会成为uvm_top的child,uvm_top是uvm组建树的顶层。

2. Phase control    uvm_top manages the phasing for all components.

3. Search    Use uvm_top to search for components based on their hierarchical name.  See find and find_all.(使用uvm_top基于层次名搜索组件)

4. Report configuration    Use uvm_top to globally configure report verbosity, log files, and actions.  For example, uvm_top.set_report_verbosity_level_hier(UVM_FULL) would set full verbosity for all components in simulation.

5.  Global reporter    Because uvm_top is globally accessible (in uvm_pkg scope), UVM’s reporting mechanism is accessible from anywhere outside uvm_component, such as in modules and sequences.  See uvm_report_error, uvm_report_warning, and other global methods.

1.属性

uvm_component top_levels[$];//各个top注册在这 i.e test,It includes the uvm_test_top component that is created by run_test as well as any other top level components that have been instantiated anywhere in the hierarchy.

bit  enable_print_topology = 0;//如果被设置,在end_of_elaboration phase结束的时候打印拓扑结构

bit  finish_on_completion = 1;//If set, then run_test will call $finish after all phases are executed.

time phase_timeout = `UVM_DEFAULT_TIMEOUT;

static local uvm_root m_inst;

bit m_phase_all_done;//所有阶段执行完毕

2. 主要的API方法:

1. virtual task run_test (     string      test_name      =      ""     )://解析命令行的"+UVM_TESTNAME=",从工厂中取出uvm_test_top并构造一个实例,调用相应的实例。

1. Phases all components through all registered phases

2.  If the optional test_name argument is provided, or if a command-line plusarg, +UVM_TESTNAME=TEST_NAME, is found, then the specified component is created just prior to phasing.

2. find/find_all:

1. function void uvm_root::find_all(string comp_match, ref uvm_component comps[$],

input uvm_component comp=null); //查找整个uvm_top,调用m_find_all_recurse实现

2.function uvm_component uvm_root::find (string comp_match);//调用uvm_root::find_all实现

3. uvm_root私有函数:

1. function uvm_root::new();//设置reporter, command_processor,调用report_header

1. 调用super.new("__top__",null)将uvm_root设置成树的顶层

2. 设置reporter,拿到command_processor,调用report_header

3. 调用m_check_verbosity通过命令行获取并设置verbosity

2. function uvm_root uvm_root::get();

1. 构成uvm_root的单态类

2. 调用了uvm_domain::get_common_domain();m_inst.m_domain = uvm_domain::get_uvm_domain()即生成了两个domain 一个common 一个uvm_domain

3. task uvm_root::run_phase (uvm_phase phase);//该函数主要检查$time是否为0,如果不为0就报告错误,因为run必须从0时刻开始

4. function void uvm_root::m_do_dump_args();//如果命令行有+UVM_DUMP_CMDLINE_ARGS,就把命令行的所有参数输出

5. function void uvm_root::build_phase(uvm_phase phase);//调用一些内建函数完成对uvm仿真环境的配置:

super.build_phase(phase);

m_set_cl_msg_args();

m_do_verbosity_settings();//解析命令行输入+uvm_set_verbosity=,主要进行一些语法检查,如果发现问题就报错,并不对设置做处理

m_do_timeout_settings();//解析命令行的"+UVM_TIMEOUT=",并把该设置应用于uvm_top

m_do_factory_settings();//解析命令行的+(UVM_SET_INST_OVERRIDE|uvm_set_inst_override)=,调用m_process_inst_override或者调用m_process_type_override

m_do_config_settings();从命令行中获取+(UVM_SET_CONFIG_INT|uvm_set_config_int)=设置,并解析该设置,最后调用m_process_config记录这些设置到resource数据库里边

m_do_max_quit_settings();+UVM_MAX_QUIT_COUNT=解析命令行的这个选项,并把该选项的设置设置入全局的report_server

m_do_dump_args();    //如果命令行有+UVM_DUMP_CMDLINE_ARGS,就把命令行的所有参数输出

来自为知笔记(Wiz)

UVM基础之--------uvm_root

时间: 2024-10-05 04:02:13

UVM基础之--------uvm_root的相关文章

UVM基础之---------uvm report 机制分析

uvm 中的信息报告机制相对来说比较简单,功能上来说主要分为两部分: 第一通过ID对component的信息报告冗余级别进行控制,针对每个冗余级别进行不同的行为控制.这部分工作主要由uvm_report_hander来实现: 主要涉及到的方法有get_report_verbosity_level(severity, id)/get_report_action(severity,id) == uvm_action'(UVM_NO_ACTION) 第二是对message进行格式化的输出,这部分工作主

UVM基础之---------uvm factory机制register

factory机制的一大特点就是根据类的名字来创建类的实例. factory 机制中根据类名来创建类的实例所用到的技术:一是参数化的类,二是静态变量和静态函数.这两者是factory机制实现的根本所在. UVM 中有两大关键类,uvm_object 和 uvm_component.一个 uvm_object 在定义时一般要调用 uvm_object_utils 宏,而一个 uvm_component 在定义时要调用uvm_component_utils宏.factory所有的操作都通过这两个宏来

UVM基础之-------uvm report机制的使用

后面的例子我会继续补充: 1. 因为uvm默认定义的message格式比较长,非常不利于debug过程中的分析使用,一般情况下,开始使用uvm,都要利用uvm_report_server重新定义message输出的格式.下面给出一个例子:用于将name和ID限定在同一个width. class my_report_server extends uvm_report_server; int name_width = 20; int id_width   = 20; function string

UVM基础之---------Reporting Classes

Reporting 类提供了一组工具用于格式化报告输出 report机制大概包括四个主要的类uvm_report_object,uvm_report_handler, uvm_report_server,uvm_report_catcher,UVM reporting主要的接口是uvm_report_object(这是一个接口类),这是uvm_components的父类.uvm_report_object通过内部的function调用uvm_report_handler的function来执行大

UVM基础之------uvm_transaction

uvm_transaction继承自uvm_object,添加了timing和recording接口,该类是uvm_sequence_item的基类.下边将做剖析 1. 这个类提供了时间戳属性(timestamp properties),通知事件(notification events),和交易记录(transaction recording)支持. 2. 使用这个类作为用户定义的基础交易是弃用.其子类uvm_sequence_item应当作为基类为所有用户定义的事务类型. 3. 这个API的使

UVM基础之----uvm_object

uvm_void The uvm_void class is the base class for all UVM classes. uvm_object: The uvm_object class is the base class for all UVM data and hierarchical classes. uvm_object是一个uvm中data和component共同的基类,里边集成了很多东西如recorder,reporter等,还定义了许多公用的接口.该类继承自uvm_vo

UVM基础之------uvm_port_base

Port Base Classes uvm_port_component_base    This class defines an interface for obtaining a port's connectivity lists after or during the end_of_elaboration phase.主要用来在end_of_elaboration phase后返回某个接口的连接列表 uvm_port_component #(PORT)    See descriptio

UVM基础之---------uvm factory机制base

从名字上面就知道,uvm_factory用来制造uvm_objects和component.在一个仿真过程中,只有一个factory的例化存在. 用户定义的object和component types通过typedef或者宏在factory中注册,factory产生和保存轻量级的代理(proxy): 1.  uvm_object_registry #(T,Tname) for objects 2.  uvm_component_registry #(T,Tname) for components

UVM基础之---Command-line Processor

提供一个厂商独立的通用接口命令行参数,支持分类:   1. 基本参数和值:get_args,get_args_matches 2. 工具信息:get_tool_name(),get_tool_version() 3. 支持从命令行设置各种UVM变量如冗长和配置设置积分和字符串类型:  +uvm_set_config_int, +uvm_set_config_string 类:uvm_cmdline_processor: 这个类在模拟过程中提供一个命令参数接口,这个类应该是当成一个单例类使用,但这