文章来源:FPGA入门到精通
一、优化模块划分,做好层次化设计
不合理的模块划分,会导致工具无法有效规划布局,引发逻辑过度集中,或者跨区域的长布线。
1、把交互紧密的模块放在同一个子模块
交互频繁的模块,放在同一个子模块里,工具会优先将它们布局到相邻的区域,减少跨模块的长距离布线:
比如,数据采集和预处理模块,交互非常多,就把它们放在同一个子模块,不要拆分到顶层的不同模块。
2、避免过大的扁平模块
不要把所有逻辑都放在一个上万实例的大模块里,过大的模块会导致工具无法有效布局,逻辑过度集中。
把大模块拆分为多个小的子模块,让工具可以更好的规划布局,分散逻辑。
3、避免跨 SLR 的模块交互
对于 SSI 多 die 器件,代码里把需要大量交互的模块,放在同一个子模块,让工具将它们布局到同一个 SLR,减少跨 die 的长线信号,因为跨 die 的信号会占用大量的长线资源,极易引发长线拥塞。
二、避免过度的逻辑压缩与资源共享
过度的资源共享,虽然节省了少量的逻辑资源,但是会大幅增加布线的压力,引发局部拥塞。
1、避免过度的资源共享
不要为了节省资源,把大量不同的逻辑共享同一个 LUT、DSP 或者 MUXF,这会导致大量的选择信号,增加局部的互连压力:
比如,不要把 8 个不同的乘法器共享同一个 DSP,通过选择器切换,这会产生大量的选择信号,引发局部的布线拥塞。
2、避免过大的多路选择器
过大的多路选择器(比如 64 选 1、128 选 1),会导致大量的选择信号,以及局部的 MUXF 资源占用,引发短线拥塞。
可以将大的 MUX 拆分为多级的小 MUX,或者插入流水线,拆分逻辑。
三、总线与全局信号的优化
1、大位宽总线的就近布局
大位宽的总线(比如 512 位、1024 位的总线)会占用大量的布线资源,代码里把总线的两端的模块放在同一个子模块,让工具将它们布局到相邻的区域,减少总线的长度,避免跨区域的长总线引发长线拥塞。
2、拆分大总线
把过大的位宽总线拆分为多个小总线,分别传输,减少单个总线的布线压力。
3、减少全局信号的数量
避免过多的全局控制信号,比如全局的配置信号、全局的使能,这些信号的扇出都很大,会占用大量的长线资源,尽量用局部的信号替代。