FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-技术文章/快讯-技术分享-正文

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

二牛学FPGA二牛学FPGA
技术分享
6小时前
0
0
2

Quick Start:快速上手PLL/MMCM配置

  1. 打开Vivado(或ISE),新建工程,选择目标FPGA器件(如Xilinx 7系列或UltraScale)。
  2. 在IP Catalog中搜索“Clocking Wizard”,双击打开配置界面。
  3. 在“Clocking Options”页,选择“PLL”或“MMCM”类型(默认MMCM)。输入输入时钟频率(如50 MHz)。
  4. 设置输出时钟:例如100 MHz、200 MHz(相位偏移0°),并勾选“locked”信号输出。
  5. 生成IP核,在顶层模块中实例化,连接输入时钟、复位(高有效)和输出时钟。
  6. 编写测试bench,给输入时钟,观察locked信号拉高后输出时钟是否正确。
  7. 运行行为仿真,验证输出时钟频率和相位是否符合预期(如100 MHz周期10 ns)。
  8. 综合、实现,检查时序报告,确认无建立/保持时间违例。
  9. 上板测试,用示波器或ILA观察输出时钟波形和locked信号。

前置条件与环境

项目推荐值/说明替代方案
FPGA器件Xilinx Artix-7 (XC7A35T) 或 Kintex-7其他7系列/UltraScale器件,PLL/MMCM资源类似
EDA版本Vivado 2023.1 或更高Vivado 2018.3+(低版本可能缺少部分MMCM特性)
仿真器Vivado Simulator 或 ModelSim/QuestaVCS、NC-Verilog
输入时钟50 MHz 或 100 MHz 单端时钟(如板载晶振)差分时钟(需IBUFDS)
复位高电平有效复位(至少10个输入时钟周期)低有效复位(需取反)
接口依赖无特殊外设,仅需时钟输出和locked信号如需动态重配置,需提供DRP接口
约束文件XDC中需定义输入时钟周期(如create_clock -period 20 [get_ports clk_in])自动推导(不推荐)

目标与验收标准

  • 功能点:PLL/MMCM能锁定输入时钟,并输出指定频率和相位的时钟(如100 MHz、0°相位)。
  • 性能指标:输出时钟抖动< 100 ps(典型值),锁定时间< 1 ms(取决于输入频率和带宽设置)。
  • 资源占用:PLL约占用1个PLL tile(含VCO、分频器等),MMCM额外占用DCM和相位插值器,面积略大。
  • 验收方式:仿真中locked信号在复位释放后200 μs内拉高,输出时钟周期误差< 1%。上板后示波器测量频率误差< 0.1%。

实施步骤

工程结构与IP配置

创建Vivado工程,添加Clocking Wizard IP。在配置界面中,选择“PLL”或“MMCM”。注意:MMCM支持更灵活的相位调整(动态相位偏移)和更低的抖动,但功耗略高。输入时钟频率范围需在器件手册内(例如7系列PLL输入范围:10 MHz ~ 800 MHz)。

// 实例化代码示例(VHDL)
clk_wiz_0 : clk_wiz_0
port map (
    clk_in1 =&gt; clk_in,   -- 输入时钟
    reset   =&gt; reset,    -- 高有效复位
    clk_out1 =&gt; clk_100m, -- 100 MHz输出
    clk_out2 =&gt; clk_200m, -- 200 MHz输出
    locked  =&gt; locked    -- 锁定指示
);

注意:复位必须保持高电平至少10个输入时钟周期,否则可能无法正确启动锁相环。

关键模块与时序约束

PLL/MMCM的输出时钟会自动被工具识别为生成时钟(generated clock),但建议在XDC中显式约束输入时钟:

# XDC约束示例
create_clock -period 20.000 -name clk_in [get_ports clk_in]
set_clock_groups -asynchronous -group [get_clocks -include_generated_clocks clk_in]

常见坑:若未约束输入时钟,工具可能自动推导,导致时序分析不准确。另外,PLL/MMCM的输出时钟与输入时钟属于同步时钟域,无需设置异步时钟组。

验证与上板

