【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. 建立时间 \TsuSetup Time定义时钟有效沿到来之前输入 D 信号必须稳定不变的最小时间。本质触发器内部采样通路需要足够时间完成电平采样、内部节点充放电若 D 变化距离时钟沿不足Tsu内部锁存器无法正确捕获电平出现亚稳态。器件特性FPGA 芯片手册给定固定最小值如 Xilinx 7 系列DFF(触发器)的Tsu在0.2ns~0.5ns 之间。2. 保持时间 \ThHold Time定义时钟有效沿到来之后输入 D 信号必须继续保持稳定不变的最小时间。本质时钟沿到来后内部传输门切换需要时间此时 D 若立刻跳变会冲掉刚采样的数据。关键特点与时钟周期无关仅由器件内部电路决定高速设计更容易出现保持违例。3. 输出延迟 \TcoClock-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之间的时序关系在T0Tco时刻FF1的输出Q1由原来的状态b1稳定变化到b2状态。对于FF2的d2来讲必须在T1时刻前Tsu即T1-Tsud2就保持稳定。由于T1-T0Tclk因此要使FFT2的d2满足Tsu则需TclkTcoTsu。如果两个FF之间有组合逻辑且组合逻辑运算时间为Tdata则FF2满足Tsu的条件为TclkTcoTsuTdata。这与是FPGA时序电路中时钟周期的计算公式TclkTcoTsuTdata。Tco是由FPGA器件制造工艺确定的无法更改Tdata是组合逻辑运算时间由程序设计的电路确定为便于分析Tdata除组合逻辑运算时间外还包括FF1到FF2之间的布线传输时间。每个FPGA器件的最小Tsu是由FPGA器件制造工艺确定的工程师设计FPGA程序时只有当程序列生成的电路中TsuTclk-Tco-Tdata程序才能够正确定的工作否则就会出现Tsu不满足要求而产生数据采取错误无法正确工作。因此时钟约束create_clock就是指约束所有由clk控制的任意两个经组合逻辑连接或直接连接的FF之间的时间满足TclkTcoTsuTdata的要求。FPGA布线工具会根据电路结构及时序要求自动调整两个FF之间的布局布线。对于FPGA工程师来讲除了添加时钟约束create_clock之外最为核心最为重要的显然是准确控制两个相邻FF之间的组合逻辑运算延时。因为布局布线减小的延时相比于合理设计FF之间组合逻辑减小的延时要困难得多。如果FPGA工程师能够准确把握所设计的程序中任意两个相邻FF之间组合逻辑的运算延时只需把握逻辑运算级联数量则对程序所能达到的运行频率就充满信心了。从上面的分析可知时钟约束create_clock只会影响Tsu即触发器的建立时间并不会改变保持时间Th。三、两个FF直接级联会出现什么状态对于图1来讲如果没有Tdata时延时也就是FF1的输出直接与FF2的输入连接则根据TclkTcoTsuTdata的公式此时电路的时钟频率可以更快速度更高TclkTcoTsu。现在需要考察一下如何满足D触发器的保持时间Th。考察图1中T0时刻FF2的输入信号d2。当上升沿T0来到后d2需要在Th内仍然保持b1稳定不变在Tco之后Q2才能稳定输出b1当上升沿T1来到后d2需要在Th内仍然保持b2稳定不变在Tco之后Q2才能稳定输出b2。如果FF1与FF2之间没有组合逻辑延时Tdata则只有当TcoTh时D触发器才能满足保持时间要求如果存在组合逻辑则需当TcoTdataTh时D触发器满足保持时间要求。由于Tco是固定的因此组合逻辑时间Tdata越长越容易满足保持时间Th要求Th与时钟周期Tclk无关。由于TclkTcoTsuTdata因此Tdata越长系统运行速度越慢。组合逻辑Tdata降低了系统运行速度增加了Tclk增加了对Tsu的要求但降低了对Th的要求。如果没有组合逻辑Tdata如果TcoTh则两个FFT直接级联就不满足Th要求电路无法正确运行如果我们查阅一下芯片手册比如XC7A100T芯片的手册如下表所示。可以看到TcoTh。所以在FPGA程序设计时两个FF直接级联完全满足Th的时序要求。对于XC7A100T-2来讲系统理论上的最高频率fclk1/Tclk1/(TcoTsu)1/(0.380.20)ns1724MHz。当然这只是理论值没有考虑布线延时以及程序中不可或缺的组合逻辑运算延时。当程序中出现两个FF触发器级联时常规状态都会有Th的理论余量为Tco-Th0.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。

相关新闻

STDF-Viewer:半导体测试数据可视化的3大核心优势与5步实战指南

STDF-Viewer:半导体测试数据可视化的3大核心优势与5步实战指南

STDF-Viewer:半导体测试数据可视化的3大核心优势与5步实战指南 【免费下载链接】STDF-Viewer A free GUI tool to visualize STDF (semiconductor Standard Test Data Format) data files. 项目地址: https://gitcode.com/gh_mirrors/st/STDF-Viewer STDF-Vi…

