华为FPGA设计高级技巧Xilinx篇---读书笔记之三综合运用

综合运用

      下面提到的解决问题技巧,由于受目前认识的限制和现有的技术水准,不应当把它们看成是“万能”的。尤其是随着技术的发展,其中的许多手段肯定会不合适了。

3.1 可能成为关键路径的电路

      在做详细设计方案或者总体方案的时候,一定要考虑到设计中哪些电路可能成为关键路径。如果不考虑这些,很可能会导致设计实现失败,或者要更改设计,或者要更换器件。

      在FPGA设计里,常常影响到设计无法(或者很难)实现的电路有(指设计速度方面):比较器、多路选择器、Distributed RAM、乘法器、加法器等,尤其是在位宽比较大的情况下。

      建议:在做方案时,针对上述电路先进行速度评估,以决定是否要Pipeline

3.2 如何提高芯片速度

      提高芯片速度的根本方法是:减少组合逻、LUT的级数、尽量压缩关键路径上的线延时。

3.2.1 引入放松约束 TIG False path Multi-Cycle-Path

      许多设计者觉得设置TIGMulti-Cycle-Path意义不大,因为它们不直接对关键路径发生作用这种想法是错误的。虽然它们不直接对关键路径发生作用,但可以起到“让非关键路径散开”的作用,让这些非关键路径滚得越远越好。这样,就为关键路径腾挪出空间,从而与关键路径相关的LUT有可能尽量压缩在一起,从而到达“压缩关键路径上线延时的目的”这实际是一种“曲线救国”的策略,用词可能不太好,不过我想不出更好的了。

      实践证明:这种方法非常行之有效,而且它的一个最大好处是不用更改设计。

3.2.2 对线延时比较大的net 设置MaxdelayMaxskew

      迫使工具利用驱动能力比较强的长线资源,以减少线延时。

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篇---读书笔记之三综合运用

上一篇:HDU 2492 PingPong


下一篇:分割字符串取最后一部分