“打鼹鼠”是一个古老(电子时代之前)的休闲游戏。在桌面上有许多洞,每个洞里都藏着鼹鼠。当有鼹鼠从洞里钻出来时,你就用锤子打它,让鼹鼠退回洞里,你因此而得分。当鼹鼠返回洞里时,又有一只鼹鼠会随机地从另外一个洞里钻出来,你需要近乎疯狂地击打鼹鼠头部直到得了高分,这样心情也很舒畅。需要说明的是,游戏中并不是真的鼹鼠。世界有些地方把这种游戏叫“打老鼠”,我也不明白为什么啮齿动物在外面总是人人喊打。要实现复杂FPGA芯片设计的时序收敛,就非常类似于这一古老的游戏,但趣味自然少了许多。

为什么FPGA设计类似“打鼹鼠”?

在FPGA设计中(除验证外),最主要的时间陷阱(Time Sink)是时序收敛。时序收敛常常是一个不断反复的过程,以确保设计中的每个路径都满足时序要求。在相对较小、速度较慢的设计中,时序收敛比较容易,而且是自动收敛的,因此对FPGA器件或实现工具的要求不高。然而,实际中的大多数设计并非如此轻松,它们要求对每个关键路径进行调整,以满足时序要求,而期间又会不断有新的关键路径被发现或出现。

图1是迭代的时序收敛示意图。在第一阶段,只有路径C的时间裕量是负数。为改善路径C,对设计进行修改。随着对路径C实现约束,路经B和E又成为关键路径(见第二阶段),然后又对路径B和E进行改善。以此类推,直到所有路径都满足时序要求。

图1:迭代的时序收敛示意图。

很显然,这种过程非常类似于打鼹鼠游戏;只不过并不像游戏那样轻松,而是让我们紧张。

全新的FPGA产品系列真能解决这一问题吗?

实际上,FPGA厂商已开发出优异的新一代FPGA以满足用户对更高性能和更高容量的需求。然而,FPGA用户更善于发掘推动FPGA突破容量限制的新方法,从而将FPGA引入更多新的应用领域。

FPGA已不再是一系列均匀分布的查找表(LUT)和由各种不同长度和速度的布线资源连接起来的触发器。目前,业界领先的FPGA设计包含多个时钟域,并使用嵌入式累积乘法(MAC)功能块,包括嵌入式处理器和各种存储器资源。FPGA的应用也随着器件内各种特定资源的增多而得以扩展,并准备着在FPGA内部实现这些特定的功能块。这是个好现象,但从某种程度上说,这种嵌入式资源的分布将导致时序收敛的问题更加突出。正如下文的RAM示例所指出的,嵌入式功能本身就是导致布线差异的根源。

这里假设设计需要做一些修改,以根据最新功能要求增加RAM的容量。在FPGA器件中可能有丰富的RAM资源,但需要使用不同的RAM资源,比如使用一个大的块RAM,而不是一组分布式RAM。综合工具能够轻松映射到所需的RAM,但新的块RAM可能只存在于FPGA器件上的特定列中,因此这时的设计布局将不同于原始布局。关键路径的连线从含有新RAM的列开始或向其延伸,或者重新布局以使关键路径靠近新的RAM,但其它收敛或发散的路径却会延长。使用传统的综合工具很难避免这种问题。因此需要密切注意这些时序收敛问题。

为什么布线预测如此重要?

布线延迟本质上是不可预测的,因为FPGA内各个驱动与负载之间存在许多不同的布线路径。每个路径的延迟不同,在工具流程开始的时候,逻辑综合无法预测流程结束时布局布线算法将要选择哪条路径。最快的布线资源通常是最缺乏的,布线阻塞常导致非最优的布线延时。仅靠开发具有更多、更快布线资源的FPGA器件并非解决方法,因为此时FPGA的面积使用效率更低、成本更高、功耗也更大。

随着采用更先进的CMOS工艺的新一代FPGA的推出,布线延迟将不可避免地成为关键路径总延迟中最关键的部分,因此综合和布局布线流程中的时序可预测性也变得一代不如一代。最终,导致时序收敛的原因可以归结为综合预测的路径时序与布局/布线实际实现的时序之间的差异。解决方法是在整个流程中较早引入布局(并最好也同时引入布线)并融入综合过程。这种全新的综合/布局布线工具将大幅减少时序收敛所需的迭代数,这也正是FPGA物理综合实际能达到的效果。

如何在“打鼹鼠”游戏中获胜?

下面以带多个复杂模块的大型设计(图2)为例来讨论。很多情况下,一个时序问题的解决将改变RTL,并且一些改进时序的做法也会增加资源的使用。

图2:RTL变化如何使路径发生变化。

在图2中,模块A紧邻模块B和模块B,当为解决某个时序问题而修改模块A的RTL时,模块A会扩展到模块B和C使用的区域。这将迫使B和C中的器件发生移动,路径延长,从而产生新的关键路径。请注意,模块B或C中的逻辑没有变化,正常的逻辑综合流程不会由于模块A的尺寸变化而改变它对B或C中的互连延时的估计,因为模块A的RTL变化和B或C中新的关键路径之间的因果关系是物理上的。一般情况下,导致设计迭代具有不可预测性的本质原因是物理特性,因此真正的物理综合当仁不让成为首选解决方案。

在真正的物理综合中,当模块A的RTL发生改变并延长模块B和C中的走线时,新的更长连线可以被正确估算和考虑,这样在同样的物理综合过程中,围绕新的关键路径所进行的优化、布局和局部布线就可以自动解决这些问题。

本文小结