2026/6/26 20:23:19阅读更多 →
3步解决腾讯游戏卡顿:ACE-Guard资源限制器终极指南

3步解决腾讯游戏卡顿:ACE-Guard资源限制器终极指南

3步解决腾讯游戏卡顿:ACE-Guard资源限制器终极指南 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源,支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 你是否在玩《英雄联盟》、《穿越火线》或《…

2026/6/26 20:23:19阅读更多 →
【异常】vLLM 分布式集群加载 HuggingFace 模型超时‘timed out‘ thrown while requesting HEAD https://huggingface.co/Qwe

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

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

2026/6/26 20:18:19阅读更多 →
甜菊糖苷 Reb M 全酶法工艺再进阶:从代糖到抗衰老,合成生物学的又一场胜利

甜菊糖苷 Reb M 全酶法工艺再进阶:从代糖到抗衰老,合成生物学的又一场胜利

减糖,已经不是趋势了,是标配。无糖饮料、低糖乳品、零卡甜品……消费者用脚投票,倒逼整个食品行业完成了一轮配方大洗牌。而在这场洗牌中,甜菊糖苷(Reb M、Reb D)凭借天然来源、零热量、口感逼近蔗糖三张王…

2026/6/26 21:38:34阅读更多 →
微分不是微小差值近似,是剥离宏观螺旋、单独提取无穷小微观生长单元的原生尺度-《全域数学vs传统数学:人类文明进阶200讲》第52讲 高中通俗版逐字稿

微分不是微小差值近似,是剥离宏观螺旋、单独提取无穷小微观生长单元的原生尺度-《全域数学vs传统数学:人类文明进阶200讲》第52讲 高中通俗版逐字稿

作者: 乖乖数学 《全域数学vs传统数学:人类文明进阶200讲》第52讲 高中通俗版逐字稿 讲次: 第52讲 主题: 微分不是微小差值近似,是剥离宏观螺旋、单独提取无穷小微观生长单元的原生尺度 对标课本知识点: 微…

2026/6/26 21:38:34阅读更多 →
Cesium 计算新坐标教程

Cesium 计算新坐标教程

计算新坐标 computerNewPoint ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 Cesium Viewer…

2026/6/26 21:38:34阅读更多 →
市面上专业的CD3E膜蛋白供应商口碑

市面上专业的CD3E膜蛋白供应商口碑

在免疫学研究和生物制药领域,CD3E膜蛋白作为T细胞受体复合物的关键组分,其质量和供应稳定性直接影响实验结果的可靠性。面对市场上众多供应商,如何基于真实的行业口碑做出明智选择?本文将结合多个维度,为您剖析专业供应…

2026/6/26 21:38:34阅读更多 →
怎样高效使用res-downloader:视频资源下载实战操作全面解析

怎样高效使用res-downloader:视频资源下载实战操作全面解析

怎样高效使用res-downloader:视频资源下载实战操作全面解析 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader res-d…

2026/6/26 21:38:34阅读更多 →
微信小程序逆向工程终极指南:5步快速掌握wxapkg文件完整解包技术

微信小程序逆向工程终极指南:5步快速掌握wxapkg文件完整解包技术

微信小程序逆向工程终极指南:5步快速掌握wxapkg文件完整解包技术 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 微信小程序的.wxapkg文件总是…

2026/6/26 21:33:34阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
HPE (慧与) 服务器专用 ESXi 9 全套官方定制资源详解 + 完整部署升级教程

HPE (慧与) 服务器专用 ESXi 9 全套官方定制资源详解 + 完整部署升级教程

一、前言:企业运维痛点与资源价值自博通收购 VMware 之后,原 VMware 公开免费下载渠道全面关闭,企业运维人员想要获取适配 HPE 慧与服务器的 ESXi 9 原厂镜像,必须注册博通账号、绑定有效授权才能下载,无授权账号无法获…

2026/6/26 0:02:15阅读更多 →
Kotlin的@JvmStatic与@JvmField:与Java互操作的注解

Kotlin的@JvmStatic与@JvmField:与Java互操作的注解

Kotlin作为一门现代编程语言,与Java的互操作性一直是其核心优势之一。为了让Kotlin代码能够无缝对接Java,Kotlin提供了多种注解来优化互操作体验,其中JvmStatic和JvmField是两个关键注解。它们分别用于解决静态成员和字段在Java中的访问问题&…

2026/6/26 0:02:15阅读更多 →
深入解析musl libc中的mmap实现源码

深入解析musl libc中的mmap实现源码

最近在阅读musl libc源码时,发现其mmap的实现非常精妙,特分享给大家。 一、代码整体结构 这段代码实现了__mmap函数,并通过weak_alias导出为mmap。这是典型的musl libc风格——提供弱符号以便用户可以重写。 weak_alias(__mmap, mmap); 二…

2026/6/26 0:02:15阅读更多 →