当前位置: 首页 > 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设计的可靠性和性能。

http://www.lryc.cn/news/576612.html

相关文章:

  • 鸿蒙 Grid 与 GridItem 深度解析:二维网格布局解决方案
  • 【 Linux 输入子系统】
  • python的医疗废弃物收运管理系统
  • 【力扣 中等 C】79. 单词搜索
  • Webpack 核心与基础使用
  • 数据结构之——顺序栈与链式栈
  • 个人日记本小程序开发方案(使用IntelliJ IDEA)
  • ORB-SLAM + D435i提取相机位姿 + ROS发布
  • 现代串口通讯UI框架性能对比
  • 容器安全——AI教你学Docker
  • 机器学习——线性回归
  • 【数据标注师】3D标注
  • 使用Calibre对GDS进行数据遍历
  • Note2.4 机器学习:Batch Normalization Introduction
  • 【go】初学者入门环境配置,GOPATH,GOROOT,GOCACHE,以及GoLand使用配置注意
  • LNA设计
  • 【安卓Sensor框架-1】SensorService 的启动流程
  • iOS 使用 SceneKit 实现全景图
  • MCPA2APPT:基于 A2A+MCP+ADK 的多智能体流式并发高质量 PPT 智能生成系统
  • 微处理原理与应用篇---STM32寄存器控制GPIO
  • Unity2D 街机风太空射击游戏 学习记录 #16 道具父类提取 旋涡道具
  • FPGA内部资源介绍
  • Python爬虫实战:研究sanitize库相关技术
  • 笔记07:网表的输出与导入
  • SQL关键字三分钟入门:RANK() —— 窗口函数
  • Java AI 新纪元:Spring AI 与 Spring AI Alibaba 的崛起
  • JavaScript正则表达式之正向先行断言(Positive Lookahead)深度解析
  • 第8章-财务数据
  • 某音Web端消息体ProtoBuf结构解析
  • TCP 在高速网络下的大数据量传输优化:拥塞控制、效率保障与协议演进​