估计FPGA中的总路径延迟很困难,因此时序收敛已成为当前许多设计的时间陷阱。物理综合可以提供所需的布局可预测性,从而更好地控制和预测时序收敛。真正的物理综合有助于FPGA项目在较短时间内获得成功。

附:什么是“真正的物理综合?”

很多工具声称可实施物理综合,然而事实上这些工具只是使用先前的布局布线的时序信息重新优化综合结果。原始综合并未受到任何影响,因此来不及消除综合所做的主要结构性决策。更准确地讲,这种方法应称为“物理再优化”。

在真正的物理综合中,综合本身也完成布局,所以非常清楚最终FPGA的布线走向。因而时序预测也准确得多,避免了时序收敛问题。

转载于:https://www.cnblogs.com/fpga/archive/2009/12/21/1629375.html

如何实现复杂FPGA设计的时序收敛相关推荐

  1. FPGA经验分享——时序收敛之路

    首先感谢 coyoo 博主一直以来在 EDN 上分享他的经验,也感谢他这次慷慨拿出新作与我们分享. 非常希望能够拜读 coyoo 博主的大作,尤其希望对虚拟 JTAG 技术有一个深入的了解. 这里分享 ...

  2. FPGA开发之时序收敛10个小技巧

    1.好的代码风格 1)代码要跟器件结构相关 2)避免异步复位,异步复位同步化,全局复位局部化 3)层次的边界要加流水寄存 \quad例如:BRAM中有两级register,第一级在内部,第二级在外部s ...

  3. 关于 FPGA设计, 时序报告的重要性。

    经常看到文档上讲, 一定要把时序报告 跑过去,才可以出货.一直不以为然. 项目上用的 lattice 的 ecp3-35,esmt的ddr. 之前 用 了一年多,一直没有没有问题. 最近新贴的一批板子 ...

  4. FPGA设计-时序约束(上篇,理论篇)

    最近想要同步CSDN和微信公众号的内容,各位看客们可以两边都关注一下,方便获取最新的信息.请扫描下面的的二维码添加关注,谢谢支持. 最近都在做ARM的方面学习工作,感觉有必要记录下来之前FPGA的工作 ...

  5. 基于Xlinx的时序分析与约束(1)----什么是时序分析?什么是时序约束?什么又是时序收敛?

    文章目录 写在前面 磨刀不误砍柴工 什么是时序分析? 什么是时序约束? 什么是时序收敛? 写在前面 时序约束与分析是FGPA开发过程中一项必备的技能,同时也是设计开发中相对较难的部分.很多人一谈起FP ...

  6. 转载:基于Xlinx的时序分析、约束和收敛(1)— 什么是时序分析?什么是时序约束?什么又是时序收敛?

    本文转载自CSDN博主「孤独的单刀」的原创文章,原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/125731074 写在前面 时序约束与 ...

  7. FPGA之道(17)FPGA设计的时序分析

    文章目录 前言 FPGA设计的时序分析 一.时序分析的概念和必要性. 二.时序分析的分类 三.时序分析工具介绍. 四.时序约束与时序分析的关系. 五.时序分析的好处与隐患. 六.时序分析环节的输出. ...

  8. 如何在FPGA设计环境中加时序约束 SDC (Z)

    如何在FPGA设计环境中加时序约束     在给FPGA做逻辑综合和布局布线时,需要在工具中设定时序的约束.通常,在FPGA设计工具中都FPGA中包含有4种路径:从输入端口到寄存器,从寄存器到寄存器, ...

  9. sdram 时钟相位_零基础学FPGA (二十五)必会! 从静态时序分析到SDRAM时序收敛(下篇)...

    七.SDRAM工作时钟相位偏移计算本文引用地址:http://www.eepw.com.cn/article/279083.htm 从上篇文章中我们知道,我们的数据是要经过一定的延时才会到达目标器件的 ...

最新文章

  1. 初识Docker:BusyBox容器后台运行失败
  2. 数据对智慧城市建设 起到极大作用
  3. 前缀、中缀、后缀表达式及其相互转化的Java实现
  4. 122. 买卖股票的最佳时机 II008(贪心算法+思路)
  5. 条款46:需要类型转换的时候请为模板定义非成员函数
  6. Can‘t connect to MySQL server on ‘localhost‘(10061)【SQLyog】
  7. java获得时间和linux系统时间不一致
  8. [leetcode] 150. 逆波兰表达式求值
  9. (01背包 排序+特判)饭卡(hdu 2546)
  10. 最新的Scrum中文指南及更新
  11. Vue源码系列(一):Vue源码解读的正确姿势
  12. 【使用Pytorch实现ResNet网络模型:ResNet50、ResNet101和ResNet152】
  13. 垃圾焚烧发电厂如何推行5S/6S/7S管理
  14. CCF-相反数(C语言)
  15. 我的一篇旧作——卢老师
  16. 求细胞数量:一矩形阵列由数字 0 到 9 组成,数字 1 到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
  17. 锂电池充电过程的四个阶段
  18. Unity 多机器的视频不卡帧同步
  19. java/php/net/python线上歌唱比赛报名系统设计
  20. 星球壁纸android,Planets pack

热门文章

  1. hibernate教程_Hibernate教程
  2. SQL创建数据库– PostgreSQL,MySQL,SQL Server
  3. selenium简介_什么是Selenium? Selenium简介
  4. VSCode调试Python时终端输出中文乱码解决方法2
  5. Java基础之字符串详细比较
  6. Java异常的正确使用姿势
  7. Docker 运行Tensorboard 和 jupyter的正确方法
  8. 我的媒体播放器——多媒体编程
  9. 嵌入式学习步骤及方法(精典)
  10. 匿名管道(4种情况 )