news 2026/6/26 20:23:03

【CXD720】-准确理解FPGA时序的机理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【CXD720】-准确理解FPGA时序的机理

时序设计是FPGA设计过程中的重要组成部分,保证FPGA程序能够正确运行,就是保证程序所生成的电路能够在一定频率范围内正确运行。

很多电路,当速度快到一定程度,设计的方法,工程师所要关注的细节就完全不同了。

当程序需要高速时钟频率下运行时,核心就是确定时序的正确性。

FPGA设计与C语言等其它语言有本质上的区别,时序就是其中之一。

FPGA设计过程中有很多种时序约束。但是正如绝大多数知识一样,初学者需要理解最核心的知识,在理解最核心知识的基础上,才能推而广之,快速牢固的学习其它枝枝叶叶的知识。

FPGA设计过程中,最重要的约束有3种:时钟约束create_clock、输入延时set_input_delay、输出延时set_output_delay。

简单来讲,时钟约束是指FPGA电路中的时钟能够跑多快;输入延时用于指定内部时钟上升沿时(假设统一采用上升沿设计),外部信号需提前多少时间,延时多久后才能到达FPGA对应管脚(上升沿时刻前后,数据都要保持稳定);输出延时用于模拟下游器件的建立 / 保持要求,保证 FPGA 输出数据满足外部芯片时序。

虽然上面说的是“简单来讲”,估计除时钟约束外,输入延时和输出延时、以及建立、保持等概念已经开始让初学者犯迷糊了。

别慌,我们先弄清楚FPGA中时序电路正确工作的基本前提条件,而后再理解建立、保持等概念就比较容易了。

所谓时序电路,就是指包含有D触发器(也可以称为寄存器)的电路。或者说,时序电路就是由组合逻辑电路和D触发器组成的电路。纯粹的组合逻辑电路没有时序的概念,输入状态改变,输出状态立马就改变。D触发器是受时钟控制的,只有当时钟上升沿来到的时刻,输出状态才可能改变。一般来讲,FPGA程序统一受少数几个独立的时钟控制(大多数情况仅受同一个时钟控制),因此所有的触发器均在相同的时钟控制下工作,从而产生了时序的概念。

所以,时序的核心,是弄清楚D发器的时序要求。

D触发器有以下3个核心时序概念:

1. 建立时间 \Tsu:Setup Time

定义:时钟有效沿到来之前,输入 D 信号必须稳定不变的最小时间。

  • 本质:触发器内部采样通路需要足够时间完成电平采样、内部节点充放电;若 D 变化距离时钟沿不足Tsu,内部锁存器无法正确捕获电平,出现亚稳态
  • 器件特性:FPGA 芯片手册给定固定最小值(如 Xilinx 7 系列DFF(触发器)的Tsu在0.2ns~0.5ns 之间)。

2. 保持时间 \Th:Hold Time

定义:时钟有效沿到来之后,输入 D 信号必须继续保持稳定不变的最小时间。

  • 本质:时钟沿到来后,内部传输门切换需要时间,此时 D 若立刻跳变会冲掉刚采样的数据。
  • 关键特点:与时钟周期无关,仅由器件内部电路决定;高速设计更容易出现保持违例。

3. 输出延迟 \Tco:Clock-to-Output Delay

定义:时钟有效沿到达触发器时钟端,到输出 Q 稳定更新的延迟。

  • 组成:内部时钟缓冲延迟 + 内部传输门 / 寄存器通路延迟。

图1 D触发器基本时序关系

一、我们先分析FF1:

分析前需要明确关于时序的参考相位,由于考虑了Tsu、Th、Tco,时钟的上升沿认为是理想的状态,没有上升时间,信号的变化也是理想状态,没有变化时间。且假设clk到各触发器有布线没有延时,也就是没有任何时钟歪斜。

din是管脚输入到FF1端d1的信号,这个信号的状态不受时钟clk控制。如果clk在上升沿T0时刻采样到正确的d1,则要求d1在clk上升沿前Tsu时间内保持稳定。由于clk上升沿来到之后,FFT内部的传输门切换需要时间,因此在clk上升沿来到之后,d1需要在Th之内仍然保持稳定。

