3 综合运用工具
下面提到的解决问题技巧,因为受目前认识的限制和现有的技术水准,不该当把它们当作是“万能”的。尤为是随着技术的发展,其中的许多手段确定会不合适了。布局
3.1 可能成为关键路径的电路优化
在作详细设计方案或者整体方案的时候,必定要考虑到设计中哪些电路可能成为关键路径。若是不考虑这些,极可能会致使设计实现失败,或者要更改设计,或者要更换器件。spa
在FPGA设计里,经常影响到设计没法(或者很难)实现的电路有(指设计速度方面):比较器、多路选择器、Distributed RAM、乘法器、加法器等,尤为是在位宽比较大的状况下。设计
建议:在作方案时,针对上述电路先进行速度评估,以决定是否要Pipeline。ip
3.2 如何提升芯片速度资源
提升芯片速度的根本方法是:减小组合逻、LUT的级数、尽可能压缩关键路径上的线延时。pip
3.2.1 引入放松约束 TIG False path 和Multi-Cycle-Pathclass
许多设计者以为设置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作准备。