Xilinx FPGA 中 PLL 与 MMCM 的区别及时钟管理应用实践指南

二牛学FPGA
文章2026-04-24
77

Quick Start(快速上手)

打开 Vivado,创建一个新工程,选择目标器件(例如 Xilinx Artix-7)。在 IP Catalog 中搜索并例化“Clocking Wizard”IP。设置输入时钟频率(例如 100 MHz),选择输出时钟数量(2 个),并分别设置频率(例如 50 MHz 和 200 MHz)。在“Output Clocks”选项卡中,为每个输出时钟选择“Use MMCM”或“Use PLL”。生成 IP,并在顶层 RTL 中例化该 IP。编写测试激励,在仿真中观察输出时钟波形:确认 50 MHz 和 200 MHz 时钟的占空比接近 50%,且无毛刺。运行综合(Synthesis),检查资源报告:确认 MMCM 或 PLL 被正确推断。运行实现(Implementation),查看时序报告:确认所有时钟域满足建立/保持时间。

前置条件与环境

项目推荐值说明 / 替代方案
器件 / 板卡Xilinx Artix-7 (XC7A35T) 或更高Kintex-7, Virtex-7, Zynq-7000
EDA 版本Vivado 2020.1 及以上ISE 14.7(仅支持 7 系列及更早器件)
仿真器Vivado Simulator (xsim) 或 ModelSimVCS, Questa
时钟 / 复位单端 100 MHz 板载时钟,异步复位(低有效)差分时钟(需 IBUFDS),同步复位亦可
接口依赖无特殊接口,仅需时钟输入若使用外部晶振,需确保时钟引脚为专用时钟输入(MRCC/SRCC)
约束文件XDC 文件:定义输入时钟周期(create_clock)

目标与验收标准

  • 功能点:成功生成两个不同频率的时钟(50 MHz 和 200 MHz),且相位可调(如 0° 或 90°)。
  • 性能指标:输出时钟抖动(Jitter)在数据手册范围内(典型值 < 1% UI)。
  • 验收检查清单
    • 输入时钟频率在 PLL/MMCM 允许范围内(参考数据手册)。
    • 输出时钟频率满足分频/倍频系数整数比。
    • 复位信号在输入时钟稳定后释放。
    • XDC 约束中定义了输入时钟。
    • 仿真中 locked 信号变高后测量时钟。
    • 综合后资源报告显示 MMCM/PLL 实例。

实施步骤

步骤 1:创建 Vivado 工程并例化 Clocking Wizard IP

在 Vivado 中新建工程,选择目标器件(如 Artix-7 XC7A35T)。打开 IP Catalog,搜索“Clocking Wizard”并双击例化。在配置界面中,设置输入时钟频率为 100 MHz,输出时钟数量为 2 个。分别设置输出时钟频率为 50 MHz 和 200 MHz。在“Output Clocks”选项卡中,为每个输出时钟选择“Use MMCM”或“Use PLL”。点击“Generate”生成 IP。

步骤 2:在顶层 RTL 中例化 IP

将生成的 IP 例化到顶层模块中。连接输入时钟(clk_in)、复位(reset)和 locked 信号。输出时钟(clk_out1 和 clk_out2)连接到后续逻辑。确保复位信号在输入时钟稳定后释放(可通过 locked 信号控制复位释放逻辑)。

步骤 3:编写测试激励并仿真

编写 testbench,提供 100 MHz 输入时钟,并施加复位。等待 locked 信号变高后,测量输出时钟频率和占空比。确认 50 MHz 和 200 MHz 时钟的占空比接近 50%,且无毛刺。仿真通过后,进行下一步。

步骤 4:综合与实现

运行综合,检查资源报告:确认 MMCM 或 PLL 被正确推断,并记录使用的资源数量。运行实现,查看时序报告:确认所有时钟域满足建立/保持时间。若有时序违规,调整约束或时钟配置。

验证结果

仿真波形显示:locked 信号在约 1 μs 后变高,clk_out1(50 MHz)周期为 20 ns,占空比 50%;clk_out2(200 MHz)周期为 5 ns,占空比 50%。无毛刺或异常跳变。综合报告显示使用了 1 个 MMCM(或 PLL),无其他时钟资源。时序报告显示所有路径建立/保持时间裕量 > 0,满足设计要求。

排障指南

  • 问题:locked 信号始终为低

    原因:输入时钟不稳定或频率超出范围;复位未释放。解决:检查输入时钟质量,确保复位信号在时钟稳定后释放。

  • 问题:输出时钟频率不准确

    原因:分频/倍频系数设置错误。解决:重新计算系数,确保满足整数比。

  • 问题:仿真中时钟有毛刺

    原因:仿真精度不足或激励问题。解决:设置仿真精度为 1 ps,并检查时钟连接。

  • 问题:时序违规

    原因:时钟约束不足或路径过长。解决:在 XDC 中正确约束输入时钟,并优化逻辑。

扩展:PLL 与 MMCM 的差异与选型建议

核心差异

  • MMCM(Mixed-Mode Clock Manager)相比 PLL 增加了相位插值(Phase Interpolator)和动态相位调整(Dynamic Phase Shift)功能,支持更精细的相位控制(步进约 1/56 个 VCO 周期)。
  • PLL(Phase-Locked Loop)结构更简单,资源占用更少,适用于基本频率合成和相位锁定。
  • 抖动性能:MMCM 通常具有更低的输出抖动,但功耗略高。
  • 可用性:在 7 系列及更早器件中,MMCM 数量有限(通常 1-2 个),PLL 数量较多(4-6 个)。

选型建议

  • 若仅需基本频率合成(无相位调整需求),优先使用 PLL 以节省资源。
  • 若需动态相位调整、低抖动或精细相位控制,使用 MMCM。
  • 在高速接口(如 DDR、SerDes)中,建议使用 MMCM 以获得更好的时钟质量。

参考

  • Xilinx UG472: Clocking Wizard v6.0 LogiCORE IP Product Guide
  • Xilinx UG953: Vivado Design Suite 7 Series FPGA and Zynq-7000 SoC Libraries Guide
  • Xilinx DS181: Artix-7 FPGAs Data Sheet: DC and AC Switching Characteristics

附录:常见 XDC 约束示例

以下为输入时钟约束示例:

create_clock -period 10.000 -name clk_in [get_ports clk_in]

若需约束输出时钟,可在综合后使用 report_clocks 命令查看自动生成的时钟名称,并添加相应约束。

分类
技术分享
标签
fpgaPLLxilinx
浏览 77
分享:

相关推荐

同频道 · 相近分类

暂无相关推荐

作者

二牛学FPGA查看主页

同分类阅读

文章

延伸阅读与实操

  • 文章 + 课程联动深度文章常对应体系课章节,可一键选课。
  • 学习产出可参考笔记与作业案例在学习产出广场持续更新。

探索全站