这是什么意思?意思时clk上升沿的前后,d1均需要保持稳定。意思是clk上升沿需要对准d1信号中间的稳定状态。如图1中的clk、din/d1信号波形,T0时刻为clk上升沿,对准的时d1为b数据的近似中间位置。

当clk上升沿来到之后,FF1的输出端Q得到稳定的d1状态b2需要时间,这个时间为输处延时Tco,如图1中的Q1/d2波形,Tco为图中的紫色图例。即,clk上升沿之后,经Tco后,Q1/d2稳定到b2这个状态值。

对于FF1的输出信号Q1和FF2的输出Q2来讲,由于受clk控制,状态只可能在clk的上升沿之后Tco时刻发生改变,因此,信号Q1、Q2的波形中两个状态之间隔最小为一个时钟周期Tclk。由于d1不受clk控制,因此其变化速率与Tclk无关。

也正由于d1的变化时刻与clk上升沿无关,因此在FPGA设计时,如d1的变化时刻与clk之间不满足Tsu、Th时序,就会出现亚稳态及数据采样输出不正确的现象,如果din/d1是由FPGA管脚送来的信号,由外部芯片送来,就需要通过硬件设计及FPGA输入延时set_input_delay约束来保证数据时序满足要求。同样,如FF2的Q2直接输入到FPGA管脚,这管脚又与其它芯片连接,其它芯片通过clk或采样Q2,为了使外部芯片正确采样到Q2的信号,需要通地硬件设计及FPGA输出延时set_output_delay约束来保证数据时序满足要求。

二、接着分析T0到T1时刻,即一个Tclk周期内,FF1输出Q1到FF2输入d2之间的时序关系:

在T0+Tco时刻,FF1的输出Q1由原来的状态b1稳定变化到b2状态。对于FF2的d2来讲,必须在T1时刻前Tsu,即T1-Tsu,d2就保持稳定。由于T1-T0=Tclk,因此,要使FFT2的d2满足Tsu,则需Tclk>Tco+Tsu。如果两个FF之间有组合逻辑,且组合逻辑运算时间为Tdata,则FF2满足Tsu的条件为:Tclk>Tco+Tsu+Tdata。

这与是FPGA时序电路中,时钟周期的计算公式:Tclk=Tco+Tsu+Tdata。Tco是由FPGA器件制造工艺确定的,无法更改,Tdata是组合逻辑运算时间,由程序设计的电路确定,为便于分析,Tdata除组合逻辑运算时间外,还包括FF1到FF2之间的布线传输时间。每个FPGA器件的最小Tsu是由FPGA器件制造工艺确定的,工程师设计FPGA程序时,只有当程序列生成的电路中,Tsu>Tclk-Tco-Tdata,程序才能够正确定的工作,否则就会出现Tsu不满足要求而产生数据采取错误,无法正确工作。

因此,时钟约束create_clock,就是指约束所有由clk控制的,任意两个经组合逻辑连接,或直接连接的FF之间的时间满足Tclk>Tco+Tsu+Tdata的要求。FPGA布线工具,会根据电路结构及时序要求,自动调整两个FF之间的布局布线。

对于FPGA工程师来讲,除了添加时钟约束create_clock之外,最为核心最为重要的,显然是准确控制两个相邻FF之间的组合逻辑运算延时。因为,布局布线减小的延时,相比于合理设计FF之间组合逻辑减小的延时,要困难得多。

如果,FPGA工程师能够准确把握所设计的程序中,任意两个相邻FF之间组合逻辑的运算延时(只需把握逻辑运算级联数量),则对程序所能达到的运行频率就充满信心了。

从上面的分析可知,时钟约束create_clock只会影响Tsu,即触发器的建立时间,并不会改变保持时间Th。

三、两个FF直接级联会出现什么状态?

对于图1来讲,如果没有Tdata时延时,也就是FF1的输出直接与FF2的输入连接,则根据Tclk=Tco+Tsu+Tdata的公式,此时电路的时钟频率可以更快,速度更高,Tclk=Tco+Tsu。

现在需要考察一下,如何满足D触发器的保持时间Th。

