【前端设计】监控顺序返回型总线超时的计时器模块设计

news2024/11/17 7:34:04

前言

总线超时检查机制是系统中必要的模块设计,用于在总线无法返回response时能够及时上报中断。从理论上分析,如果总线发生了诸如挂死或者物理损坏等超时行为,无论计时器上报timeout的时间偏大还是偏小,都是一定可以上报中断的。不过呢在一些敏感的系统中,及时发现问题还是很有必要的,因此这篇文章来聊一下如何设计一个相对平衡的超时计数器。
适用场景为支持outstanding的顺序返回response的总线。

严格计时

如果以最严格的超时检查机制,那么理应对每一个发送出去的req都要进行rsp返回计时:
严格时间检测
中断超时的条件也就是:

(time0 > timeout) || (time1 > timeout)  || (time2 > timeout)  || (time3 > timeout)  || ...

任何一个计时器超时了都会上报超时中断,显然这样是最及时最准确的方式。但是这样做的缺点也非常的明显,需要为每一个req组织一个计时器,大概有outstanding * timer_width的寄存器资源消耗以及额外的逻辑开销。

简单计时

如果采用简单的超时检查机制呢,那么我们就只需要知道总线是否还“活着”,因此可以把计时器设置为看门狗的方式:当有rsp未返回时,计数器始终累加,每次有一个rsp返回,则把计数器清零:

timer = rsp ? 0 : outstanding ? timer+1 : timer;

这样做的收益是非常明显的,我们只需要一个计时器就可以了资源上非常的节省,并且在总线确实无法返回时一定能做到超时检测。但是缺点也是非常明显的,即此时真正的上报中断时间可能会远远大于设置的timeout值,极端场景如下图:
简单时间检测
第三个返回的rsp实际早已经超时了,但是直到很久后才被检测发现到或者没有被发现。简单计时模式下,设置超时时间阈值为timeout时,极限情况(每个rsp与上一个rsp都相隔timeout拍)超时了需要在timeout*outstanding拍后才会触发中断,而实际上第二个rsp就已经超时了。对于超时检测不敏感的系统,这样的设计没有问题,但是如果需要尽快上报超时中断的例如车载系统,我个人觉得这样设计风险比较大。

平衡时间与资源的计时方式

那么我们的目的就是很明确了,就是寻找一种资源占有小且能够尽快发现总线超时的计时器方案。那么我们来进一步观察顺序放回rsp的总线行为:
均衡型时间检测
如果只有一个计时器,我们希望他记录的是什么值呢?显然记录的应该下一个要回来的rsp距离他对应的req的时间。假设我们只发出了req0和req1,那么显然现在我们需要记录的是rsp0是不是要超时了,如果rsp0超时了那么根本不用管rsp1直接上报中断就可以了。如果摸一个时刻(距离req0发送时间点time0后)rsp0收回了,那么此时计时器应该修改为什么值呢:

timer = time0 - delay0;

即此时距离req1发送的时间点已经过去了(time0-delay0)时间,而rsp1还没有回来,显然计时器应该调整为这个记录值。以此类推,只要回来一个rsp_n那么就将req_n~req_n+1之间的delay减去,此时的timer记录的时间就时钟保持准确,如果发生超时可以第一时间上报。然而这样设计还有一个问题,虽然我们的计时器只有一份,但是我们需要记录每两个req之间的delay大小,资源上仍然没有节省。
因此可以对该方案进行优化,即不记录每一个delay的大小而只记录一个max_delay的值:

max_delay = max(delay0, delay1, delay2, ...);

即每次返回一个rsp则对timer执行减max_delay的操作。显然,这回导致timer减的值偏大,因此实际到达超时的时间仍然会比设定时间长,极限的情况是:

timeout + max_delay*(outstanding-1)

