我们从2011年坚守至今,只想做纯粹的技术论坛,请不要发布和技术无关的话题。  本站有两万多份高大上的PCB和原理图下载,每日更新中,欢迎常回来看看

 找回密码
 立即注册
搜索
查看: 189|回复: 0

[业界/制造] FPGA开发中建立时间和保持时间的深度解析

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:198
  • 打卡月天数:0
  • 打卡总奖励:714
  • 最近打卡:2025-11-21 20:33:51

1940

主题

405

回帖

1712

积分

二级逆天

积分
1712
发表于 2025-6-4 23:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×

一、概念定义

建立时间(Setup Time):时钟上升沿到来前,数据必须保持稳定的最小时间窗口。确保寄存器在采样时刻能捕获到有效数据,避免因数据未稳定导致采样错误。

保持时间(Hold Time):时钟上升沿到来后,数据必须保持稳定的最小时间窗口。防止数据在采样后立即变化,导致寄存器内部电路状态紊乱(如亚稳态)。

234716f5775d6d.png
图1 建立和保持时间

传输的数据必须在时钟上升沿的建立时间和保持时间内保持稳定,数据才会被锁存,时钟沿与建立时间和保持时间之间的关系如图1所示。

图2是一个寄存器传输的时序电路,输入数据data1和data2会在时钟的上升沿被分别锁存到reg_2和reg_l的输出端,然后这两个数据分别经过各自的路径到达与门的输入端,它们与运算后信号传送到下一级寄存器reg_3的输入端,对应它们上一次被锁存后的下一个时钟上升沿,reg_3的输入端数据被锁存到输出端。

2347165d5bf87a.png
图2 寄存器输入传输时序电路

如图3所示,clk表示时钟源clock发出的时钟波形,它要分别到达源寄存器regl、reg2以及目的寄存器reg3, 它们所经过的时间延时是不一样的。因此看到图3中时钟到达reg3的波形clk_r3相对于基准时钟clk的波形会略有一些延时。reg1out和reg2out分别是数据datal 和data2被锁存到reg2和reg1 寄存器的波形,reg3in则是reg1out和reg2out的波形经过走线延时和门延时后到达reg3 输入端的波形,而reg3out则是clk_r3的上升沿采样到reg3in数据后,在寄存器输出端的最终波形。

234716e389e969.png
图3 建立时间和保持时间都满足要求的波形

在图3的波形中,可以看到clk_r3的每个上升沿前后各有一条虚线,前一条虚线到clk_r3 时钟上升沿的这段时间即建立时间,clk_r3 时钟上升沿到后一条虚线的这段时间即保持时间。在这段时间内数据不能变化,必须保持稳定。在这个波形中,reg3in的数据在建立时间和保持时间内没有任何变化,因此可以稳定地将reg3in的数据锁存到reg3的输出reg3out中。在传输中,我们认为数据的建立时间和保持时间都是满足要求的。如图4所示,同样的信号,但我们发现reg3in 在clk_r3的建立时间内发生变化,导致clk_r3 上升沿锁存到的reg3in数据是不确定的,那么随后的reg3out 值输出也会处于一个不确定状态。比如第一个时钟周期,原本reg3in 应该是稳定的低电平,但是由于整个路径上的延时时间过长,导致reg3in在clk_r3的建立时间内数据还未能稳定下来, 在建立时间内电平正处于从高到低的变化,就是不稳定的状态,导致的后果就是reg3out 的最终输出不是确定的状态,可能出现亚稳态,而不是原本期望的低电平。再来看看保持时间违规的情况,如图5所示,这次是数据传输得太快了,原本应该下一个时钟周期到达clk_r3 的数据竟然在clk_r3的前一个时钟周期的保持时间还未过去就来到了。因此,它导致的最终结果也是后端输出的reg3out 处于不确定状态。前面出现的建立时间或保持时间违规的情况,都会导致数据的误采样,引起功能问题。传输数据在时钟锁存沿的建立时间和保持时间内必须是稳定的,这是时序分析中最基本的结果。

234717cc0665fe.png
图 4 建立时间不满足的波形
234717517b060e.png
图5 保持时间不满足的波形
二、如何处理建立时间/保持时间不满足情况

建立时间不足:数据到达寄存器输入端的时间过晚,在时钟沿前仍处于跳变状态(如信号传输路径过长)。

保持时间不足:数据更新过快,在时钟沿后立即变化(如组合逻辑延时过短)。

维度
建立时间优化方法
保持时间优化方法

逻辑设计
拆分长组合逻辑路径(流水线设计)、关键路径打拍
插入缓冲器(Buffer)增加路径延时、优化布线

时序约束
用   XDC/SDC 指定时钟周期与最大路径延时
用set_min_delay强制设置最小路径延时

工具辅助
使用 FPGA  开发工具(如   Vivado)的时序分析报告定位瓶颈
通过时钟树均衡(CTS)减少时钟偏移影响
建立时间约束:

set_false_path -from [get_clocks clk1] -to [get_clocks clk2]  # 忽略跨时钟域伪路径set_max_delay -setup 4ns -from [get_pins Reg1/Q] -to [get_pins Reg2/D]  # 最大路径延时保持时间约束:

set_min_delay -hold 1ns -from [get_pins Reg1/Q] -to [get_pins Reg2/D]  # 最小路径延时set_clock_groups -asynchronous -group [get_clocks clk1] -group [get_clocks clk2]  # 异步时钟分组
注释:本文有学习FPGA时序约束与分析相关知识


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请举报投诉

本站所有资料仅限参考学习交流,PCB原理图源码等所有资料不保证准确没问题,请不要用作生产。否则后果自负。

闽公网安备35062302000276号 | 闽ICP备2024076463号-1 | 论坛技术支持QQ群171867948 | 论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表