【转】静态时序分析之恢复时间recovery time和撤销时间removal time

本文介绍了同步电路中复位信号的recovery time和removal time概念,这两个参数确保了在时钟边沿前后复位操作的正确执行,避免系统出现亚稳态。在CPU和MCU等需要立即工作的模块中,这两个时序参数尤为重要。解决方法是通过工作时钟同步来避免时序违规。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、概念

同步电路中,输入数据需要与时钟满足setup time和hold time才能进行数据的正常传输,防止亚稳态;

类似的,对于一个异步复位寄存器来说,置位和复位信号同样需要和时钟满足recovery time和removal time才能有效进行置位和复位操作。

recovery time:恢复时间。撤销复位时,恢复到非复位状态的电平必须在时钟有效沿到来之前的一段时间到来,才能保证时钟能有效恢复到非复位状态,此段时间为recovery time。

removal time :撤销时间。撤销复位时,在时钟有效沿到来之后复位信号还需要保持的时间为撤销时间removal time。

comment:从定义可以看出,recovery timeremoval time都指的是撤销复位或者置位而言的,即系统或者设备将要work起来,并不是指复位和撤销置位(系统或者设备都要停止work了,还管它亚稳态作甚!)

2、应用

一般逻辑对此时序不用关心,比如很多模块的操作流程是复位完了,才开启模块时钟,再启动模块工作。这种流程可以保证不会出现recovery和removal的问题。

需要关心recovery和removal问题的最常见模块应该是CPU和MCU,因为一般CPU和MCU都是在复位撤销后就开始工作。想象一下,CPU的工作其实是在很多个DFF一起配合完成的,如果复位撤销时刻在DFF的clock沿附近,势必导致各个DFF开始动作的步调不一致,导致无法预料的错误情形(这里是不是又想到了影子寄存器呢!)

3、解决方法

用模块的工作时钟同步后,再送进模块使用。这样综合实现工具是会自动检查这个模块的DFF的时序并修正,直到没有recovery和removal的violation。

### 移除时间恢复时间概念 在信息技术系统中,移除时间Removal Time)通常指的是某个操作或过程失效的时间长度,或者某一特定条件不再满足所需的时间间隔。例如,在泵送系统的上下文中,如果高或低泵送速率的有效性在200天后丧失,则可以认为这是移除时间的一个实例[^1]。 恢复时间Recovery Time),则指从某种中断、故障或其他不利状态恢复正常运行所需要的时间。这可能涉及重新启动服务、修复硬件错误或是调整软件配置等一系列活动。 ### 计算方法 对于定时器设置而言,当`SET_TIMER`标志被启用时,计时器会依据初始化阶段设定好的非零初始值`ival1`或`ival2`开始工作[^2]。这些数值可以帮助定义具体的延迟周期或者是触发某些事件前等待的秒数/毫秒数等单位量度。因此: - **移除时间**可以通过监控设备性能指标的变化趋势来估算;一旦检测到效率下降至预设阈值之下即视为进入“移除期”,直到完全停止有效运作为止所经历的整体时段便是该参数的具体表现形式之一。 - 而关于如何量化**恢复时间**,一般需要考虑几个方面因素包括但不限于诊断问题根源耗时长短、实施纠正措施的速度以及验证解决方案有效性所需的额外测试周期等等综合评估得出最终结果。 以下是简单的伪代码示例展示了一个基本框架用于模拟上述两种时间类型的测量逻辑: ```python def measure_removal_and_recovery(initial_state, threshold, action): removal_start = None recovery_start = None while True: current_performance = get_current_system_performance() if not removal_start and current_performance < threshold: removal_start = time.time() # Mark start of removal period elif removal_start and (current_performance >= threshold or action()): recovery_start = time.time() # Start measuring recovery duration if recovery_start and current_performance >= initial_state * 0.95: # Assuming full recovery when reaching 95% original state break removal_time = removal_start - system_initialization_time if removal_start else float('inf') recovery_time = time.time() - recovery_start if recovery_start else float('nan') return removal_time, recovery_time ``` 此函数接受三个参数:起始正常工作的基准水平 (`initial_state`) ,判定效能降低的标准线(`threshold`) 执行补救动作的方法引用(`action`) 。通过循环不断读取当前系统的表现数据并与给定界限比较从而决定何时开启记录各段时间点并最后返回它们各自的总历时情况。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值