也就是req是连续来的,每次rsp返回时timer都应该减1但是实际减了max_delay,计时器的值相比真正的值少了max_delay*(outstanding-1),自然发生超时情况下上报中断的时间要比预定的timeout时间多max_delay*(outstanding-1)。不过相比于简单计时方案的timeout*outstanding拍才能上报中断,这种方案显然已经足够的快速了。
如果希望进一步的简化设计方案,可以考虑将max_delay替换为cfg_delay,即通过软件配置寄存器配置一个delay值,每次timer都减去这个值即可避免了在rtl中刷新max_delay。但是这样做的虽然保证了在超时发生时必然可以上报中断,也会导致cfg_delay配置过小时误报中断,因此cfg_delay的设置需要一定的经验。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Xilinx MicroBlaze系列教程(适用于ISE和Vivado开发环境)

本文是Xilinx MicroBlaze系列教程的第0篇文章。这个系列文章是我个人最近两年使用Xilinx MicroBlaze软核的经验和笔记,以Xilinx ISE 14.7和Spartan-6,以及Vivado 2018.3和Artix-7为例,介绍MicroBlaze软核、AXI系列IP核的软硬件使用,希望能帮助到更多的人。 MicroBlaze是Xil…

什么是有限元分析?能用来干什么

您是否想过工程师和制造商如何测试他们设计的耐用性、强度和安全性?如果您看过汽车广告,您可能会相信工程师和设计师不断地破坏他们的产品以测试其强度。您可能会得出结论,制造商会重复此过程,直到设计能够承受巨大的损坏并达到可…

夜游经济:夜景“亮化”,形象“美化”,经济“活化”

复杂的国际形势之下,扩大国内消费需求,激发消费市场潜力,堪称疫后经济复苏振兴的“金钥匙”。这一背景下,大力发展夜游经济,成为提振国内消费需求、促进城乡居民就业、拉动经济复苏增长的重要突破口。去年以来&#xf…

无法超越的100米_百兆以太网传输距离_网线有哪几种?

对网络比较了解的朋友,都知道双绞线有一个“无法逾越”的“100米”传输距离。无论是10M传输速率的三类双绞线,还是100M传输速率的五类双绞线,甚至1000M传输速率的六类双绞线,最远有效传输距离为100米。在综合布线规范中&#xff0…

Qt下实现欧姆龙PLC 串口发送HOSTLINK(FINS)模式

文章目录前言一、HOSTLINK协议说明二、校验码(FCS)计算三、示例完整代码四、下载链接总结前言 本文讲述了Qt下模拟串口调试工具发送HOSTLINK(FINS)模式,主要进行了HR保持区的字和位的读写,对HOSTLINK协议中…

记一次CPU飚高以及排查过程

一.cpu突然飚高 收到系统频发的cpu超过90%的告警.虽然是在非线上环境出现.接到告警后第一反应还是去重启了机器,重启后cpu如期的下降了下来.以为能高枕无忧,不过一会儿还是收到了告警. 二.排查 2.1 top 指令查看物理机进程id 申请了堡垒机权限登上机器 top指令后.如下确实发…

微服务,Docker, k8s,Cloud native 云原生的简易发展史

微服务发展史 2005年:Dr. PeterRodgers在Web ServicesEdge大会上提出了“Micro-Web-Services”的概念。2011年:一个软件架构工作组使用了“microservice”一词来描述一种架构模式。2012年:同样是这个架构工作组,正式确定用“micr…

万字详解 C 语言文件操作

目录 一、什么是文件? 1.1 - 文件和流的基本概念 1.2 - 文件的分类 1.3 - 文件名 二、缓冲文件系统和非缓冲文件系统 三、文件指针类型 四、文件的打开和关闭 4.1 - fopen 4.2 - fclose 五、文件的顺序读写 5.1 - 字符输出函数 fputc 5.2 - 字符输入函数…

【Kubernetes 企业项目实战】06、基于 Jenkins+K8s 构建 DevOps 自动化运维管理平台(上)

目录 一、k8s 助力 DevOps 在企业落地实践 1.1 传统方式部署项目为什么发布慢,效率低? 1.2 上线一个功能,有多少时间被浪费了? 1.3 如何解决发布慢,效率低的问题呢? 1.4 什么是 DevOps? …

