【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 的各种值:

对于复杂的时钟结构,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 约束。

相关推荐
邹莉斯1 天前
FPGA基本结构和简单原理
fpga开发·硬件工程
悲喜自渡7211 天前
易灵思FPGA开发(一)——软件安装
fpga开发
ZxsLoves1 天前
【【通信协议ARP的verilog实现】】
fpga开发
爱奔跑的虎子1 天前
FPGA与Matlab图像处理之伽马校正
图像处理·matlab·fpga开发·fpga·vivado·xilinx
机器未来2 天前
基于FPGA的SD卡的数据读写实现(SD NAND FLASH)
arm开发·嵌入式硬件·fpga开发
贾saisai2 天前
Xilinx系FPGA学习笔记(八)FPGA与红外遥控
笔记·学习·fpga开发
吉孟雷3 天前
ZYNQ FPGA自学笔记
fpga开发·verilog·led·仿真·vivado·zynq
行者..................3 天前
1. ZYNQ 2. MPSOC 3. FPGA 4. IO分配 5. 硬件设计
fpga开发
tsumikistep3 天前
【无标题】Efinity 0基础进行流水灯项目撰写(FPGA)
fpga开发
行者..................3 天前
FPGA学习 VIVADO Verilog 编程
学习·fpga开发