第六课 IP核PLL/MMCM

Xilinx锁相环及PLL在Zynq开发板中的应用
本文介绍了锁相环(PLL)和MMCM在XilinxFPGA中的作用,特别是如何利用ClockingWizardIP核生成不同频率和相位的时钟。实验任务涉及在Zynq开发板上实现多频率时钟并进行Vivado仿真。

一 原理:锁相环作为一种反馈控制电路,其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相 位。在 最多的情况下,MMCM/PLL 的参考时钟输入都是来自 IBUFG(CC)即具有时钟能力的 IO 输入。MMCM/PLL 的输出可以驱动全局时钟 BUFG 和行时钟 BUFH 等等。BUFG 能够驱动整个器件内部的PL 侧通用逻辑的所有时序单元的时钟端口。

在本实验中,读者可以简单地理解为:外部时钟连接到具有时钟能力的输入引脚 CCIO(Clock-Capable Input),进入 MMCM/PLL,产生不同频率和不同相位的时钟信号,然后驱动全局时钟资源 BUFG。(有关 Xilinx 时钟资源和 CMT 的更详细信息, 读者后期可以花一些时间和精力去学习一下 Xilinx 官方的手册文档“UG472,7 Series FPGAs Clocking Resources User Guide”里的介绍。 )

MMCM 的功能是 PLL 的超集,其具有比 PLL 更强大的相移功能。MMCM 主要用于驱动器件逻 辑(CLB、DSP、RAM 等)的时钟。PLL 主要用于为内存接口生成所需的时钟信号,但也具有与器件逻辑 的连接,因此如果需要额外的功能,它们可以用作额外的时钟资源。

PLL 由以下几部分组成:前置分频计数器(D 计数器)、相位-频率检测器(PFD,Phase-Frequency Detector)电路,电荷泵(Charge Pump)、环路滤波器(Loop Filter)、压控振荡器(VCO,Voltage Controlled Oscillator)、 反馈乘法器计数器(M 计数器)和后置分频计数器(O1-O6 计数器)。在工作时,PFD 检测其参考频率(FREF)和反馈信号(Feedback)之间的相位差和频率差,控制电荷泵 和环路滤波器将相位差转换为控制电压;VCO 根据不同的控制电压产生不同的震荡频率,从而影响 Feedback信号的相位和频率。在 FREF 和 Feedback 信号具有相同的相位和频率之后,就认为 PLL 处于锁相的状态。在反馈路径中插入M计数器会使VCO的震荡频率是FREF信号频率的M倍,FREF信号等于输入时钟(FIN) 除以预缩放计数器(D)。参考频率用以下方程描述:FREF= FIN/D,VCO 输出频率为 FVCO= FIN*M/D,PLL的输出频率为 FOUT=(FIN*M)/(N*O)。 Xilinx 提供了用于实现时钟功能的 IP 核 Clocking Wizard,该 IP 核能够根据用户的时钟需求自动配置器 件内部的 CMT 及时钟资源,以实现用户的时钟需求。在这里我们主要讲解的是如何使用该 IP 核,有关该IP 核的更详细介绍,读者可以参阅 Xilinx 官方的手册文档“PG065,Clocking Wizard v6.0 LogiCORE IP Product Guide”。

实验任务:本节实验任务是使用 Zynq 开发板输出 4 个不同时钟频率或相位的时钟,并在 Vivado 中进行仿真以验 证结果,最后生成比特流文件并将下载到开发板上,使用示波器来测量时钟的频率。

二 程序设计

创建IP核,

例化sys_rst_n低电平有效,模板中为高电平有效,所以取反。输入时钟为sys_clk.

注意:用modlesim进行仿真会出现错误,模板中没有定义ip_clk_wiz。原因是modelsim不能识别xlinx原语。解决办法:使用vivado仿真或者 modelsim和vivado联合仿真。

三 联合仿真

