FPGA的Timing Part 2
FPGA中影响时序的因素
我们知道FPGA和ASIC的区别之一是FPGA能够多次编程,而多次版本的结果是每次布线的结果都不尽相同,每次布线结果可以在FPGA editor 中查看。
随着FPGA器件规模和代码功能复杂度的提高,FPGA工程师在完成代码编写后,很可能相当大一部分精力是在完成bit file ,可测试的合格的加载文件首先需要满足Timing。影响时序的因素可以分为器件、工具和策略、设计和coding。
器件:
本身的走线延时差异。FPGA根据器件的不同,速率等级的不同都会有响应的时序模型差异,图1是寄存器CLK to Q的在Kintex7 器件不同速率等级的差异,
红色框代表-3器件,也是最快的。这些参数在每款器件的datasheet都有详细的数值。图1只是一个举例,LUT的查表延时更为关键。
图1.器件手册延时信息
另外器件不同,FPGA本身的布线资源多少也不同;如果需要完成FPGA的P &R和同时满足时序,有足够的布线资源当然最好。然而布线资源并不像逻辑规模一样能够以LE or LC数目体现。我们知道Spartan6 的布线资源就比较紧张,一定程度上就限制了版本的资源占用率(Timing 要求高时)。
B.工具和策略:
我们知道FPGA的工具都有很多选项和设置,最容易理解的是area/speed/Balance ; 这些不同的设置能够影响到综合、布局、布线的效果。从而在不更改FPGA代码的前提下有效地影响timing;当然,工程师需要理解设置含义,否则不合理的设置会适得其反哦!
图2.ISE的综合设置
C. 设计和coding
组合逻辑的深度极大的影响FPGA的时序,这个比较容易理解;LUT or Slice的级数决定了关键路径。工程师coding的技巧和能力决定了整个代码timing的结果,如果写代码时能够联想到综合结果将RTL转化到电路的结构,Slice的占用情况;Timing 一定很好了,^_^ 请大家平时积累设计技巧和方法!
改善FPGA时序的Tips
我们知道很多方法可以改变时序,比如优化代码,改变综合策略等。下面一起讨论比较通用的改善时序的Tips:
一般情况下对时序影响最大的有 “更改RTL代码 – 改变综合策略(选项) – 改变布局布线策略 – 更改约束文件”;
工具选择:
FPGA工具:xilinx目前有ISE和Vivado,对于大的设计和28nm器件工具本身的效率和算法改善会极大的影响布线结果。图3是很早的布线结果对比,对比很直观明显。
图3. ISE VS vivado 布线结果对比
第三方综合工具:
在V5-V6的时代,第三方综合工具synplify等综合结果对时序的改善还是很明显的。这里可能是因为synplify等在综合时有时序约束信息的导入。目前vivado同样在综合时同样有时序概念,个别设计第三方工具改善效果不明显了。
3. 改善关键信号的扇出;
A. 对于信号的大扇出