如何识别 FPGA 设计中使用最多资源和面积的区域?

电器工程 FPGA 视频文件 赛灵思 斯巴达人 优化
2022-01-27 08:40:10

我正在进行大型 FPGA 设计,并且非常接近我目前使用的 FPGA 的资源限制,即 CSG225 封装中的 Xilinx LX16。

该设计也几乎完成,但目前它不再适合 FPGA。我可以关闭零件以使其适合,但是我需要减少资源使用以完成设计并使其满足时序和尺寸要求。

我想知道我们的报告中是否有任何工具可以帮助我确定我的设计中哪些部分消耗的资源最多。我的设计没有分区,而是分成了大约十几个或更多 VHDL 模块。

Xilinx 时序报告非常棒,但现在我需要知道在节省空间方面我可以从哪里获得最大的收益。

我也很难说出我用完了哪种类型的资源,或者这些资源会受到什么影响。

另一个烦恼是,随着设计变得越来越大,用于满足时序要求的组件开始出现故障,因为它们的布局不再那么理想。

目前,我使用 Post-Place 和 Route Static 时序报告,并使用 SmartXplorer。我正在使用设计策略来优化时序。

在关闭我的部分设计以使其适合之后,以下是一些结果:

切片寄存器利用率:42% 切片 LUT 利用率:96% 完全使用的 LUT-FF 对的数量:38% 这是否意味着我对寄存器很轻,但对门的使用很重?

是否有工具可以帮助开发人员优化区域,或者至少让他们更深入地了解他们的代码?

更新: 在查看了模块级利用率之后,我发现我到处都有小的胶水异步 fifo,它们占据了总 LUT 的 30% 左右。我将它们用作高速总线的跨时钟域粘合剂。我应该能够消除这些,因为时钟密切相关。(120 MHz 输入,通过 DCM 产生 100 MHz 和 200 MHz)

3个回答

我在 Xilinx 论坛上交叉发布了这个问题: http ://forums.xilinx.com/t5/Implementation/How-to-determine-what-part-of-the-design-consumes-the-most/td-p /393247

这个答案主要基于那里的评论。感谢 Deepika、Sikta 和 Gabor。

首先,在地图进程属性(-detail)中启用“生成详细地图报告”。

然后,打开 Design Summary,并导航到 Module Level Utilization。这是完整的层次结构,显示了排他性和包容性的设计利用率。

每行将显示一个数字对,例如 0/5392。这意味着该模块包含零个该特定元素,但该模块及其所有子模块总共包含 5392 个元素。

这是我的输出(部分扩展) 使用报告

在缩小尺寸时,Gabor 建议在合成器工具中切换到更大的 FPGA,这样即使它太大而无法装入您当前的 FPGA,它也可以完全映射,这将使工具运行得更快。

看起来你几乎用尽了所有的逻辑资源,而只使用了一半的寄存器。看起来您需要弄清楚是什么消耗了您的所有 LUT。有一些方法可以优化特定组件并使它们更节省空间——比如 RAM、移位寄存器和状态机。查看合成器生成的 .log 文件。它会告诉你正在推断什么样的组件。确保它正确推断组件。如果不是,它可能不会生成一个特别有效的网表。您可以通过查看综合日志文件了解很多信息。对您的代码进行一些小的更改可能会允许合成器推断各种组件,因此请查看合成器手册以获取一些模板。您可能需要切换合成器以优化面积而不是速度。此外,请检查以确保您没有关闭任何推断设置。我曾经尝试为 Virtex 6 HXT 565(354,240 6 输入 LUT/双 FF 对,32 MB 块 RAM)。Xilinx par 用了 7 个小时才完成,占据了大约 40% 的芯片。?!?!?!? 结果推断块 RAM 已关闭,合成器将几 KB 的 RAM 转换为 LUT。这不是有史以来最有效的决定。更改设置后,它占用了大约 1% 的芯片。去搞清楚。312 个 4 输入 LUT/FF 对,5.6 KB 块 RAM)用于 Virtex 6 HXT 565(354,240 个 6 输入 LUT/双 FF 对,32 MB 块 RAM)。Xilinx par 用了 7 个小时才完成,占据了大约 40% 的芯片。?!?!?!? 结果推断块 RAM 已关闭,合成器将几 KB 的 RAM 转换为 LUT。这不是有史以来最有效的决定。更改设置后,它占用了大约 1% 的芯片。去搞清楚。312 个 4 输入 LUT/FF 对,5.6 KB 块 RAM)用于 Virtex 6 HXT 565(354,240 个 6 输入 LUT/双 FF 对,32 MB 块 RAM)。Xilinx par 用了 7 个小时才完成,占据了大约 40% 的芯片。?!?!?!? 结果推断块 RAM 已关闭,合成器将几 KB 的 RAM 转换为 LUT。这不是有史以来最有效的决定。更改设置后,它占用了大约 1% 的芯片。去搞清楚。

从工具输出中发布整个“资源使用”部分是值得的。

您是否使用了所有的 Block RAM?如果域受到充分限制,通常能够用等效的 RAM 查找表替换逻辑/数学函数,并且它们具有足够的复杂性,值得预先计算。

除了记忆的推断,乘数也是如此。有时,与推荐的实例化模板的微小偏差可能会导致推断到 DSP48A 单元的乘法器失效。

如果您使用的是 PCIe 控制器,您能否减少为 TLP 有效负载保留的总缓冲区空间或最大 TLP 数据包大小?这可以降低 IP 内核的 RAM/逻辑使用量,但会以吞吐量/总带宽为代价。

使用 (Altera) Quartus,您可以在设计层次结构视图中多选项目,并查看 post-p&r 区域使用颜色编码/聚集。这可以直观地了解您的设计模块的相对使用情况。