当前位置: 首页 > news >正文

FPGA时序分析(三)--基础知识

  前言

        通过前两篇文章,相信大家对于时序有了一个大概的认识,这篇文章讲解如何分析时序路径,理解一些概念。因为后续看时序报告时,FPGA工具也时用这些概念来告诉我们时序的情况,所以这也是我们看懂时序报告,从而优化时序的基础。这篇文章将通过一个典型的时序分析模型来帮大家理解相关的概念。

时序分析模型

​        这里我们选用两个寄存器之间的数据传输路径作为分析模型。这个“寄存器到寄存器”的路径是时序分析中最本质、最核心的构建块 (fundamental building block)。​​ 无论数据是从外部传输到FPGA输入端口(输入路径),还是FPGA驱动信号到外部负载(输出路径),甚至是内部复杂的组合逻辑链,​​本质上都可以被建模或抽象成一个“发起寄存器(Source Register) → 组合逻辑+布线 → 捕获寄存器(Capture Register)”的基本结构。​​ 深刻理解并掌握对这个基础模型的时序约束与分析(包括建立时间和保持时间的要求),​​是为理解FPGA设计中所有其他类型时序路径奠定坚实基础的关键。​​ 后续其他路径的分析规则,往往是这个基础模型在特定场景下的延伸或边界条件处理。下面的分析,就是分析捕获寄存器能不能正确的捕获到数据。FPGA工具也是这样来分析某一条路径的。

时钟路径和数据路径

        数据路径是指:从数据发起点,到数据到达点的路径,在这里的话就是从reg1的起点到达reg2的起点。
时钟路径是指:时钟到达两个寄存器时钟引脚的路径。
分析的建立时间和保持时间,其实也就是看信号在这两个路径所花的时间。数据到达reg2的时间称为:数据到达时间 (Data Arrival Time)。时钟到达reg2的时间称为数据需求时间 (Data Required Time)
假设reg2的建立时间和保持时间为Tsu和Th。那么可以得到下面的关系:
Setup Time Slack= Data Required Time- Data Arrival Time-Tsu
Hold Time Slack =  Data Arrival Time-Data Required Time -Th
建立时间余量要想为正,意味着数据到达时间要比数据需求时间早,还得早出一个Tsu。
保持时间余量要想为正,意味着数据到达时间要比数据需求时间晚,还得超出一个Th。
那岂不是建立时间和保持时间根本不可能同时满足吗?
这里就涉及到一个新的概念:启动时钟和锁存时钟。

启动时钟和锁存时钟


启动时钟和启动沿,锁存时钟和锁存沿。对于建立时间来说,启动时钟比锁存时钟早一个周期,对于保持时间来说,启动时钟和锁存时钟是同一个周期。
回到时序分析的基本模型,即数据从寄存器1传输到寄存器2的过程。我们关注的是寄存器2捕获数据的时刻。一个数据通常在第一个时钟周期被寄存器1捕获,并在下一个时钟周期到达寄存器2。也就是说,该数据实际上是在第二个时钟周期被寄存器2捕获的——这正是建立时间分析要滞后一个时钟周期的原因。
而对于保持时间的分析,我们关心的是在第二个时钟周期,从前一级传来的新数据不应过早到达,以免覆盖当前正在被捕获的数据。由于捕获发生在第二个时钟周期,而可能造成干扰的新数据也产生于同一时钟周期,因此保持时间分析针对的是同一个时钟周期。这一步挺重要的,希望我有讲清楚,大家还有疑惑的话欢迎在评论区进行讨论。

建立时间保持时间余量分析


图中,Tc2i是时钟源到源寄存器regl 所经过的时钟网络延时。
Tc2j表示时钟源到目的寄存器reg2 所经过的时钟网络延时。
Td表示表示 数据从上一级 寄存器 (源寄存器) 的输 入端被锁存后 ,到下一级 寄存器 (目的 寄 存器) 的输入端所经过的时延。这里还包括了在寄存器内部的延时,在线上的延时。    

