文章目录

  • 禁用特定的协议检查
  • 禁用Monitor的协议检查
  • 禁用消息打印
  • UVM的打印信息控制方法

在使用VIP时,出于对仿真性能和环境效率的考虑,可以关闭VIP中的一些检查和打印信息。当然,屏蔽的前提是确认过这些检查或打印信息是不被需要的或已实现的。

禁用特定的协议检查

针对VIP中特定的协议检查,如果频繁报warning或不需要的error时,可使用 disable_check() 方法来禁用该check。
可以在env组件内,当monitor等结构组件已被创建后(如在end_of_elaboration_phase中)调用该方法,例如:

function void end_of_elaboration_phase(uvm_phase phase);// AXI VIPaxi_system_env.master[0].monitor.checks.disable_check(axi_system_env.master[0]
.monitor.checks.signal_valid_rdata_when_rvalid_high_check);// UART VIPuart0_agent.err_check.disable_check(uart0_agent.err_check.svt_err_chk_z_x_on_sout);
endfunction

类似地,也有 enable_check() 方法可以在调用时启用协议检查。

禁用Monitor的协议检查

在某些场景下,如果不需要协议检查,只需检查读/写数据正确性,或已IP级环境中对协议进行了验证,集成到chip级验证环境后,不需要再逐次循环检查协议。为了提高仿真性能,可以禁用整个Monitor的检查。默认情况下,总线monitor和端口monotir始终会检察协议并发出协议违规消息(error或warning)。VIP支持通过配置protected属性dw_vip_axi_system_model_configuration::m_blChkProt 来启用或禁用协议检查。由于此属性是protected类型,因此不能直接通过对象句柄访问。VIP 提供了一个单独的task来访问此属性:

task setChkProt (VMT_BOOL nChkProt, integer kind=-1);

下面是如何禁用它的示例:

dw_vip_axi_system_model_configuration   vip_axi_sys_cfg;
dw_vip_axi_port_model_configuration     vip_axi_slave_cfg;vip_axi_sys_cfg = new (, 1, 1, VMT_BOOLEAN_FALSE);
vip_axi_sys_cfg.setChkProt(0, );  //禁用协议检查vip_axi_slave_cfg = vip_axi_sys_cfg.createPortMdlCfg (`DW_VIP_AXI_SLAVE_PORT_CFG, 0);
vip_axi_slave_monitor = new ("AXI Port Monitor Slave", slave_monitor_mp, vip_axi_slave_cfg );

禁用消息打印

使用VIP时会产生很多打印信息,在仿真过程中不断打印信息或者读写文件对仿真速度影响非常大,因此在环境调试稳定后可以屏蔽掉一些不需要打印信息。VIP本身并未提供控制系统打印的配置,这里有两种方法来实现:

  1. 官方提供了其中一种方法。通过派生uvm_report_catcher创建一个降级类,然后在env或base test中构建它并注册回调
class my_demoter extends uvm_report_catcher;function action_e catch();if(get_severity() == UVM_INFO && get_id() == "process_internal_messages") beginset_verbosity(UVM_DEBUG);set_action(UVM_NO_ACTION); end      return THROW;endfunction
endclass           class ahb_base_test extends uvm_test;my_demoter  demoter;...virtual function void build_phase(uvm_phase phase);demoter = new();super.build_phase(phase);uvm_report_cb::add(null,demoter);...endfunction: build_phase...
endclass
  1. 另一种方法是直接采用UVM中的打印控制函数,推荐采用这种方法更简单,同样可以在end_of_elaboration_phase中控制,例如:
function void end_of_elaboration_phase(uvm_phase phase);// disbale VIP log printaxi_env.axi_system_env.slave[0].set_report_severity_action(UVM_INFO, UVM_NO_ACTION);uvm_top.set_report_id_action("TEST_DONE", UVM_NO_ACTION);
endfunction

最后,总结下UVM中的一些打印消息控制方法,参考下节。

UVM的打印信息控制方法

  • 设置特定component的默认冗余度阈值
set_report_verbosity_level (int verbosity_level)
  • 根据ID和严重性设置打印信息的冗余度阈值
set_report_id_verbosity (string id, int verbosity)
set_report_severity_id_verbosity (uvm_severity severity, string id, int verbosity)

还有两个类似的递归设置函数,set_report_id_verbosity_hierset_report_severity_id_verbosity_hier,可设置component及其下所有component。

  • 根据ID和严重性控制打印信息的行为
set_report_severity_action (uvm_severity severity, uvm_action action)
set_report_id_action (string id, uvm_action action)
set_report_severity_id_action (uvm_severity severity, string id, uvm_action action)