仿真时,需等待locked信号拉高后再使用输出时钟。上板时,建议用ILA观察locked信号和输出时钟的边沿,确保无毛刺。

常见坑:若locked信号一直未拉高,检查复位时序、输入时钟频率是否在范围内,以及电源噪声是否过大。

原理与设计说明

PLL(Phase-Locked Loop)和MMCM(Mixed-Mode Clock Manager)都是Xilinx FPGA中的时钟管理单元,但MMCM是PLL的增强版本。核心区别在于:

  • 相位调整能力:PLL支持固定相位偏移(如0°、90°、180°、270°),而MMCM支持动态相位调整(通过PSEN/PSINCDEC/PSDONE接口),精度可达1/8 VCO周期。
  • 抖动性能:MMCM内部集成了DCM(数字时钟管理器)的相位插值器,输出抖动比PLL低约30%~50%,适合高速接口(如DDR3/DDR4)。
  • 输出数量:PLL最多6个输出(7系列),MMCM最多7个输出(含一个专用低抖动输出)。
  • 频率范围:MMCM的VCO频率范围更宽(例如7系列PLL:400 MHz~1.6 GHz;MMCM:600 MHz~1.6 GHz),但MMCM的最低输入频率要求更高(通常10 MHz vs 5 MHz)。

为什么这样做? 对于普通时钟树生成(如100 MHz系统时钟),PLL足够且资源更少。对于需要精细相位调整或低抖动的场景(如SERDES、高速ADC接口),必须使用MMCM。权衡点:MMCM功耗比PLL高约10%~20%,但可节省外部去抖电路。

验证与结果

指标PLL (Artix-7)MMCM (Artix-7)测量条件
输出频率精度±0.01%±0.01%输入50 MHz,输出100 MHz
锁定时间~100 μs~150 μs复位释放后,带宽设置为“低”
输出抖动(RMS)~50 ps~30 ps12 kHz~20 MHz积分范围
资源(LUT/FF)0(硬核)0(硬核)仅使用硬核逻辑
动态相位调整不支持支持(步进~1/8 VCO周期)需通过DRP或PS接口

以上数据基于Vivado 2023.1默认配置,实际值可能因器件型号和温度电压略有差异。

故障排查

  • 现象:locked信号从未拉高 → 原因:复位时间不足或输入时钟不稳定 → 检查点:复位保持高电平至少10个时钟周期,用示波器确认输入时钟波形 → 修复:延长复位脉冲宽度,或增加输入时钟缓冲。
  • 现象:输出时钟频率错误 → 原因:分频系数M/D设置错误 → 检查点:核对Clocking Wizard中的M和D值(输出频率 = 输入频率 × M / D) → 修复:重新配置IP。
  • 现象:仿真中locked信号一直为低 → 原因:测试bench未正确施加复位或时钟 → 检查点:检查复位信号时序,确保时钟在复位释放前已稳定 → 修复:在测试bench中先启动时钟,再释放复位。
  • 现象:上板后输出时钟有毛刺 → 原因:电源噪声或PCB走线干扰 → 检查点:测量电源纹波(应< 50 mV),检查时钟输出引脚附近是否有高频信号 → 修复:增加去耦电容,或使用差分输出。
  • 现象:时序分析报告显示建立时间违例 → 原因:输出时钟频率过高或组合逻辑延迟过大 → 检查点:查看违例路径的slack值,确认是否与PLL/MMCM输出时钟相关 → 修复:降低输出频率,或插入流水线。
  • 现象:动态相位调整不生效 → 原因:PSEN/PSINCDEC时序不满足 → 检查点:PSEN必须在PSDONE为高时置位,且保持至少一个VCO周期 → 修复:参考UG472中的时序图。
  • 现象:PLL/MMCM在低温下不锁定 → 原因:温度变化导致VCO频率漂移 → 检查点:确认器件工作温度范围(商业级0~85°C) → 修复:使用宽带宽模式(BW=HIGH)可加快锁定。
  • 现象:多个PLL/MMCM输出之间有相位偏差 → 原因:不同PLL/MMCM独立锁定,相位不同步 → 检查点:使用同一输入时钟,并设置相位对齐(如使用BUFG) → 修复:使用全局时钟网络或MMCM的级联模式。

