【黑金云课堂】FPGA技术教程:PLL锁相环实验和MIO应用

本篇 PLL 锁相环实验和 MIO 应用 ,选自ALINX 黑金云课堂 FPGA 免费直播课。该课程由 ALINX 资深工程师团队倾力打造,从 0 到 1 系统化教学,帮助每位工程师跨过 FPGA 开发门槛。

🔍 ALINX :关注 ALINX,进入视频号即可查看完整黑金云课堂 FPGA 视频教程。配合笔记学习效果更佳。


PLL 锁相环实验

实验目的

  • 理解 PLL 在 FPGA 中的作用
  • 掌握 Clocking Wizard 的基本使用方法
  • 学会判断 PLL 是否锁定
  • 建立"系统逻辑必须依赖稳定时钟"的工程意识

PLL 基本概念

  • PLL 锁相环是一种反馈控制系统,通过比较输入参考时钟与反馈时钟的相位差,调整压控振荡器(VCO)的输出频率,使输出时钟与输入时钟保持相位锁定关系。

(PLL 基本框图:鉴相器 → 环路滤波器 → VCO → 分频器 )

  • 作用
  1. 生成多频率时钟
  2. 列表项消除时钟抖动
  3. 调整时钟相位
  4. 保证时序收敛
  • 关键特性
  1. 频率合成: 可从单一参考时钟生成多种频率
  2. 相位同步: 输出时钟与参考时钟保持固定相位关系
  3. 快速锁定: 现代 FPGA PLL 可在微秒级完成锁定

PLL与MMCM对比

维度 MMCM PLL
相位输出 9 路相位(8固定+1可变),支持精细动态相位调整 8 路固定相位,相位调整步长较大
分频能力 支持分数分频,可实现非整数倍频率转换,精度极高 仅支持整数分频,仅能实现整数倍频率转换
输出通道 7 组输出(O0~O6),O0~O3 及反馈端支持差分输出 6 组输出(O0~O5),仅支持单端输出,无差分端
适用场景 高速接口(SerDes/PCIe)、非整数倍时钟、差分时钟、高精度相位需求 通用逻辑时钟、整数倍频率转换、低功耗、资源紧张场景
性能功耗 抖动抑制更强,时钟更纯净;硬件资源 / 功耗略高 结构精简,功耗更低;性能满足基础需求

PLL 主要功能

  • 时钟倍频

PLL 可以将输入的低频时钟倍频为高频时钟输出。例如,将 50MHz 的输入时钟倍频为 100MHz、200MHz 甚至更高频率,满足高速逻辑电路的时钟需求。

  • 时钟分频

PLL 同样可以将高频时钟分频为低频时钟。这在需要为不同模块提供不同时钟频率的系统中非常有用,如为低速外设提供合适的时钟频率。

  • 相位调整

PLL 可以精确调整输出时钟的相位,实现时钟相位的超前或滞后。这在需要精确控制数据采样时刻的高速接口设计中至关重要,如 DDR 内存控制器。

  • 抖动抑制

PLL 具有良好的低通滤波特性,可以有效抑制输入时钟的高频抖动,输出更加稳定纯净的时钟信号。这对于保证高速数字系统的可靠性至关重要。

PLL 工程搭建

  • Clocking Wizard IP

Vivado 提供的 Clocking Wizard 是一个强大的 IP 核,可简化 PLL 配置流程。通过图形化界面,用户无需手动编写复杂约束,即可快速生成满足需求的时钟管理模块。

*工具优势:时序自动优化、稳定性保证、易于维护

  • 配置流程

配置输入时钟频率→配置输出时钟→生成 PLL 逻辑

接口信号说明

  • clk_in

PLL 的输入参考时钟,通常来自板载晶振或外部时钟源。这是 PLL 产生输出时钟的基准信号。

*典型频率:50MHz, 100MHz, 200MHz

  • clk_out

