《Vivado工程经验与各种时序约束技巧分享.docx》由会员分享,可在线阅读,更多相关《Vivado工程经验与各种时序约束技巧分享.docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Vivado工程经验与各种时序约束技巧分享FPGA毕竟不是ASTC,对时序收敛的要求更加严格,本文主要介绍本人在工 程中学习到的各种时序约束技巧。首先强烈推卷阅读官方文档UG903和UG949,这是最重要的参考资料,没有 之一。它提倡要在设计的早期阶段就要排除问题,越到后期时序的改善就越困 难。其中HLS层次对性能的影响是最大的。本文将从代码风格,时序修正,工程设置等几个方面介绍本人的实践经 验,希望让各位初学者快速提高,也希望FPGAer能给出宝贵建议。1 .代码风格推荐使用Xilinx language templates的代码块,这里的代码能 够综合出正确且结构简洁的电路,包括移位寄存器
2、,乘法,复数乘法,FIR滤 波器等,凡是涉及到的模块尽量使用官方写法。合理的设计代码框架。10相关的代码、时钟管理单元尽量放在顶层,后者 有助于以共享资源从而提高性能降低功耗。模块的输出最好是使用寄存器输 出,有助于降低路径延时帮助时序收敛。复位也是非常重要的问题。和ASIC不同,Xilinx FPGA的寄存器是高电平 复位,支持异步复位和同步复位,但是幽和BRAM内部的寄存器不支持异步复 位。因此,官方更推荐设计采用高电平同步复位,可以降低资源的使用和功 耗,有助于时序收敛。由于FPGA的初始状态是确定的(可以在定义说明中指 定),为了更快地时序收敛,官方文档认为,能不用复位是最好的,尤其数
3、据 路径和移位寄存器的设计中。不过使用同步复位仍需要注意控制集不能太多的 问题。关于这方面的内容,UG949第三章Control Signals and Control Sets 给了详细的说明。数学运算使用DSP单元速度会更快一些,根据DSP的结构重组数学运算, 充分利用FPGA的DSP、BRAM资源。并且能做到对代码映射的硬件资源心里有 数。如果并不需要优先级,尽量将If语句转化为case语句。尽量不要使用Dont Touch这类语句。如今Vivo综合工具已经很完善 了,除非代码有问题或者手动复制寄存器,否则一般不会发生电路被综合掉的 现象。使用这些语句会覆盖Vivado综合设置,导致电路
4、没有得到充分的优化, 给时序收敛造成困难。2 .时序修正严格遵守Vivado开发流程,在第一次跑综合时最好是在没有任何物理约束的情况下,Vivado在越少物理约束的情况下综合出来的效果越好。查 看每个阶段的时序报告,将每一阶段的时序违例控制在300Ps以内,尽早消除 问题。以前本人RTL Analysis阶段过了之后选择运行Implementation跳过 Synthesis报告,这是不可取的行为。有时候会发现Synthesis有时序问题而 在Implementation阶段反而没问题,这是因为Vivado在Implementation阶段 对时序不满足的地方倾斜了更多的资源保证时序收敛。但是
5、忽略Synthesis的 时序问题会在后期顶层模块集成占用大资源时爆发出来。下面介绍主要面对的两个时序问题的处理技巧。1 ) setup time建立时间问题建立时间是工程设计中最常遇到的问题了。一般说来,导致建立时 间违例主要有两个原因:逻辑级数太大或者扇出太大。打开Report Timing Summary界面查看路径延迟信息,如下图所示。Name 八1Path 21SlackLevelsHigh Fanout0.006760I Path 220.01903I Path 230.02803Path 240.02803Path 250.0463Path 260.046 .J X3Levels
6、指的是逻辑级数logiclevel, 一个logic level的延迟对应的是 一个LUT和一个Net的延迟,对于不同的器件,不同频率的设计能容纳的 logic level是不同的。假设7系列的-2速度等级250MHz的设计,电路设计的 大部分levels最好不要超过8,否则会造成时序收敛困难。速度等级-1-27 系列575ps500psUltraScale490ps425psUltraScale+350ps300psUltraScale+ LV490ps425psLogic level太大的处理方法就是重定时(Retiming) 了,典型的重定时方 法就是流水线,将过于冗长的组合逻辑增加寄存
7、器进行打拍。High Fanout指的是扇出,同样和器件、设计频率等有关,如下图所示:ConditionFanout 5000Fanout 200Fanout 1Low Frequency 1 to 125 MHZFew logic levels between synchronous logic13 levels of logic at maximum frequencyN/AN/AMedium Frequency 125 to 250 MHzIf the design does not meet timing, you might need to reduce fanout and/or
8、logic levels. 250 MHzNot recommended for most designs.Small number of logic levels is typically necessary for higher speeds.Advance p methods r( Careful log Compact fi logic levels (Driver ar impact p ,降低扇出最好不要在综合设置中指定,过低的扇出限制会造成设计堵塞反 而不利于时序收敛,最好的方法是根据设计中时序最差路径的扇出进行针对性 的优化。如果是寄存器的输出扇出很大,可以使用max_fano
9、ut属性标记寄存器 声明,也可以手动复制寄存器,具体可参考:. csdn. net/shshine/article/details/52451997如果不是关键时序路径,而且高扇出网络直接连接到触发器,对扇出超过 25K 的 net 插入 BUFG:set_property CLOCK_BUFFER_TYPE BUFG get_nets netName当然,也可以在后期Implementation的物理优化设置中优化扇出。2 ) hold time保持时间问题在实践中,我发现保持时间问题的问题往往是异步处理的问题。对于一个信号的跨时钟域问题,一般使用双寄存器法(对于慢采快的结绳 法这里不讨论)
10、。为了降低MTBF (Mean Time Between Failures,平均无障碍 时间),这两个寄存器最好位于同一个slice中。可以使用tel语言指定,如:set_property ASYNC_REG TRUE get_cells list syncO_reg syncl_reg也可以直接在代码中指定:(* ASYNCREG 二 TRUE *) (* keep = true *)reg syncO_reg, sysncl_reg;也可以参考代码模板使用XPM模板进行处理。多个信号一般是使用FIFO或者握手的方法,这里不再赘述原理。同步C匹 处理比较复杂,本人打算之后另外写一篇文章详细讲
11、述。3 .工程设置Vivado综合实现本质是时序驱动的,和ISE不同,因此再也没有 ISE那种用随机种子综合实现满足时序收敛的工具。不过Vivado在布局布线方 面提供了几种不同的策略(directive),通过不同策略的组合可以产生上千种 不同的布局布线结果,还可以使用tel钩子脚本自定义布局布线过程,足以满 足需求。而且,Vivado可支持同时运行多个Implementation,这为这种设计时 间换取性能的方法提供了工具上的便利。Implementation M Post-place Phys Opt Design 0 Post-route Phys Opt Design是没有使能的。工程后成能这两个配置也能在一定程度上改善时序收 敛。FPGA工程师的工作不只是将电路功能实现,由于器件和工具不是理想的, 所以还需要研究器件特性和工具的局限,尤其是在如今算法结构越来越成熟的 背景下,不断被工具折磨,也许这也是FPGA工程师的悲哀吧。