UVM Heartbeat机制

1. 前言

在硬件电路中,为了使系统在异常情况下能自动复位,一般都需要引入看门狗(Watchdog)。看门狗其实就是一个定时器电路。当看门狗启动后,计数器开始自动计数,经过一定时间,如果没有被清零,计数器溢出就会对CPU产生一个复位信号使系统重启(俗称“被狗咬”)。系统正常运行时,需要在看门狗允许的时间间隔内对看门狗计数器清零(俗称“喂狗”),不让复位信号产生。如果系统不出问题,程序保证按时“喂狗”,一旦程序跑飞,没有“喂狗”,系统“被咬”复位。

2. Heartbeat作用

UVM heartbeat在UVM中充当类似看门狗定时器的角色,我们可以设定它的定时长度,也就是在这时间内必须要喂狗,还可以设定heartbeat要监控的组件。uvm_heartbeat 监视测试环境中组件的活动,如果发现在指定的时间间隔内没有活动,则 uvm_heratbeat 发出UVM_FATAL消息,导致模拟结束,可以在早期阶段检测仿真挂住,而不是在全局仿真超时到期时检测:

  • 这将有助于识别导致死锁的组件;
  • 通过提前终止仿真来节省仿真时间并释放资源;

既然uvm_heartbeat类似于看门狗,那么在使用上,只需要关注以下三件事:

  • 配置它的定时长度 (这段时间内没有喂狗就终止仿真)
  • 配置它需要监控的对象 (由哪些对象去喂狗)
  • 设置多长时间喂狗 (正常情况下这个时间要小于步骤1的定时长度,除非TB或RTL出问题了)

3. Heartbeat内置函数

uvm_heartbeat 类派生自 uvm_object,它提供一组内置方法来方便用户使用。有如下:

方法定义描述
 function new(string name, uvm_component cntxt, uvm_objection objection=null)uvm_heartbeat的构造函数,name指定当前instance的名字,cntxt通常传当前component的this就好了,objection是uvm_heartbeat监控的关键参数,其它components通过raise或drop这个objection来表示有activity。
