首页 > 交易协议

三招轻松解决FPGA资源优化问题

文章作者:来源:www.xdlvod.com时间:2019-08-21



分析完成后,可以优化资源。由于FPGA资源有限,资源优化对于设计人员来说非常重要。本节将介绍几种常见的优化方法,设计人员可以根据实际项目选择不同的方法。

1.资源优化意义

FPGA资源有限。在设计过程中,必须注意整个设计中使用的资源不能超过所选芯片可以提供的资源。一般情况下,整个项目所需的资源占芯片资源的80%,确保整个项目具有一定的平衡性。该要求首先要确保项目能够达到最终频率,以确保有足够的资源来优化时间;第二,确保上板调试过程中有备用资源,方便调试;再次,需要确保整个项目的增加,确保相对较小的变化不影响整个系统的设计。

2.设计代码优化

编译结果后,整个项目根据编译结果进行优化。除了编译软件的优化外,还有最基本的设计代码和设计架构优化。

一般来说,设计架构在早期确定之后很难改变,因此需要更改设计代码。通常,修改设计代码以增加整个项目的最大频率,或节省资源并提高资源利用率,同时确保正确的功能。

代码优化方法主要有几种典型的优化方法,基本上是改变区域的方法或改变速度的方法。根据情况,小范围的速度和区域互换确保整个项目编译满足最终要求。如何灵活应用前几章介绍的几种设计方法,需要读者不断练习和练习。

3.资源再分配

在编译过程中,设计中经常使用一些RAM或专用DSP。如果未在编译时指定,则软件在执行资源映射时不使用此专用资源,而是使用其他逻辑资源进行拼接。即使这种拼接能够满足功能要求,并且由于没有特殊的优化,也不能保证最后使用的资源和效率。

在诸如内部RAM的专用资源不足的情况下,可以使用内部逻辑资源来实现,这实际上是逻辑芯片内的资源的重新分配。在设计过程中,建议将芯片自己的专用资源用于内部资源,如RAM。例如,当在项目fir_filter的输出之后添加第一级FIFO时,需要生成单独的FIFO。打开项目fir_filter后,选择[工具] | [MegaWizard插件] | [在管理器] | [内存编译器]打开内存设置选项,如图9-15所示,进行内存设置选择。

aeade595947227e01afb9be61a3a0a1c.jpeg

图9-15 Ram使用选项

通过Megawizard Plug生成所需的资源,通用软件还将根据情况选择合适的资源实现,如上图中的FIFO。如果设计人员没有指定内部RAM生成哪个RAM资源,软件将根据情况自动选择。当存在大量芯片资源时,这种选择并不是太多关注,但是当芯片资源紧张时,通常需要在开始时在芯片内部分配RAM资源并评估分配的资源大小,因为一旦选择内部RAM资源。之后,如果仅使用RAM的一部分,则其余模块不能使用未使用的RAM。

{! - PGC_COLUMN - }

4.综合区域优化

这些部分和编译选项非常重要。如果设置不当,软件将浪费大量资源来做一些不必要的工作。

另外,对于工程设计fir_filter,如果在使用默认编译选项后资源使用情况不理想,则需要进行区域优化。图9-16通过选择[Assignments] | [Settings] | [Analysis& Synthesis Settings]执行与公共区域相关的设置,通过不同的选择可以实现不同的优化效果。

81a0ec5e71d056685fae4a7e6b328fd4.jpeg

图9-16常用的综合设置选项

1)首先,您可以选择区域优化选项。当保证速度满足要求时,选择区域优化,编译器将相应地进行优化,以便项目能够以尽可能少的资源实现功能。

2)接下来,您可以选择[Auto ROM Replacement],[Auto RAM Replacement]和[Auto RAM Block Balancing]选项进行资源分配。这些选项将使软件决定是否用这些芯片资源替换具有相同功能的模块。通过这些干预,可以获得最佳的面积和速度。

3)同时选择[More Settings]选项,可以看到更多可优化的项目,例如图9-17中所示的状态机代码。如果在编码过程中没有计划,那么你可以在这里选择合成器它将根据所选的编码方法进行处理。通常,二进制顺序编码或格雷码可用于为更大规模的状态机获得更好的区域。

ec305d6848d05cc971a7813dc04750fa.jpeg

图9-17状态机编码选项

同时,[自动资源共享]选项将执行自动资源共享,优化具有相同功能的模块,减少资源浪费,充分利用资源。如图9-18所示,合理设置资源分配状态可以减少资源。浪费。

c686a109696f2529bc6e1cb6f29ddfce.jpeg

图9-18自动资源共享选项

诸如[删除重复逻辑],[删除重复寄存器]和[删除冗余逻辑单元]等选项可以删除重复的逻辑资源或冗余逻辑,减少浪费,并在整个设计过程中优化整体设计结构。通过完全优化模块边界,还可以实现资源优化的目标。