PLL 产生的输出时钟,其频率、相位由配置参数决定。这是系统逻辑实际使用的时钟信号。

  • locked

PLL 锁定指示信号,高电平表示 PLL 已完成锁定,输出时钟稳定可用。

locked = 1 PLL已锁定,输出时钟稳定可用 locked = 0 PLL未锁定,输出时钟不稳定

*在工程中,通常使用 locked 信号控制系统复位。只有在 locked 为高电平时,才释放系统复位,确保所有逻辑在稳定时钟下运行。

Verilog 核心代码

  • PLL 复位控制

    // PLL 复位控制逻辑// 确保系统逻辑在 PLL 锁定后才运行always @(posedge pll_clk or negedge pll_locked) begin
    if (!pll_locked)
    sys_rst <= 1'b1; // PLL 未锁定,系统保持复位
    else
    sys_rst <= 1'b0; // PLL 已锁定,释放系统复位
    end

作用:避免不稳定时钟导致亚稳态、时序错误

仿真与波形分析

  • 仿真波形图
  • 波形特征

上电初期 locked 为低,时钟不稳定;锁定后 locked 拉高,时钟稳定

MIO 应用

  • 核心概念

GPIO:通用输入输出,是软件可调用的 I/O 信号集合,包含 78 路 MIO 与 288 路 EMIO(96 入 + 192 出)。

MIO:PS 端引脚复用控制器,用于信号路由、分时复用,解决 PS 引脚数量有限问题。

MIO 与 GPIO 关系:78 路 MIO 引脚同时属于 GPIO;GPIO 是软件控制接口,MIO 负责将信号路由到物理引脚。

  • 引脚分布

MIO 分为 3 个 Bank:Bank0 (26bit)、Bank1 (26bit)、Bank2 (26bit),合计 78 路。

EMIO 分为 Bank3/4/5,各 32bit,用于 PS 与 PL 端交互。

  • GPIO 寄存器框架

分为中断检测数据读写两部分。

支持上升沿 / 下降沿 / 双边沿 / 高电平 / 低电平五种中断触发方式。

包含方向控制 (DIRM)、输出使能 (OEN)、数据输入 / 输出、中断使能 / 屏蔽 / 状态等关键寄存器。

(GPIO 框架)

更多细节欢迎关注我们黑金云课堂全年免费直播课黑金云课堂四月直播日历 我们将在每周二、三、四,同步推进 Verilog开发、Vitis开发、Linux开发三大系列,带你从零开始,稳扎稳打掌握 FPGA 开发全流程!

系列 内容定位
Verilog开发 硬件描述语言基础、逻辑设计、仿真调试
Vitis开发 Zynq软硬件协同、外设驱动、网络协议栈
Linux开发 嵌入式Linux系统移植、驱动编写、应用开发
相关推荐
Byron Loong2 小时前
【常识】通俗易懂的讲CPU,GPU,MCU,FPGA,DSP的区别和特点
单片机·嵌入式硬件·fpga开发
gaoxcv1 天前
TDC相关的一些方法
fpga开发
我爱C编程1 天前
【3.4】双口RAM模块的FPGA实现
fpga开发·fpga·fft·双口ram
三万棵雪松1 天前
【嵌入式刷题硬件设计基础(一)】
fpga开发·嵌入式·硬件基础
扣脑壳的FPGAer1 天前
Xilinx远程更新之watchdog Timer1/ Timer2
fpga开发
ALINX技术博客1 天前
【黑金云课堂】FPGA技术教程Linux开发:Petalinux安装
linux·运维·fpga开发
豆包公子2 天前
虚拟机配置共享文件&烧录FPGA bit文件
fpga开发
c-u-r-ry302 天前
pll/mmcm输入时钟配置页面警告
经验分享·fpga开发
逻辑诗篇2 天前
硬核算力集结!TMS320C6678、XC7K690T等、匠行科技SBC819模拟信号采集处理板,解锁高端测控新标杆
科技·fpga开发