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

FPGA设计的时序分析概要

FPGA设计的时序分析

文章目录

  • FPGA设计的时序分析
    • 时序分析的概念和必要性
    • 时序分析的分类
      • 映射后时序分析
    • 时序约束与时序分析的关系
      • 特殊情况
    • 小总结

时序分析的概念和必要性

时序分析,也叫静态时序分析(Static Timing Analysis,简称STA),它通过完整的分析方式判断IC是否能在使用者的时序环境下正常工作,为确保IC品质提供了一个很好的解决方案。也许有人会问,我的FPGA设计已经通过了功能仿真,为什么实际测试的时候感觉结果总是相差甚远呢?其实,出现这种情况,十有八九是因为你的FPGA不满足其目前运行环境中的时序要求,例如时钟频率、传输延迟等。

传输速度、器件充放电时间、连线时间 都是影响时序的关键因素。

时序分析的分类

在FPGA的基本开发流程中,共有两处可以进行时序分析的地方。第一处是在对FPGA芯片完成映射后,称为映射后时序分析;第二处是在对FPGA芯片完成布局布线后,称为布局布线后时序分析。因此时序分析也可以依据此分为两类,不过通常来说,我们只做布局布线后的时序分析,因为它最贴近于FPGA芯片真实的情况。

映射后时序分析

映射后时序分析是FPGA基本开发流程中的一个可选环节。由于它只能利用映射后的电路信息,所以在进行分析时无法考虑到FPGA内部的连线延迟,因此其分析结果的意义不是很大。但相对于布局布线后时序分析,它也有自己的优势:

  • 速度优势:由于只考虑到门延迟,映射后时序分析的速度明显比布局布线后时序分析快,尤其是在设计比较复杂的时候,这种优势更加明显。
  • 40/60分析原则:如果门延迟(或者叫逻辑延迟)占电路所允许最大延迟的百分比小于40%,即门延迟与时间余量的比值小于40/60,那么布局布线后仍能满足时序要求的可能性就会很大。通过映射后时序分析将数字电路的门延迟调整到符合40/60原则后,再进行布局布线,会更容易满足指定的时序约束。不过,40/60原则的约束有些过于严格,我们在进行映射后时序分析时也不可生搬硬套。

时序约束与时序分析的关系

时序约束与时序分析是两个容易混淆的概念,但从本质上来说,它们是完全不同的。

  • 时序约束:是我们写给编译器的参考,编译器会根据时序约束信息完成布局布线。
  • 时序分析:是针对布局布线后的FPGA设计进行分析,看能否实现我们的时序要求。

通常情况下,我们写给编译器的时序约束内容等价于我们对布局布线后FPGA设计的时序要求,所以在进行时序分析时,编译器会自动根据时序约束信息生成一份时序要求并传递给静态时序分析工具。但有些情况下,我们需要自己编写时序要求文件,且时序要求文件不一定等同于时序约束文件。

特殊情况

  • 使用专业静态时序分析工具:从编译器中得到FPGA设计的网表和延迟信息后,需要根据需求编写详细的时序需求,并编写如何打印时序报告的内容。
  • 时序约束的灵活性:时序约束是布局布线的指导,但没有时序约束时布局布线也不一定出错。对于复杂的FPGA设计,如果时序约束文件中漏掉一个小项,不一定意味着设计有问题。如果修改时序约束文件,可能会消耗大量时间并引发更多时序问题。因此,先对漏掉的环节进行时序分析,如果满足时序要求,则无需修改设计,直接进行上板调试即可。
  • 时序约束与实际时序分析的差异:为了保险起见,时序约束通常会设计得“紧”一些。例如,系统时钟为100 MHz时,时序约束可能会告诉编译器这是一个110 MHz的时钟,以获得更好的布局布线性能。但在时序分析时,应根据实际的系统时钟(如100 MHz)进行分析,以计算出理论上的最大时钟频率和时序余量。通常,时序分析时保证设计具有10%左右的余量即可。

小总结

时序分析是FPGA设计中不可或缺的环节,它能够确保设计在实际运行环境中满足时序要求。虽然映射后时序分析和布局布线后时序分析各有优缺点,但布局布线后时序分析更贴近实际。同时,时序约束和时序分析虽然密切相关,但它们是两个不同的概念,需要根据具体情况进行灵活处理。合理设计时序约束并进行准确的时序分析,能够有效提高FPGA设计的可靠性和性能。

相关文章:

  • autoas/as 工程的RTE静态消息总线实现与端口数据交换机制详解
  • Flutter基础(控制器)
  • eTools 开源发布
  • 如何用VS Code、Sublime Text开发51单片机
  • Mysql架构
  • 顺序表的常见算法
  • 【编程实践】利用python在Blender生成三维模型
  • Stable Diffusion入门-ControlNet 深入理解 第四课:风格迁移与重绘控制模型——让AI也有“艺术天赋”!
  • FPGA设计的上板调试
  • 微信小程序实现简版点赞动画
  • 【linux】文件与目录命令 - iconv
  • Kafka 消费者重平衡问题排查与优化实践
  • 下载最新版本的OpenOCD
  • (LeetCode 每日一题) 2099. 找到和最大的长度为 K 的子序列 (排序)
  • 【C++】transform, reduce, scan是什么意思?理解常用并行算法及其实现原理
  • [Andrej Karpathy_2] vibe coding | 大型语言模型的1960年代 | 自主性滑块
  • 【云桌面容器KasmVNC】如何关闭SSL使用HTTP
  • [Linux]从零开始的STM32MP157移植Ubuntu根文件系统教程
  • Linux软连接和硬连接
  • git 挑选:git cherry-pick