找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1095

积分

0

好友

141

主题
发表于 2025-12-31 02:00:55 | 查看: 21| 回复: 0

对于包含锁存器的设计,静态时序分析 (STA) 会应用一个称为 时间借用 的概念。如果你在设计中使用锁存器并在时序报告中看到相关提示,理解这个概念至关重要。

本文首先解释时间借用的核心思想,随后探讨 STA 工具在分析锁存器设计时如何具体应用这一机制。

假设时钟周期为 10 个时间单位,占空比为 50%,其波形如下:

时钟波形图:周期10,占空比50%的方波
图1:周期为10个时间单位的时钟波形

同时,考虑一个简单的三级触发器电路:

三级触发器级联电路:F1 -> F2 -> F3
图2:F1、F2、F3三级触发器级联示意图

为了简化分析,我们假设所有触发器的建立时间和保持时间均为 0,时钟偏斜和时钟延迟也为 0。

在 0 时刻从 F1 发出的数据,必须在 10 时刻之前到达 F2 才能被正确捕获。同理,从 F2 发出的数据也有 10 个时间单位传送到 F3,并在下一个时钟沿被采样。

现在,我们将中间的触发器 F2 替换为一个由同一时钟驱动的锁存器 L2:

中间级替换为锁存器的电路:F1 -> L2 -> F3
图3:中间级为锁存器L2的电路结构

让我们先理解时间借用的概念,之后再讨论 STA 的具体分析。

从 F1 到 L2 的路径分析
如果数据在 10 时刻之前到达锁存器输入端,它会像在触发器前一样等待。但关键区别在于,如果数据在 10 时刻之后到达呢?锁存器 L2 在 10 到 15 的时间段内是“透明”的。因此,只要数据在 15 时刻之前到达,L2 仍然能够捕获并使用它。

例如,若数据在 12 时刻到达 L2,这意味着锁存器为这条路径提供了 2 个时间单位的额外裕量(相较于触发器)。在这个例子中,L2 能提供的最大优势(即最大可借用时间)是 5 个时间单位(透明窗口的宽度)。

从 L2 到 F3 的路径分析
数据在 12 时刻从 L2 输出,并需要在 20 时刻被 F3 采样。因此,留给这条路径的时间只有 8 个时间单位(20 - 12)。

时间借用的本质
在全触发器的电路中,F2 到 F3 的路径本有 10 个时间单位。但在当前电路中,它少了 2 个时间单位。这 2 个时间单位被前一级路径(F1 到 L2)“借用”了。

馈入锁存器的路径 获得了额外的 2 个时间单位以满足时序,因此 锁存器之后的路径 不得不从其原有的 10 个时间单位份额中“让出”这 2 个单位。

关键点总结
馈入锁存器的路径可以从后续路径借用时间(最大不超过锁存器的透明窗口)。实际借用的时间量是路径满足时序所需的最小值(受限于最大可借用时间)。

  • 本例最大可借用时间量 = 5 个时间单位。
  • 本例实际借用时间量 = 2 个时间单位。

这意味着,除了默认的 10 个时间单位外,F1 到 L2 的路径又额外“使用”了 2 个单位才满足时序要求。

理解了基本概念后,我们来看 STA 工具如何对这类设计进行分析。

建立时间分析
对于在 0 时刻由 F1 发出的数据,L2 在 0 到 5 的时间窗口内是开放的,可以捕获数据。
STA 工具会将 0 时刻视为 L2 的捕获沿,并附带一个 5 个时间单位的借用容量。同时,从 L2 到 F3 的路径分析为:在 0 时刻发送,在 10 时刻于 F3 处捕获。因此,整体从 F1 到 F3 的路径总时间预算为 10,其中最多 5 个单位可用于 L2 之前的部分,剩余部分用于 L2 之后。

保持时间分析
保持时间分析要确保前一个周期的数据不会被新数据干扰。F1 在 0 时刻发送的数据,可能在 0 到 5 期间被 L2 捕获。
那么,F1 在下一个周期(10 时刻)发送的数据呢?如果它在 5 时刻之前到达 L2,就会干扰 0 时刻的数据。因此,STA 工具会针对 F1 在 10 时刻发送的数据和 L2 在 5 时刻的捕获沿,执行一次保持时间检查,确保新数据不会过早到达。

通过对时间借用机制的剖析,我们可以更好地理解锁存器在时序路径上的独特行为,这对于进行深层次的数字电路设计与分析非常有帮助。想了解更多底层原理与设计优化,欢迎在 云栈社区 的“基础与综合”版块交流探讨。




上一篇:树莓派CM0邮票孔封装计算模块:中国市场专属的迷你Linux计算机
下一篇:OpenTelemetry Golang实现:在RocketMQ中手动传播Trace实现异步任务链路追踪
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-11 09:33 , Processed in 0.308696 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表