<think>首先,用户的问题是:“我想在FPGA开发中使用Vivado工具调用时钟分频IP的方法 请问vivado 调用时钟分频IP 步骤”。我需要基于提供的引用内容来回答这个问题。 参考的引用内容: - 引用[1]提到在Vivado中调用多个时钟IP来生成多路方波信号。 - 引用[2]详细介绍了PLL IP的配置和使用,包括输入输出设置、仿真等。 - 引用[3]和[4]解释了时钟管理模块(CMT)包括PLLMMCM,用于时钟倍频、分频等。 用户的问题是关于调用时钟分频IP的步骤。在FPGA中,时钟分频通常使用PLLMMCM IP来实现。Vivado提供了这些IP来管理时钟。 关键点: - PLL(锁相环)和MMCM(混合模式时钟管理器)是Xilinx FPGA中的时钟管理模块。 - 它们可以用于分频、倍频、相位调整和占空比调整。 - 步骤包括创建IP、配置输入输出时钟、生成IP,然后在设计中实例化。 我需要结构化回答: 1. 介绍时钟分频IP的基本概念。 2. 详细步骤调用IP。 3. 提供示例代码或仿真参考(如果适用)。 4. 确保使用中文,因为用户要求用中文回答。 5. 在回答末尾添加引用标识。 6. 生成相关问题。 步骤调用时钟分频IP: 1. 打开Vivado项目。 2. 创建或打开设计。 3. 添加IP:在Flow Navigator中,点击IP Catalog,搜索“Clock Wizard”或“PLL”。 4. 配置IP: - 设置输入时钟频率(例如,板载晶振频率)。 - 配置输出时钟:指定分频系数、频率、相位偏移、占空比等。 - 例如,输入50MHz,输出25MHz(分频)。 5. 生成IP:生成输出文件。 6. 实例化IP:在Verilog或VHDL代码中实例化生成的模块。 7. 连接信号:将输入时钟和输出时钟连接到设计中。 8. 仿真和实现:编写测试平台进行仿真,然后合成和实现设计。 基于引用[2]: - 配置输入信号:如板卡晶振50MHz。 - 输出信号设置:如第一路100MHz,第二路25MHz等。 - 取消复位信号(可选)。 - 生成IP后,使用模板实例化。 回答结构: - 简要介绍PLL/MMCM用于时钟分频。 - 分步详细说明调用步骤。 - 提供简单示例。 - 添加引用。 - 生成相关问题。 最后,生成相关问题: 1. 如何优化时钟分频的功耗? 2. PLLMMCM有什么区别? 3. 在FPGA中如何实现多路时钟分频?</think>### Vivado 调用时钟分频 IP 的步骤 在 FPGA 开发中,使用 Vivado 工具调用时钟分频 IP (如 PLLMMCM)是生成自定义时钟信号的关键方法。时钟分频 IP 可以将输入时钟信号分频、倍频或调整相位/占空比,适用于需要多路时钟的场景(如生成方波信号)。以下是详细步骤,基于 Xilinx FPGA 的时钟管理模块(CMT)实现[^2][^3][^4]。 --- ### 步骤详解 1. **打开 Vivado 项目** - 启动 Vivado,创建或打开一个 FPGA 项目(如选择目标器件型号)。 - 确保项目已设置正确的板卡信息(例如,板载晶振频率通常为 50MHz 或 100MHz)。 2. **添加时钟 IP ** - 在左侧 Flow Navigator 面板中,点击 **IP Catalog**(IP 目录)。 - 在搜索栏输入 "Clock Wizard" 或 "PLL"(PLL 是锁相环,MMCM 是混合模式时钟管理器,两者均可用于分频)。 - 选择 **Clocking Wizard** IP 并双击打开配置界面[^2][^4]。 3. **配置输入时钟** - 在 "Clocking Options" 标签页中: - 设置 **Primary clock**(主时钟)频率,与板载晶振一致(例如 50MHz)。 - 取消勾选 "Reset" 选项(如果不需要复位信号),以简化设计[^2]。 - 示例:输入时钟 = 50MHz(假设板卡晶振为 50MHz)。 4. **配置输出时钟(分频设置)** - 切换到 "Output Clocks" 标签页: - 启用需要的输出通道(例如 Output Clock 1、2 等)。 - 设置 **Output Freq**(输出频率):输入分频后的目标频率(如 25MHz 表示 2 分频)。 - 可选调整: - **Phase**(相位偏移):例如 90° 用于生成移相时钟。 - **Duty Cycle**(占空比):例如 20% 用于生成非对称方波。 - 示例: - Output 1: 25MHz(分频,占空比 50%) - Output 2: 12.5MHz(进一步分频)[^2][^4]。 5. **生成 IP ** - 点击 "OK" 确认配置,Vivado 会自动生成 IP 文件。 - 在弹出窗口中,选择生成输出文件的路径(默认在项目目录下)。 - 生成的文件包括: - `.xci`(IP 配置文件) - `.veo`(Verilog 实例化模板) - `.vho`(VHDL 实例化模板)[^2][^3]。 6. **在设计中实例化 IP ** - 在 Verilog 或 VHDL 顶层模块中,使用生成的模板实例化时钟 IP 。 - 示例(Verilog 代码): ```verilog // 实例化 PLL IP (基于引用[2]的模板) pll pll_inst ( .clk (clk_50M), // 输入时钟(50MHz) .clk_out1 (clk_25M), // 输出分频时钟(25MHz) .clk_out2 (clk_12M5), // 输出分频时钟(12.5MHz) .locked (locked) // 锁定信号(指示时钟稳定) ); ``` - 说明: - `clk_50M`:连接到板载晶振输入。 - `clk_25M` 和 `clk_12M5`:分频后的输出时钟。 - `locked`:可监控时钟是否稳定(高电平表示锁定)[^2][^4]。 7. **仿真与验证** - 编写测试平台(Testbench)进行仿真: ```verilog `timescale 1ns / 1ps module pll_tb; reg clk; wire clk_25M; pll pll_inst(.clk(clk), .clk_out1(clk_25M)); initial begin clk = 1'b1; forever #10 clk = ~clk; // 50MHz 输入时钟(周期 20ns) end endmodule ``` - 在 Vivado 中运行仿真,检查输出波形(如分频后的时钟频率和占空比)[^2]。 - 上板测试:将设计合成、实现并生成比特流,下载到 FPGA 开发板,用示波器验证输出时钟。 8. **注意事项** - **资源使用**:一个时钟 IP (如 MMCM)通常支持 4-7 路输出;如需多路时钟,需调用多个 IP [^1]。 - **抖动优化**:MMCMPLL 提供低的抖动和灵活的配置,适合高性能设计[^4]。 - **功耗**:分频(而非倍频)通常降低动态功耗,适合低功耗应用。 --- ### 相关问题 1. 如何优化时钟分频 IP 的功耗和抖动性能? 2. PLLMMCM 在时钟管理中有哪些主要区别? 3. 在 FPGA 中如何实现多路时钟分频(如 30 路方波信号)? [^1]: vivado 多个时钟IP调用。 [^2]: PLL IP的简介及配置过程。 [^3]: vivado 时钟IPMMCM PLL)。 [^4]: Vivado 时钟IP的使用。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值