function uvm_heartbeat_modes set_mode (uvm_heartbeat_modes mode = UVM_NO_HB_MODE)设置或检索heartbeat的模式,有以下4种模式:
1. UVM_ALL_ACTIVE  – all components are active
2. UVM_ONE_ACTIVE – only one component is active
3. UVM_ANY_ACTIVE – any component is active
4. UVM_NO_HB_MODE — disabled
function void set_heartbeat (uvm_event#(uvm_object) e, ref uvm_component comps[$])comps[$]传递需要监控的组件列表,e用于触发heartbeat检查,并启动heartbeat开始监视。1. 如果event e为空的话,则必须通过显示调用start()方法来启动监视。2. 如果用户需要更改event e,则必须使用stop()来停止监视,并且start()来使新event开始触发监视。
function void add (uvm_component comp)除了在set_heartbeat里可以传递要监控的组件,也可以单独通过add函数来添加监控组件。
function void remove (uvm_component comp)将监控组件从监控列表中移除
function void start (uvm_event#(uvm_object) e=null)启动heartbeat监控。
1. 如果 e 为空,则使用先前设置的事件。
2. 如果之前未设置任何事件,则会发出警告。
3. 如果触发的事件与正在运行的监视器的当前事件不同,则会发出错误。
function void stop ()停止heartbeat监视并可以使用 start() 方法调用启动。

注意:uvm_event e 必须定期触发,它会设置一个监视窗口。如果heartbeat监视器在该时间段内未发现任何活动,则会生成 HBFAIL UVM_FATAL消息。一般来说,事件e可以在无限循环中触发,作为一个永远持续的过程。

4. Heartbeat例子

根据heartbeat的作用和内置函数,举个使用例子。

第一步创建喂狗的uvm_objection实例(假设为uvm_objection obj=new(“obj”)),这个objection需要传递给uvm_heartbeat和所有被监控组件,被监控组件需要定期去raise这个obj来达到喂狗的目的。

第二步创建触发监控窗口的uvm_event实例(假设为uvm_event hb_e=new(“hb_e”)),这个event决定了多长时间去检查下是否有组件喂狗了,也就是raise objection。

第三步就是创建uvm_heartbeat实例(假设为uvm_heartbeat hb=new("hb", this, obj)),在这里把obj传递进去了。

第四步设置uvm_heartbeat的工作模式,比如hb.set_mode(UVM_ANY_ACTIVE)。

第五步设置uvm_heartbeat触发检查的event和检查对象,比如hb.set_heartbeat(hb_e,hb_comp)。这里面把event hb_e和监控组件列表comp传递给uvm_heartbeat了。

此时uvm_heartbeat就正式开始工作了,在hb_e每次被trigger()的时候,根据当前工作模式去检查各个被监控组件是否有调用过obj.raise_objection(this)。如果没有,就会停止仿真,表明验证环境有异常情况。另外一点大家主要注意的是,被监控的多个组件raise的objection是同一个,也就是obj这个实例,因此需要在上层创建好obj之后,把句柄传递给各个被监控组件去raise。

以下为uvm_heartbeat监控两个组件(compA和compB)的示意图,uvm_heartbeat模式为UVM_ALL_ACTIVE。第一张图,在检查窗口内,compA和compB都有喂狗,检查通过。第二张图,在检查窗口内,只有compB喂狗,compA没有喂狗,因此检查失败,会报出UVM_FATAL。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/81407.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

投影标杆,旗舰实力,极米投影仪Z7X为用户创造影院级体验

2023年,在彩电消费市场复苏疲软的背景下,智能投影这个显示新品类却持续走红。今年第一季度,极米科技推出Z系列全新一代产品极米Z7X,和极米Z6相比,在保持轻薄体积不变的情况下将亮度提升了83%,达到600CCB 流…

MAC电脑外放没有声音解决方案

烦人呐,我的mac外接显示屏幕,显示器没有音频输出,需要mac笔记本的音频输出,但是经常打开后,mac没有声音输出,需要重启电脑才能生效。亲测一下方法有效,请参考: 文章目录 一、短期方案…

THINKPHP 微联云投票系统源码独立版 + 支持刷礼物

THINKPHP 微联云投票系统源码独立版 支持刷礼物 nginxphp7.2以上 mysql5.6以上 简单测试后台基本没什么问题,暂时发现H5前端有bug,自行修复。

Echarts图表坐标轴文字太长,省略显示,鼠标放上显示全部(vue)

注意:记得加上这个,触发事件, triggerEvent: true,重点:下面就是处理函数,在实例化图表的时候使用,传入参数是echarts的实例 // 渲染echartsfirstBarChart() {const that thislet columnar echarts.init…

[ MySQL ] — 常见函数的使用

目录 日期函数 current_date — 获取当前日期 current_time — 获取当前时间 current_timestamp — 获取当前时间戳 date — 获取参数的日期部分 ​编辑 date_add — 在日期或时间的基础上进行增加 date_sub — 在日期或时间的基础上进行减少 datediff — 计算两个日期相差…

C# 观察者模式

一、概述 观察者模式是一种常用的设计模式,它属于行为型模式。在C#中,观察者模式通过定义一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式可以实现松耦合,…

解决,worldGeo.db中有geom数据的x1表无法在QGIS中成图像

原因:缺少geom数据对应的坐标geometry_columns文件,如下图所示: STEP: 1,在navicat_for_SQLite中将目标表x1中字段geom中blob改成,POINT,或者MULTIPOLYGON等对应的格式 2,在可以成像的其它数据库中找到POINT或MULTIPOLYGON对应表x2的坐标geometry_columns文件&…

3d max插件CG MAGIC中的蜂窝材质功能可提升效率吗?

工作中能提升效率也都是大家所想的,对于设计师的一个设计过程中,可能想怎么样可以更快呀,是哪个步骤慢了呢? 这样的结果只能说会很多,但是建模这个步骤,肯定是有多无少的。 为了让模型更加逼真&#xff0c…

macbook 加载模型报错:failed to load model

环境:macbook m1 conda python3.9 加载模型链接为:ggml-model-q4_0.bin 加载方式: from langchain.embeddings import LlamaCppEmbeddings embeddings LlamaCppEmbeddings(model_pathllama_path) 在linux上加载是正常的,但是…

[Linux]进程概念

[Linux]进程概念 文章目录 [Linux]进程概念进程的定义进程和程序的关系Linux下查看进程Linux下通过系统调用获取进程标示符Linux下通过系统调用创建进程-fork函数使用 进程的定义 进程是程序的一个执行实例,是担当分配系统资源(CPU时间,内存…

系统架构师---软件重用、基于架构的软件设计、软件模型

目录 软件重用 构件技术 基于架构的软件设计 ABSD方法与生命周期 抽象功能需求 用例 抽象的质量和业务需求 架构选项 质量场景 约束 基于架构的软件开发模型 架构需求 需求获取 标识构件 需求评审 架构设计 架构文档 架构复审 架构实现 架构演化 前言&…

0009Java程序设计-jsp在线学习平台设计与实现

摘 要目 录系统实现开发环境 摘 要 在线学习平台,是一个利用因特网作为平台传送教学内容,实施网上教学,进行网上交流和学习的信息系统。构建在线学习系统平台,可以克服传统课堂教育的局限性,形成一种主动的、协作的、…