UVM-打印信息机制是如何运作的

        相比传统的SV使用$display函数打印消息,UVM通过冗余度级别的设置提高了仿真日志的可读性。在打印之前,UVM会比较要显示信息的冗余度级别和默认的阈值,若小于阈值则显示;反之不显示。默认的冗余度阈值是UVM_MEDIUM,所有低于其的信息都会显示出来,如UVM_LOW.

1.打印信息冗余度阈值的设置

        UVM中通过get_report_verbosity_level函数得到某个component的冗余度阈值。这个函数将得到一个整数,它代表的含义如下:

typedef enum
{
    UVM_NONE = 0,
    UVM_LOW = 100,
    UVM_MEDIUM = 200,
    UVM_HIGH = 300,
    UVM_FULL = 400,
    UVM_DEBUG = 500
}uvm_verbosity;

        可使用set_report_verbosity_level函数来设置某个特定component的默认冗余度阈值,如在base_test中将driver的冗余度阈值设置为UVM_HIGH,代码为:

virtual function void connect_phase(uvm_phase phase);
    env.i_agt.drv.set_report_verbosity_level(UVM_HIGH);
endfunction

        当涉及到层次引用时,需要在connect phase及之后才能对其调用,如果不牵扯层次引用时,可在connect phase之前调用。

        set_report_verbosity_level只对具体的一个component起作用,如果想把该component及其下所有的component冗余度进行设置,则使用set_report_verbosity_level_hier。

env.i_agt.drv.set_report_verbosity_level_hier(UVM_HIGH);

        除此之外,还可以在命令行中设置冗余度阈值:+UVM_VERBOSITY=UVM_HIGH或者+UVM_VERBOSITY=HIGH,它会把整个验证平台的冗余度阈值设置为UVM_HIGH。

        在芯片验证中,可以根据习惯和需要对不同component设置不同的冗余度阈值。

2.重载打印信息的严重性

        UVM有四种信息严重性从小到大:UVM_INFO、UVM_WARNING、UVM_ERROR、UVM_FATAL。这四种严重性可以互相重载:

virtual function void connect_phase(uvm_phase phase);
    env.i_agt.drv.set_report_severity_override(UVM_WARNING,UVM_ERROR);
endfunction

        当然也可以在命令行中实现,代码为:

+uvm_set_severity=<comp>,<id>,<current severity>,<new severity>

+uvm_set_severity="uvm_test_top.env.i_agt.drv,my_driver,UVM_WARNING,UVM_ERROR"

3.结束仿真的机制

        有两种情况会结束仿真:

        UVM_FATAL一出现表示有重大错误,会立即终止仿真。

        UVM_ERROR达到一定数量后结束仿真。对于某个测试用例,出现了大量error后就不需要再继续仿真等待drop objection了,可以根据错误定位bug所在。

        具体实现方法为:

function void base_test::build_phase(uvm_phase phase);
    super.build_phase(phase);
    env = my_env::type_id::create("env",this);
    set_report_max_quit_count(5);
endfunction

        set_report_max_quit_count()函数用以设置退出的阈值,此时当出现5个uvm_error后会自动退出仿真并打印信息。当测试用例与base_test都设置了退出阈值时,以base_test设置为准。对应的可以用get_report_max_quit_count函数查询当前的退出阈值。

        还可以通过设置set_report_severity_action函数来把UVM_WARNING加入计数目标:

env.i_agt.drv.set_report_severity_action(UVM_WARNING,UVM_DISPLAY|UVM_COUNT);

        函数的第一个参数也可以是UVM_INFO。

        如果想将ERROR从计数目标中移除:

env.i_agt.drv.set_report_severity_action(UVM_ERROR,UVM_DISPLAY);

4.设置断点功能

        UVM支持断点功能,当执行到断点时可以自动停止仿真,以uvm_warning为例使用方法为:

env.i_agt.drv.set_report_severity_action(UVM_WARNING,UVM_DISPLAY|UVM_STOP);

        实际上就是将set_report_max_quit_count函数中的UVM_COUNT替换为UVM_STOP即可实现断点功能。

5.打印信息的控制

        上述描述了set_report_severity_action函数的一系列典型应用,无论是UVM_LOG、UVM_DISPLAY、UVM_COUNT都是UVM内部的一种行为:

typedef enum
{
    UVM_NO_ACTION = 'b000000,
    UVM_DISPLAY = 'b000001,
    UVM_LOG = 'b000010,
    UVM_COUNT = 'b000100,
    UVM_EXIT = 'b001000,
    UVM_CALL_HOOK = 'b010000,     
    UVM_STOP = 'b100000
} uvm_action_type;

        其中NO_ACTION是不做任何操作;UVM_DISPLAY是输出到标准输出上;UVM_LOG是输出到日志文件中,前提是设置好了日志文件;UVM_COUNT是作为计数目标;UVM_EXIT是退出仿真;UVM_CALL_HOOK是调用回调函数,UVM_STOP停止仿真。

        默认情况下,UVM的设置如下:

set_severity_action(UVM_INFO,UVM_DISPLAY);
set_severity_action(UVM_WARNING,UVM_DISPLAY);
set_severity_action(UVM_ERROR,UVM_DISPLAY|UVM_COUNT);
set_severity_action(UVM_FATAL,UVM_DISPLAY|UVM_EXIT);

        在前文中通过设置默认冗余度级别可以关闭默写信息的输出,同样也可以通过UVM_NO_ACTION实现这个功能:

env.i_agt.drv.set_report_severity_action(UVM_INFO,UVM_NO_ACTION);

        声明了UVM_NO_ACTION后,无论原先冗余度是什么级别,该drv中的UVM_INFO信息都不会再输出。

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UVM(Universal Verification Methodology)是一种基于SystemVerilog的验证方法学,它提供了一种灵活的机制来开发可重用的验证环境。UVM中定义了一系列的phase,用于控制验证环境中的各个组件的执行顺序和时序。 UVM中的phase机制主要由以下几个部分组成: 1. UVM Manager:负责管理phase的全局状态和控制phase的执行顺序。 2. UVM Phasing Mechanism:包括各个组件的phase方法和phase queue,用于在不同的phase中执行相应的任务。 3. UVM Phasing Callbacks:用于在phase开始和结束时执行相应的回调方法。 4. UVM Factory:用于创建和配置UVM组件。它提供了一种机制来动态创建和配置组件,使得验证环境更加灵活和可重用。 在UVM中,整个验证环境被分为多个阶段,每个阶段执行不同的任务。这些阶段包括: 1. Build Phase:在这个阶段中,各个组件被创建和配置。 2. Connect Phase:在这个阶段中,各个组件被连接起来,形成完整的验证环境。 3. Run Phase:在这个阶段中,进行实际的测试,包括生成测试向量、模拟等。 4. Shutdown Phase:在这个阶段中,关闭测试环境,释放资源。 在每个阶段中,UVM Manager都会调用相应的phase方法来执行各个组件的任务。各个组件可以通过实现相应的任务方法来完成各自的任务。同时,UVM还提供了一些回调方法,用于在phase开始和结束时执行一些额外的操作,例如打印日志、统计分析等。 通过使用UVM的phase机制,可以使验证环境更加灵活、可重用和可维护。同时,由于UVM是基于SystemVerilog的,所以也可以很好地与设计进行集成,提高验证的效率和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值