AMD FPGA设计优化宝典:面向Vivado/VHDL
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 面临的挑战

当前的FPGA设计规模越来越大,好在FPGA芯片的规模也越来越大,但设计的复杂度也越来越高,主要体现在较多的输入/输出管脚、较高的总线位宽、较大的扇出及较高的逻辑级数方面。带来的直接后果是编译时间过长、资源利用率过高、次优布局、布线资源消耗太多、时序收敛较困难等,这也是目前FPGA设计面临的一些挑战。另外,有些FPGA设计要求时钟运行在300MHz甚至400MHz以上,这样面临的挑战将会更多。

以VU9P为例,其可用资源及某设计中的资源利用率如表1-6所示。Vivado版本为2018.3,服务器操作系统为Linux 64位,完成一次编译(从综合到生成.bit文件)至少需要十几小时。当设计的时钟频率为400MHz时,完成一次编译则需要二十多小时甚至更长,有时还无法实现时序收敛,导致反复迭代,从而消耗更多时间。

表1-6

在这些挑战中,时序收敛在多数情况下是设计者面临的最大挑战。传统的时序收敛流程如图1-31所示,分为两大阶段:综合阶段和布局布线阶段。综合阶段只要满足WNS(Worst Negative Slack,最差建立时间裕量)等于0即可进行布局布线,这个目标通常比较容易实现。而布局布线阶段的时序收敛往往涉及多方因素,需要设计者对工具特性、设计本身深入理解,同时有一定的经验积累。因此,这个过程有可能出现反复迭代。

图1-31

针对布局布线阶段的时序收敛,通常需要采用如图1-32所示的流程。这个流程的关键点是分析时序违例原因,分析的对象并不是所有的时序违例路径,而是最为关键的几条时序违例路径。实践表明,往往只用手工修复这些关键时序违例路径,工具会自动修复其他时序违例路径。找到原因之后才能有的放矢地找到解决办法。一般情况下,出现时序违例的原因包括:逻辑延迟太大、布线延迟太大、时钟偏移或时钟抖动太大。若确定原因是逻辑延迟太大,那么可能的解决办法有两种:插入流水寄存器和采用重定时。前者需要修改代码,由于增加流水寄存器会导致从输入到输出所需要的时钟周期个数发生改变,多条路径的数据需要重新对齐,改动量可能会比较大;后者无须改动代码,但需要确定是在综合阶段设置重定时还是在布局布线阶段设置重定时,是全局设置(使用全局设置选项)还是局部设置(使用模块化综合技术)。这两种解决办法到底哪个是最优解?这需要尝试,也需要设计者积累足够的经验,同时比较耗时。尤其是在多个解决办法无法并行执行时,耗时更多。

图1-32

为了应对这些挑战,我们不仅要从设计本身入手,还要从EDA工具的角度入手,以期工具能够帮助我们缩短编译时间、提高编译质量。这就要提到Vivado ML(Machine Learning)版本。

Vivado ML的首个版本是2021.1。其在设计的多个阶段引入了机器学习算法。例如,在综合阶段,引入了基于机器学习算法的门级优化,从而大大提高了综合质量并且将综合时间平均缩短了30%;在布局布线阶段,引入了基于机器学习算法的拥塞评估和延迟评估,从而有效减少了迭代次数并将布局布线时间平均缩短了20%;其最大亮点在于引入了智能设计流程(Intelligent Design Run,IDR)。该设计流程专门为时序收敛服务,共包含3个阶段,如图1-33所示。阶段1,工具会从5个方面,即时序约束、资源利用率、时钟网络、布线拥塞和时序违例路径进行优化,生成相应的优化建议(通常以Tcl脚本的方式呈现),并自动将这些建议施加到对应的子步骤(实现阶段1的4个子步骤,对应的Tcl命令分别为opt_design、place_design、phys_opt_design和route_design)中。该阶段结束后,工具会对所有的布线后的网表进行比较,选取WNS最小者,获取其中有效的优化建议供阶段2或阶段3使用。阶段2在阶段1的基础上(继承了阶段1的结果,即继承了有效的优化建议),工具会采用机器学习算法生成3个布局布线策略。阶段3为增量编译阶段。实验数据表明,IDR可以给设计带来平均10%的收益,即Fmax(设计可运行的最高时钟频率)可提升10%。

图1-33

IDR有单独的窗口,如图1-34所示。采用一键式操作,中间过程无须人工干预。从这个角度而言,IDR对设计者的经验积累的要求并不高。图1-35显示了未使用IDR时最终的时序性能。与图1-34对比,可以看到,IDR使WNS从-1.040ns变为-0.158ns,同时修复了保持时间违例。

图1-34

图1-35