MMCM/PLL学习

一、时钟原语介绍

  目前,大型设计一般推荐使用同步时序电路。同步时序电路基于时钟触发沿设计,对时钟的周期、占空比、延时和抖动提出了更高的要求。为了满足同步时序设计的要求,一般在FPGA设计中采用全局时钟资源驱动设计的主时钟,以达到最低的时钟抖动和延迟。 FPGA 全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元(CLB)、I/O单元(IOB)和选择性块RAM(Block Select RAM)的时延和抖动都为最小。为了适应复杂设计的需要,Xilinx的FPGA中集成的专用时钟资源与数字延迟锁相环(DLL)的数目不断增加。
  常用的与全局时钟资源相关的Xilinx器件原语包括:IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、BUFGMUX、BUFGDLL和DCM等。

1.1 IBUFG

  输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错。
  IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVTTL、PCI、PCIX和SSTL等多种格式的IO标准。

1.2 IBUFGDS (Differential Signaling Input Buffer with Selectable I/O Interface)

  差分输入时钟缓冲器,即IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。
  IBUFGDS支持BLVDS、LVDSSEXT、LDT、LVDS、LVPECL和ULVDS等多种格式的IO标准。

1.3 BUFG

  全局缓冲,其输入为IBUFG的输出。BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。

1.4 BUFGCE

  带有时钟使能端的全局缓冲,包括一个输入端I、一个使能端CE、一个输出端O。仅当使能端CE有效(高电平)时,BUFGCE才会有输出。

1.5 BUFGP

  等价于IBUFG加上BUFG。

1.6 BUFGDLL

  全局缓冲延迟锁相环,相当于BUFG和DLL的结合。用于完成全局时钟的同步和驱动等功能,现在逐渐被DCM代替。

1.6 DCM

  数字时钟管理单元。用于完成时钟的同步、移相、分频、倍频、去抖动等。为了达到最小的延迟和抖动,几乎所有的DCM应用都需要使用全局缓冲资源。

二、MMCM/PLL介绍

  在7系列FPGA中,每个时钟区域对应一个CMT(clock management tile),CMT由一个MMCM(mixed-mode clock manager)和一个PLL(phase-locked loop)组成。
  PLL的英文全称为Phase-Locked Loop,即锁相环,是一种控制反馈电路。PLL对时钟网络进行系统级别的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能。
  MMCM是混合模式时钟管理器,相当于能够进行精准相移的PLL。(PLL为模拟电路,动态调相位数字电路)。
  总结:MMCM相对PLL的优势就是相位可动态调整,但PLL占用的面积更小。
  MMCM/PLL的参考时钟输入可以是IBUFG(CC)即具有时钟能力的IO输入、区域时钟BUFR、全局时钟BUFG、GT收发器输出时钟、行时钟BUFH以及本地布线(不推荐使用本地布线来驱动时钟资源)。绝大多数情况下,MMCM/PLL的参考时钟输入为IBUFG(CC)即具有时钟输入能力的IO输入。

三、vivado的PLL IP核使用

3.1 IP核创建

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.2 例化后的模板

//----------------------------------------------------------------------------
// Input Clock   Freq (MHz)    Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary__________50.000____________0.010

// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.

//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG

  clk_wiz_0 instance_name
   (
    // Clock out ports
    .clk_out1(clk_out1),     // output clk_out1
    .clk_out2(clk_out2),     // output clk_out2
    .clk_out3(clk_out3),     // output clk_out3
    .clk_out4(clk_out4),     // output clk_out4
    // Status and control signals
    .reset(reset), // input reset
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(clk_in1));      // input clk_in1
// INST_TAG_END ------ End INSTANTIATION Template ---------

3.3 顶层文件和测试文件

module ip_clk_wiz(
    input       sys_clk,
    input       sys_rst_n,

    output      clk_100m,
    output      clk_100m_180deg,
    output      clk_50m,
    output      clk_25m
    );

wire    locked;

//MCMM/PLL IP核例化
clk_wiz_0 u0_pll
(
// Clock out ports
.clk_out1(clk_100m),     // output clk_out1
.clk_out2(clk_100m_180deg),     // output clk_out2
.clk_out3(clk_50m),      // output clk_out3
.clk_out4(clk_25m),      // output clk_out4
// Status and control signals
.reset(~sys_rst_n),     // input reset  IP核默认是高电平复位    ——————————————|_________________
.locked(locked),        // output locked  锁定时,locked信号就变为高电平,表示输出的时钟是可用的
// Clock in ports
.clk_in1(sys_clk));     // input clk_in1


endmodule

`timescale 1ns / 1ps

module tb_ip_clk_wiz();

//reg define
reg  sys_clk;
reg  sys_rst_n;

//wire define
wire  clk_100m;
wire  clk_100m_180deg;
wire  clk_50m;
wire  clk_25m;

initial begin
    sys_clk = 1'b0;
    sys_rst_n = 1'b0;

    #200 sys_rst_n = 1'b1;
end

always #10 sys_clk = ~sys_clk;

ip_clk_wiz u1(
    .sys_clk        (sys_clk),
    .sys_rst_n      (sys_rst_n),

    .clk_100m           (clk_100m),
    .clk_100m_180deg    (clk_100m_180deg),
    .clk_50m            (clk_50m),
    .clk_25m            (clk_25m)
    );

endmodule

3.4 仿真图

在这里插入图片描述
  说明:IP核的reset接口为高电平有效,locked接口为高电平有效。其他模块调用PLL模块时,需要判定locked信号是否为高电平。

四、参考博客及文献

博客:
时钟相关原语学习记录
PLL与MMCM区别
Vivado MMCM和PLL的区别 新人不想看,老人用不到系列.
文档:
启明星ZYNQ之FPGA开发指南_V1.2

  • 3
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Vivado中,MMCM(Mixed-Mode Clock Manager)和PLL(Phase-Locked Loop)是用来生成、分频和调整时钟信号的重要IP核。MMCMPLL的超集,具有比PLL更强大的相移功能,主要用于驱动器件逻辑的时钟。而PLL主要用于为内存接口生成所需的时钟信号,但也可以用作额外的时钟资源,与器件逻辑连接。 在Vivado中,使用Clocking Wizard IP核来配置MMCMPLL的参数。在"MMCM Setting"选项卡中,Vivado会根据用户输入的时钟需求自动配置参数,并进行最优化的配置。在绝大多数情况下,这些参数都不需要用户进行更改,因此建议保持默认设置。因此,根据具体的应用需求,可以选择使用MMCMPLL来生成和管理时钟信号。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vivado18.3-IP核-MMCM/PLL 学习笔记](https://blog.csdn.net/weixin_42151221/article/details/103351855)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [时钟IP配置中PLLMMCM的区别](https://blog.csdn.net/qq_40528849/article/details/120819873)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值