【JavaScript】原型链

文章目录构造函数原型对象访问机制内置构造函数一切皆对象原型链构造函数 - 本质还是一个函数- 和 new 关键字连用- 特点1. 自动创建一个对象2. 自动返回一个对象3. 让函数的this指向这个对象 书写构造函数的时候1. 属性写在函数内2. 方法写在原型上构造函数的不合理 把方法写在…

Android studio 护眼模式配置、字体大小设置、内存大小设置等各类疑难杂症

Android studio 4.1 1、左边目录栏颜色配置: 2、代码编辑区域背景色设置 3、控制台背景色设置 4、菜单栏、工具栏、左边栏字体大小设置 5、编码区字体大小设置 6、修改内存大小、显示内存 例如:修改android-studio/bin/studio.vmoptions studio64.vmop…

NANK南卡护眼台灯Pro评测,护眼台灯天花板般存在!

现代大环境下,生活节奏和压力的不断加快加重,如今的手机、电脑屏幕以及长时间的工作学习都会出现用眼过度的问题,久而久之,各种眼睛刺痛、干涩、肿胀等近视问题接踵而至。为了保障自己的健康,近些年,人们纷…

回归预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入单输出

回归预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入单输出 目录回归预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入单输出预测效果基本介绍模型描述程序设计参考文献预测效果 基本介绍 MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入单输出。 1 .data为…

基础课程11:调试工具

目标 有时事情不会按照预期进行,从总线(如果有的话)检索到的错误消息不能提供足够的信息。幸运的是,GStreamer附带了大量调试信息,这些信息通常会提示问题可能是什么。本教程展示了: 如何从GStreamer获取更多调试信息。 如何将自己的调试信…

电力电子器件简介

文章目录1、二极管2、BJT3、晶闸管(SCR)4、TRIAC5、GTO(全控器件)6、功率MOSFET(开关速度快、电压驱动更容易)7、IGBT8、总结![在这里插入图片描述](https://img-blog.csdnimg.cn/1d309b3d449040788c6437f8…

【胖虎的逆向之路】04——脱壳(一代壳)原理脱壳相关概念详解

【胖虎的逆向之路】04——脱壳(一代壳)原理&脱壳相关概念详解 【胖虎的逆向之路】01——动态加载和类加载机制详解 【胖虎的逆向之路】02——Android整体加壳原理详解&实现 【胖虎的逆向之路】03——Android一代壳脱壳办法&实操 文章目录【…

高速路如何避免ETC车辆漏计问题,ETC通道出入车辆校准看板

人群密集场所事故预防措施和应急管理方案的制定,对每一个交通枢纽和大型社会活动场所都显得尤为重要。对于交通管理部门来说,获取准确、可靠的交通数据已经变得越来越重要。 所以呢,ETC出入车辆校准看板是必要的。ETC出入车辆校准看板&#x…

如何使用路由策略解决 ISIS与OSPF双点双向产生的次优路径、环路隐患?

3.1.0 如何使用路由策略解决 ISIS与OSPF双点双向产生的次优路径、环路隐患 一、双点双向中的次优路径解决方法 双点双向中由于默认路由优先级造成次优路径的产生,而解决的方法就是修改路由优先级。 双点双向错误的解决方法 关于修改路由优先级,需要注…

2022 医疗卫生行业应急响应形势分析报告 脱敏板

声明 本文是学习2022医疗卫生行业网络安全分析报告. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 医疗卫生行业应急响应形势分析 2021年1-12月,奇安信集团安服团队共参与和处置全国范围内医疗卫生行业网络安全应急响应事件84起&#xf…

is not defined at HTMLInputElement.onclick

vue项目中一小部分功能想要使用原生的onclick 事件,发现报错Uncaught ReferenceError: 函数名 is not defined at HTMLInputElement.onclick搜索了相关blog,得出结论是onclick事件调用的方法必须是全局变量或者说是window的方法解决方法:将cl…