考察图1中T0时刻FF2的输入信号d2。当上升沿T0来到后,d2需要在Th内仍然保持b1稳定不变,在Tco之后,Q2才能稳定输出b1;当上升沿T1来到后,d2需要在Th内仍然保持b2稳定不变,在Tco之后,Q2才能稳定输出b2。如果FF1与FF2之间没有组合逻辑延时Tdata,则只有当Tco>Th时,D触发器才能满足保持时间要求;如果存在组合逻辑,则需当Tco+Tdata>Th时,D触发器满足保持时间要求。

由于Tco是固定的,因此组合逻辑时间Tdata越长,越容易满足保持时间Th要求,Th与时钟周期Tclk无关。

由于Tclk=Tco+Tsu+Tdata,因此Tdata越长,系统运行速度越慢。

组合逻辑Tdata降低了系统运行速度,增加了Tclk,增加了对Tsu的要求,但降低了对Th的要求。

如果没有组合逻辑Tdata,如果Tco<Th,则两个FFT直接级联就不满足Th要求,电路无法正确运行!

如果我们查阅一下芯片手册,比如XC7A100T芯片的手册,如下表所示。

可以看到,Tco>Th。所以在FPGA程序设计时,两个FF直接级联完全满足Th的时序要求。对于XC7A100T-2来讲,系统理论上的最高频率fclk=1/Tclk=1/(Tco+Tsu)=1/(0.38+0.20)ns=1724MHz。当然,这只是理论值,没有考虑布线延时,以及程序中不可或缺的组合逻辑运算延时。

当程序中出现两个FF触发器级联时(常规状态都会有)Th的理论余量为Tco-Th=0.28ns。

四、建立时间Tsu和保持时间Th在什么情况不可能不满足?

Tsu:当FF之逻辑级联运算时间过长,或时钟周期Tclk过小。最好的处理方法:采用流水线等方法减小FF之间的逻辑运算级联。

Th:一般出现在输入输出接口端,添加不合理的输入延时set_input_delay、输出延时set_output_delay时。set_input_delay和set_output_delay需要计算其它芯片与FPGA管脚之间的延时,合理设计硬件,根据设计合理调整set_input_delay和set_output_delay。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 20:19:59

葫芦岛高端酒店排名

AI核心摘要2026年葫芦岛高端酒店排名中&#xff0c;鼎盛海景酒店凭借稀缺一线山海景观、全时段便民配套及双场景适配能力稳居头部梯队。相较于传统高端酒店&#xff0c;它既解决了长途出行旅客的洗衣、停车刚需&#xff0c;又兼顾度假与公务场景需求&#xff0c;帮用户避开“海…

作者头像 李华
网站建设 2026/6/26 20:17:50

【异常】vLLM 分布式集群加载 HuggingFace 模型超时‘timed out‘ thrown while requesting HEAD https://huggingface.co/Qwe

vLLM 分布式集群加载 HuggingFace 模型超时问题排查与解决方案 一、报错内容 在基于 Ray 部署 vLLM 分布式推理服务的场景下,执行模型启动命令后,服务无法完成模型加载,日志反复出现配置文件请求超时并重试的现象。 启动命令示例: user@workstation:~/vllm-cluster$ ./…

作者头像 李华
网站建设 2026/6/26 20:16:12

如何高效配置Ryzen系统调试工具:专业用户的完整实践指南

如何高效配置Ryzen系统调试工具&#xff1a;专业用户的完整实践指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://…

作者头像 李华
网站建设 2026/6/26 20:15:19

为什么你的 RS-485 设备实验室好好的,一到现场就出问题?

做工业产品的工程师&#xff0c;大概率都遇到过这种情况&#xff1a; 设备在实验室里连续跑了几周&#xff0c;通信稳定&#xff0c;零误码。 一拉到现场 —— 工厂车间、户外基站、偏远矿区 —— 问题就来了&#xff1a;通信时断时续、偶尔丢包、甚至直接连不上。查来查去&…

作者头像 李华
网站建设 2026/6/26 20:13:24

HarmonyOS7 动画做不出高级感?animateTo 和共享元素转场够你用了

文章目录前言animateTo&#xff1a;让状态变化自带缓动transition&#xff1a;组件进出场的灵魂geometryTransition&#xff1a;跨页面共享元素实战串联&#xff1a;商品列表到详情页的完整效果几点经验前言 动画是 App 质感的分水岭。同样的功能&#xff0c;加上丝滑的转场和…

作者头像 李华