3 综合运用
下面提到的解决问题技巧,由于受目前认识的限制和现有的技术水准,不应当把它们看成是“万能”的。尤其是随着技术的发展,其中的许多手段肯定会不合适了。
3.1 可能成为关键路径的电路
在做详细设计方案或者总体方案的时候,一定要考虑到设计中哪些电路可能成为关键路径。如果不考虑这些,很可能会导致设计实现失败,或者要更改设计,或者要更换器件。
在FPGA设计里,常常影响到设计无法(或者很难)实现的电路有(指设计速度方面):比较器、多路选择器、Distributed RAM、乘法器、加法器等,尤其是在位宽比较大的情况下。
建议:在做方案时,针对上述电路先进行速度评估,以决定是否要Pipeline。
3.2 如何提高芯片速度
提高芯片速度的根本方法是:减少组合逻、LUT的级数、尽量压缩关键路径上的线延时。
3.2.1 引入放松约束 TIG False path 和Multi-Cycle-Path
许多设计者觉得设置TIG和Multi-Cycle-Path意义不大,因为它们不直接对关键路径发生作用这种想法是错误的。虽然它们不直接对关键路径发生作用,但可以起到“让非关键路径散开”的作用,让这些非关键路径滚得越远越好。这样,就为关键路径腾挪出空间,从而与关键路径相关的LUT有可能尽量压缩在一起,从而到达“压缩关键路径上线延时的目的”这实际是一种“曲线救国”的策略,用词可能不太好,不过我想不出更好的了。
实践证明:这种方法非常行之有效,而且它的一个最大好处是不用更改设计。
3.2.2 对线延时比较大的net 设置Maxdelay和Maxskew
迫使工具利用驱动能力比较强的长线资源,以减少线延时。
3.2.3 采用BUFGS
对于一些扇出特别多,线延时特别大的net,可以直接引用BUFGS 以提高驱动能力。例如:对时钟使能信号采用BUFGS进行驱动。
3.2.4 基本设计技巧
在“设计技巧”章节里,我们提到了许多设计技巧,其中许多与设计速度相关,现在整理如下:copy逻辑电路减少fanout;加法器处理;case代替if语句;合并if语句;减少关键路径上的LUT级数;去掉资源共享;pipeline 组合逻辑与时序逻辑分离;利用电路的等价性巧妙分配延时;利用LUT四输入特点进行优化。
3.2.5 专有资源的利用
如进位链、MUX 、SRL、乘法器等,可利用Coregen产生宏单元。
利用专有资源虽然可以提高速度,但有一缺点:降低代码的可移植性;如果是准备转ASIC,则需对专有资源进行代码改动,增加出错的可能性。因此,在做ASIC设计时,采用这种方法要仔细权衡。
3.2.6 关键路径在同一个Module
这样,在综合时,可以或得最佳效果。
3.2.7 关键路径单独综合,不与其它模块放在一起综合
对关键路径所在模块,采取速度优先策略;对非关键路径模块,采用面积优先策略。
3.2.8 针对关键路径,进行位置约束
如果发现关键路径相关LUT距离太远,可通过floorplanner手工布线,并形成位置约束文件,以指导布局布线。
3.2.9 迂回策略:降低非关键路径上的面积,为关键路径腾挪空间。
尽可能优化非关键路径上的面积,以尽量多给关键路径留空间,以便将关键路径相关
LUT压缩在一起,降低线延时。
该方法体现了“向非关键路径要面积,向关键路径要时间”的设计思想。
3.3 如何降低芯片面积
3.3.1 Distributed RAM代替BlockRAM
在设计中,如果LUT足够多,而BLOCK RAM不够,则可考虑采用Distributed RAM代替BlockRAM,这种情况在设计中有时会碰到。
3.3.2 Distributed RAM代替通道计数器
这个在前面的章节已经提到,这里不多说。
3.3.3 专有资源的利用
情况同 3.2.5
3.3.4 基本设计技巧
在“设计技巧”章节里,我们提到了许多设计技巧,其中许多与设计面积相关,现在整理如下:
加法器处理;if代替case语句;资源共享;组合逻辑与时序逻辑分离;利用LUT四输入特点进行优化;高效利用IOB;采用单端口BlockRAM,为ASIC做准备。
华为FPGA设计高级技巧Xilinx篇---读书笔记之三综合运用
原文:http://www.cnblogs.com/xuzhi-fpga/p/3528514.html