建立时间余量分析

 Data Arrival Time       = Launch Edge+ Tc2i(max)+ Td
Data Required Time  = Latch Edge+Tc2j(min) -Tsu - Clock Uncertainty Time 

Setup Time Slack =Data Required Time - Data Arrival Time
=[Latch Edge+ Tc2j- Tsu-Clock Uncertainty Time ]-[Launch Edge+Td + Tc2j]
= Tc2j(min) -Tc2i(max) + Latch Edge-Launch Edge-Td-Clock Uncertainty Time-Tsu 

        从物理意义上讲:它是看数据需求时间比数据到达时间晚多少。那么时钟端,也就是数据需求端的延时就会增加建立时间余量,而数据端的延时会减少数据余量。所以最坏的情况就是时钟端延时的少,而数据端延时的多,这也是公式中Tc2j取min 和Tc2i取max的原因。

保持时间余量分析

 Data Arrival Time       = Launch Edge+ Tc2i(min)+ Td
Data Required Time  = Latch Edge+Tc2j(max) +Th+ Clock Uncertainty Time 

Hold Time Slack =  Data Arrival Time -Data Required Time
=[Launch Edge+ Tc2i(min)+ Td ]-[Latch Edge+Tc2j(max) +Th+ Clock Uncertainty Time ]
= Tc2i(min) -Tc2j(max) +Launch Edge - Latch Edge+Td-Clock Uncertainty Time -Th
保持时间余量和建立时间余量要求正好相反,它希望的是数据到达时间比数据需求时间晚到。这也意味着,保持时间余量和建立时间余量是互斥的,一方增加另一方必然减小。

写在最后

        这篇文章引入了比较多的概念,如果直接看可能会有点抽象,但有了前面两篇文章建立的认识应该会容易理解一些。之后我们就开始讲具体的时序约束了。

http://www.xdnf.cn/news/1428877.html

相关文章:

  • Leetcode_206.反转链表(递归)
  • 【嵌入式电机控制#进阶7】V/F强拖启动
  • 变频器实习DAY41 单元测试介绍
  • 前端实现解析【导入】数据后调用批量处理接口
  • Redis有哪些部署方案?了解哨兵机制吗?
  • AI文档产品与传统OCR软件的根本区别是什么?
  • 手写Muduo网络库核心代码2--Poller、EPollPoller详细讲解
  • 百度智能云,除了AI还有啥?
  • 线程特定存储
  • Go语言开发合并文件小工具
  • go命令行工具:如何在现有的工程里加入使用cobra
  • 苹果手机文本转音频,自行制作背诵素材
  • Redis 持久化机制详解
  • 《WINDOWS 环境下32位汇编语言程序设计》第10章 内存管理和文件操作(2)
  • 文华财经wh6波段多空指标-变色K做多做空信号,抄底逃顶主图幅图
  • Docker启动两个Redis镜像并配置一主一从
  • Linux内核O(1)调度算法
  • 汽车制造工厂如何应用力控SCADA实现全方位智能监控与诊断
  • 从“成本中心”到“生产力引擎”:MCP如何将AI从“建议者”变为“执行者”
  • 2025年新版C语言 模电数电及51单片机Proteus嵌入式开发入门实战系统学习,一整套全齐了再也不用东拼西凑
  • 久等啦!Tigshop O2O多门店JAVA/PHP版本即将上线!
  • 通义万相Wan2.2-S2V-14B:AI视频生成的革命性突破与实践指南
  • c++ 类和对象(上)
  • 与后端对话:在React中优雅地请求API数据 (Fetch/Axios)
  • token存储方案
  • iOS XML 处理利器:CNXMLParser 与 CNXMLDocument 深度解析
  • 从零开始的python学习——函数(2)
  • 漫画短剧小程序系统开发:从0到1的核心架构与思路
  • 今天我们开始学习shell编程语言
  • @ZooKeeper 详细介绍部署与使用详细指南