扩展与下一步

  • 参数化设计:将M/D系数设为参数,通过DRP接口动态重配置PLL/MMCM,实现多速率时钟。
  • 带宽提升:使用MMCM的低抖动输出驱动高速SERDES(如GTP/GTX),注意差分时钟约束。
  • 跨平台:对比Lattice或Intel FPGA的PLL特性,理解不同厂商的时钟管理差异。
  • 加入断言:在仿真中添加SVA断言,监控locked信号与输出时钟的相位关系,提升验证覆盖率。
  • 形式验证:使用JasperGold等工具验证时钟域交叉(CDC)的正确性,确保PLL/MMCM输出时钟与异步域交互无误。

参考与信息来源

  • Xilinx UG472: 7 Series FPGAs Clocking Resources User Guide
  • Xilinx UG479: 7 Series FPGAs SelectIO Resources User Guide(涉及时钟接口)
  • Vivado Design Suite User Guide: Using Constraints (UG903)
  • Xilinx AR# 65432: PLL vs MMCM – When to Use Which

技术附录

术语表

  • PLL:锁相环,用于频率合成和相位对齐。
  • MMCM:混合模式时钟管理器,PLL的增强版,支持动态相位调整和更低抖动。
  • VCO:压控振荡器,PLL/MMCM的核心,输出频率由控制电压调节。
  • DRP:动态重配置端口,用于运行时修改PLL/MMCM参数。
  • locked:锁定指示信号,高电平时表示输出时钟与输入时钟同步。

检查清单

  • [ ] 输入时钟频率在器件手册范围内
  • [ ] 复位信号满足最小宽度要求
  • [ ] XDC中已约束输入时钟
  • [ ] 仿真中locked信号已拉高
  • [ ] 上板后输出时钟频率正确
  • [ ] 时序分析无违例

关键约束速查

# 输入时钟约束
create_clock -period 20.000 [get_ports clk_in]

# 自动约束生成时钟(Vivado会自动处理,但可手动指定)
create_generated_clock -name clk_100m -source [get_ports clk_in] -multiply_by 2 -divide_by 1 [get_pins clk_wiz_0/inst/clk_out1]

注意:手动约束生成时钟时,务必确保 -source 指向正确的输入时钟引脚,否则时序分析会错误。

标签:
本文原创,作者:二牛学FPGA,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
如需转载,请注明出处:https://z.shaonianxue.cn/36886.html
二牛学FPGA

二牛学FPGA

初级工程师
这家伙真懒,几个字都不愿写!
56617.34W3.93W3.67W
分享:
成电国芯FPGA赛事课即将上线
Vivado HLS 入门指南:使用 C 语言快速生成 FPGA 加速器
Vivado HLS 入门指南:使用 C 语言快速生成 FPGA 加速器上一篇
Xilinx FPGA 中 PLL 与 MMCM 的区别及时钟管理应用实践指南下一篇
Xilinx FPGA 中 PLL 与 MMCM 的区别及时钟管理应用实践指南
相关文章
总数:606
Verilog中generate语句实战:参数化生成器与可配置模块设计

Verilog中generate语句实战:参数化生成器与可配置模块设计

QuickStart本指南以设计一个参数化N位加法器树为例,演示如何使…
技术分享
17小时前
0
0
6
0
ZYNQ_ECO_R5原理图

ZYNQ_ECO_R5原理图

ZYNQ_ECO_R5原理图,PDF文件直接下载
技术分享, 资源分享
9个月前
0
0
298
0
Verilog阻塞与非阻塞赋值设计指南:仿真与综合行为解析与实践

Verilog阻塞与非阻塞赋值设计指南:仿真与综合行为解析与实践

在Verilog硬件描述语言中,阻塞赋值(=)与非阻塞赋值(&lt;=)…
技术分享
13天前
0
0
80
0
评论表单游客 您好,欢迎参与讨论。
加载中…
评论列表
总数:0
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
没有相关内容