还有三个类似的递归设置函数,set_report_severity_action_hierset_report_id_action_hier,和set_report_severity_id_action_hier

  • 重载打印信息的严重性
set_report_severity_override (uvm_severity cur_severity, uvm_severity new_severity)
set_report_severity_id_override (uvm_severity cur_severity, string id, uvm_severity new_severity)

Synopsys验证VIP学习笔记(6)检查和打印信息控制相关推荐

  1. 日志库 winston 的学习笔记 - logger.info 打印到控制台上的实现原理

    if (process.env.NODE_ENV !== 'production') {logger.add(new winston.transports.Console({format: winst ...

  2. Synopsys Design compiler 学习笔记(收藏)

    IC学习・成长加油站 LoveIC Synopsys Design compiler 学习笔记    design compiler流程 Design compiler工作流程大致分为四步: 1)Lo ...

  3. “物联网开发实战”学习笔记-(二)手机控制智能电灯

    "物联网开发实战"学习笔记-(二)手机控制智能电灯 如果搭建好硬件平台后,这一次我们的任务主要是调试好智能电灯,并且连接到腾讯云的物联网平台. 腾讯云物联网平台 腾讯物联网平台的优 ...

  4. Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理

    Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...

  5. printdocument python_python学习笔记之wxpython打印预览

    主要学习wxPython in action 和Demo程序,做点学习笔记 wxPython 通过使用设备上下文和绘制操作来实现打印,wxPython中实现打印的一个重要的类:wx.PrintOut它 ...

  6. MIPS汇编语言学习笔记07:打印双精度浮点数

    课程原视频: https://www.bilibili.com/video/BV19J411y7pA?p=7 程序功能: 设定两个双精度浮点型数据,将其相加后打印输出. 代码: .datamyDoub ...

  7. 操作系统学习笔记-2.1.3进程控制

    操作系统学习笔记-2019 王道考研 操作系统-2.1.3进程控制 文章目录 3.进程控制 3.1知识概览 3.2 基本概念 3.2.1什么是进程控制? 3.2.2如何实现进程控制? 3.3进程控制相 ...

  8. 阿里云HaaS100物联网开发板学习笔记(二)硬件控制初步--让小灯闪烁起来

    摘要:无论是哪种开发板,要想开发特定的功能,必先从GPIO开始,HaaS100开发也是一样.如果仅仅利用HaaS100的联网功能,那简直是太浪费了.HaaS100拥有其他开发板所具备的所有的功能,比如 ...

  9. CoppeliaSim学习笔记之差速小车的控制与传感器的驱动

    文章目录 1. 控制篇 2. 传感器篇 2.1 里程计仿真 2.2 TF 发布 2.3 激光雷达仿真 2.4 IMU 仿真   上一章节 CoppeliaSim学习笔记之仿真环境与小车模型的搭建 我们 ...

最新文章

  1. MySQL存储写入速度慢分析
  2. mysql-基本命令
  3. easyui datagrid 每行数据添加 按钮
  4. python 基础——变量
  5. 【090723】动态调用webservice
  6. Codeforces Beta Round #12 (Div 2 Only)【未完结】
  7. 美国国防部CIO:企业IT可考虑用开源做数据分析
  8. mybatis 取查询值_MyBatis面试题集合,90%会遇到这些问题
  9. 在Windows上安装MySQL5.7
  10. 十大笔记本品牌型号命名规则【惠普】
  11. 《物联网Android程序开发案例式教程》Demo1:线性布局
  12. 如何完全彻底的卸载Oracle
  13. 基于Raspberry pi的BMI160驱动程序实例
  14. 浅谈token是什么?
  15. 梯度向量、Jacobian、Hessian矩阵
  16. Spring-Cloud之Spring Cloud Netflix Eureka服务注册与发现
  17. Error in network defenition etc/netplan/01-netcfg.yaml line 0 collumn 8: expected mapping.
  18. c语言strict函数的作用,C语言实现进制转换函数的实例详解
  19. 吴恩达——机器学习 局部加权回归(Loess)
  20. 扩展正则表达式之加号

热门文章

  1. NTP服务器时间同步设置
  2. 邮箱服务器邮件压缩,Windows Mail 可以压缩邮件存储.这可能需要几分钟.
  3. 读书日之《历史的温度》
  4. 一款炫酷的相册动画合集【源码分享】
  5. 非遗造物 匠心守护 昆明南亚风情第壹城非遗文化节等你来玩
  6. java反射更改方法内容_Java反射
  7. ubuntu安装pip3一直失败的解决方法
  8. Android 自定义AlertDialog
  9. 若依框架(SpringBoot)增加SQL防注入处理,SpringBoot增加SQL防注入
  10. android对话框知识点,Android ProgressDialog知识要点