在 FPGA 设计期间使用平面图工具是否真的有用或需要?

电器工程 FPGA 石英 自由人
2022-01-30 18:15:08

我使用过 Intel Quartus 和 Microsemi Libero。这两个工具都包含一种方法,我们可以通过该方法查看 FPGA 的平面图,将鼠标悬停在周围以查看网表的哪些部分已映射到 FPGA 平面图上的不同位置。

该工具在 Intel Quartus 中称为 Chip Editor,在 Microsemi Libero 中称为 Chip Planner。两者的目的是相同的。

这些工具的一个特点是我们能够将设计的某些部分锁定到 FPGA 的特定区域。这是通过 Quartus 中的逻辑锁定区域和 Microsemi Libero 中的 Floor Planner 约束来完成的。

通常我们只需点击编译按钮,让工具进行综合和拟合,这通常会给出一个符合时序的网表。装配工将弄清楚如何适应设计。

这让我想到了我的问题:

  1. 为什么需要使用这些平面图工具将设计逻辑锁定到特定区域?这样做有什么好处吗?这真的需要吗?

  2. 另外,如果我们已经对特定区域进行了这种逻辑锁定,如果我们想将调试逻辑(例如 SignalTap II (Quartus) 实例添加到该逻辑或识别实例 (Libero) 中呢?

如果有人想使用这个工具,那么,

  1. 如何决定设计的哪一部分应该锁定到 FPGA 平面图的哪一部分?对于复杂的设计,人类很难做出决定。这就是为什么我不明白这些工具的意义所在。
4个回答

由于没有人回答,您可以在 floorplanner 中执行以下操作(我的经验是使用 Xilinx 工具,但我希望其他工具类似):

  • “直观地”验证是否使用了某些特定资源。例如进位链、块 RAM、时钟管理块等。

  • 验证高度互连的逻辑功能是否已放置在可以使用本地而不是区域或全局路由资源进行通信的地方。

  • 验证共享相同时钟的逻辑是否已在时钟布线资源方面得到有效布局。

  • 可视化编辑与调试逻辑的连接

许多年前,我手动将某些逻辑放置在非常靠近相关 I/O 块的位置,以获得尽可能快的 I/O。我不知道这是否仍然是必要的或有帮助的。

  1. 为什么需要使用这些平面图工具将设计逻辑锁定到特定区域?这样做有什么好处吗?这真的需要吗?

它之所以有用肯定是有原因的,但这实际上取决于设计。

对于没有良好分组的大规模互连设计(例如,有许多处理核心严重依赖于所有其他核心,而不是每个核心独立运行),综合工具可能很难看到树木的木材。

他们试图将所有逻辑尽可能紧密地捆绑在一起以进行时序,但由于工具无法看到如何将其分组为小部分,这实际上可能导致更差的 FMax,因为内核位在其他内核中爆炸资源稀缺或路由猜想。

通过使用 LogicLock 区域或等效项,您可以帮助工具查看应该组合在一起的模块,这可以提高时序性能,因为工具可以更紧密地将部件封装在 LogicLock 区域内。

如果设计中有很多时钟,您还可以将属于一个时钟的寄存器LogicLock到特定区域,以尝试减少所需的全局时钟数量。现在的综合工具在这方面做得很好,所以可能不需要。

另一个原因是,如果您的逻辑在两个方向上被强烈拉动(例如,一个角落的内存 PHY,另一个角落的处理器,中间的互连结构)。例如,如果一个部分以比另一部分更高的频率运行,那么理想情况下,任何时钟交叉都将更接近高速部分以应对时序要求,但是如果逻辑在两个方向上被强烈拉动,则可能很难用于优化工具。有时,出于这种原因添加 LogicLock 区域会使我从事的设计从时序失败到通过。

对于更奇特的用例,例如时间到数字的转换,您可以使用长进位链将脉冲宽度转换为多位代码。这种技术通常需要精确控制和可重复的传播延迟,因此甚至可能需要限制到精确的寄存器或 LUT。

  1. 另外,如果我们已经对特定区域进行了这种逻辑锁定,如果我们想将调试逻辑(例如 SignalTap II (Quartus) 实例添加到该逻辑或识别实例 (Libero) 中呢?

我不能代表 Libero,但对于 Quartus,不受约束的逻辑仍然可以放置在 LogicLock 区域的未使用部分中(除非您明确禁止这样做)。如果您添加诸如 SignalTap 之类的调试逻辑,它将可以自由地将其放置在任何需要的位置(除非您将 SignalTap 限制到一个区域),包括在逻辑锁定区域内添加分接逻辑。

最后,您可能希望保存 FPGA 的一个区域以用于特定的未来扩展,因此可能会将当前设计限制在 FPGA 的较小部分,以便您知道以后拥有所需的空间。

  1. 如何决定设计的哪一部分应该锁定到 FPGA 平面图的哪一部分?对于复杂的设计,人类很难做出决定。这就是为什么我不明白这些工具的意义所在。

除非您有理由这样做,否则通常最好将其留给综合工具,而不是从一开始就过度约束设计。

如果您开始遇到时序分析等问题,那么您可以开始调查是否有很多长时序路径似乎是由于高速逻辑分布广泛而不是紧密封装所致。Chip Planner 非常有用,因为它在 Quartus 中至少可以显示时序路径。

修复可能是添加更多流水线,或开始将逻辑限制到某些区域。添加区域约束还可以让您挑选出复杂的设计,例如,对高速逻辑进行分组,然后查看这如何影响来自可能较低速度区域的其他路径,这些路径可能指向添加流水线的好地方。

其他答案已经给出了几个重点,我将添加另一个:

当您在安全关键环境中工作时,您可能希望在空间上分离功能,以加强它们免受单事件扰动 (SEU) 的影响(例如将功能三重化,然后对结果进行多数投票)。有几种方法可以做到这一点,例如将所有寄存器复制三重,或将整个块复制三重等。所有这些方法都有一个共同点,即冗余元素必须充分分离,因为 SEU 是物理上的局部现象(例如几百微米的直径当一个粒子通过它时模具),以便有效地对抗 SEU。您可以使用约束手动执行此操作,也可以使用工具供应商的标准化流程。此处描述了 Xilinx 世界中的一个示例:https://www.xilinx.com/support/documentation/application_notes/xapp1335-isolation-design-flow-mpsoc.pdf

是的,它对很多事情都非常有用,主要是为了深入了解这些工具对您的设计做了什么。它在进行时序收敛时特别有用。

从平面图中,您通常可以突出显示设计中的不同组件,并查看它们占用了多少面积以及它们的物理位置相邻。这可以通过手动放置某些组件来指示工具是否需要一些帮助。这对于多芯片 FPGA 来说尤其重要,因为从一个芯片跳到另一个芯片的成本很高。强制工具将某些逻辑放置在一个或另一个区域中可以防止各种时序收敛问题。

通常,平面图视图也可用于突出显示时序路径,以帮助找出某个路径违反时序约束的原因。有时这仅仅是由于放置不当,有时很明显需要重新设计逻辑以以某种方式分解路径。