【xilinx】解决vivado中 I/O 时钟布局器错误

典型时钟

AMD 设备上的典型时钟电路结构如下:

输入端口 (IBUF ) → BUFG → FDCE/C

如果使用 MMCM 或 PLL 修改时钟,则其结构如下:

输入端口 (IBUF) → BUFG → MMCM/PLL → BUFG → FDCE/C

对于 GT 时钟,其结构如下: 

GT_QUAD → BUFG_GT → FDCE/C 

I/O 时钟布局阶段可能会发生错误,表明该工具无法放置时钟结构直到最后一个 BUFG。

分析
 

发生这种情况的原因可能有多种:

  1. 时钟结构单元上的 LOC 或 CLOCK_REGION 的选择
  2. 时钟结构复杂,无法不经过人工干预就放置
  3. 工具中的 I/O Clock Placer 算法存在错误

当该工具遇到这种情况时,它会打印详细的错误消息,其中包括以下信息:

  • 可以解决此错误的 CLOCK_DEDICATED_ROUTE 约束
  • 来自时钟结构的细胞
  • 由工具决定的时钟缓冲器和 MMCM 的临时位置
  • 所有 I/O 时钟架构规则,以及临时放置所违反的规则

虽然 CLOCK_DEDICATED_ROUTE 可以解决错误,但用户在将其纳入工作流程之前了解以下内容非常重要。

  • 使用 CDR 对设计 QoR 的影响
  • 错误是否是由于用户约束、LOC、CLOCK_REGION 或 P-BLOCK 造成的
  • 时钟结构是否复杂,可以通过手动约束来解决
  • 这是否是 I/O Clock Placer 算法的一个真正问题

本博客讨论了如何理解 I/O 时钟布局器错误、评估 CDR 约束的必要性以及如何确定工具是否可以放置具有附加约束的结构。

以下用户指南中提到了 CLOCK_DEDICATED_ROUTE 的各种值:

  • Versal -  Versal 自适应 SoC 硬件、IP 和平台开发方法指南 (UG1387)
  • UltraScale -  FPGA 和 SoC 的 UltraFast 设计方法指南 (UG949)

对于复杂的时钟结构,I/O Clock Placer 错误的解决方案可以是多个单元和网络的 CDR、LOC 和 CLOCK_REGION 约束的混合。

在深入调试之前,您应该熟悉以下先决条件:

  1. 您使用的设备的 I/O 架构:
    1. 对于 UltraScale,请参阅UltraScale 架构 SelectIO 资源用户指南 (UG571)
    2. 对于 Versal,请参阅Versal Adaptive SoC SelectIO 资源架构手册 (AM010)
  2. 您使用的设备的时钟架构:
    1. 对于 UltraScale,请参阅UltraScale 架构时钟资源用户指南 (UG572)
    2. 对于 Versal,请参阅Versal 自适应 SoC 时钟资源架构手册 (AM003)
  3. 使用“查找”窗口列出设备中的各个可用站点(BUFG 和 MMCM/PLL)。
  4. 使用网络表中的“查找” 窗口列出错误中提到的单元和网络。
  5. 使用 Vivado Design Suite 进行基本的 Tcl 脚本编写。

调试

I/O Clock Placer 算法是一种基于规则的算法,它将网表中的时钟结构映射到特定规则。这些规则用于为设计中的 MMCM/PLL 和 BUFG 分配临时布局。

然而,需要注意的是,这些临时放置可能对某些单元格是正确的,但对其他单元格则不正确。下面提供的规则可用于理解和评估算法所做的放置。

Versal -  Versal 自适应 SoC 硬件、IP 和平台开发方法指南 (UG1387)
UltraScale -  AMD Technical Information Portal 

由于这些规则源自实际硅片,因此 I/O Clock Placer Error 不太可能是工具中的真正错误。不过,本博客介绍了这种可能性,以防万一。

每当您遇到这些问题时,建议对 .runs /impl_1文件夹中的后期选择检查点进行操作。

如果您是非项目模式用户,则需要明确生成后期选择检查点。 

  1.  打开检查点 post_opt.dcp
  2. 使用place_ports命令代替place_design
    当place_design失败时,它不会在内存设计中留下部分布局以供检查。可以改为运行place_ports命令,以便重现相同的错误,同时提供结果部分布局以供检查。
  3. 显示所提及的单元和网络的示意图。
    您可以使用 Vivado 中的 Ctrl+F 选项返回错误中提到的单元,或者使用 Tcl 脚本将单元和网络放入错误消息中的 Tcl 变量中。
  4. 显示时钟区域中的 BUFG 和 MMCM 站点的对象,以检查特定时钟区域的利用率。
  5. 将时钟结构分成几段。
    例如,如果时钟结构如下-
    (IBUF) → BUFG → MMCM/PLL → BUFG → FDCE/C
    第 1 段 = IBUF → BUFG
    第 2 段 = BUFG → MMCM/PLL
    第 3 段 = MMCM/PLL → BUFG
  6. 使用文档中提到的规则交叉检查 Vivado 的临时布局。
    例如,如果这是 Versal 设备,段 1 很明显,并且位于同一时钟区域,即第一行。
    段 2 位于规则中提到的最后一行。为了解决这个问题,如果您在 MMCM 上放置 LOC,则段 3 位于规则的第 2 行。
    检查提到的单元是否有任何用户约束,以及它们是否影响任何规则。
    如果进行迭代分析:您需要验证布局是否符合规则。如果不符合,请检查其他单元是否影响此布局。
    注意:规则在上面的链接中提到。
  7. 确定强制 Vivado 遵循规则的约束。
  8. 使用新的约束在后期选择中重新运行。 

重复上述步骤,以识别错误中报告的任何新单元。通过反复执行这些步骤,我们将获得一组可用于继续进行设计实施的约束。

注意:在某些情况下,CDR = false 是不可避免的,例如当使用非 CCIO 引脚作为输入时钟时。在这种情况下,必须对 IBUF 的输出进行 CDR = False 约束。

你可能感兴趣的:(xilinx,fpga开发,时钟,vivado,时钟布局)