FPGA原理与结构——时钟IP核原理学习

2023-11-09

一、前言

        在之前的文章中,我们介绍了FPGA的时钟结构

FPGA原理与结构——时钟资源icon-default.png?t=N7T8https://blog.csdn.net/apple_53311083/article/details/132307564?spm=1001.2014.3001.5502        在本文中我们将学习xilinx系列的FPGA所提供的时钟IP核,来帮助我们进一步理解时钟的原理,从而快速实现我们的设计需求。

二、时钟IP核

1、简介

        我们本次讨论的对象是Xilinx的 Clocking Wizard v6.0 IP核 。时钟向导(Clocking Wizard)帮助我们实现自己需要的输出时钟频率,相位和占空比,它是通过一个混合模式的时钟管理器(MMCM)(E2/E3/E4)或锁相环路(PLL)(E2/E3/E4)原语来实现的。它还有助于验证仿真中输出产生的时钟频率,提供了一个可在硬件上进行测试的可合成的实例设计。它还支持扩频特性,这有助于减少电磁干扰。图2-1显示了时钟向导的方框图:

2、性能

(1)最大频率:不同的器件之间有所不同,具体的请查阅手册

(2)功率:最小化功率特性最小化原件所需的功率,但可能会牺牲频率、相位偏移或占空比精度。

(3)输出:可以最多提供7个不同的时钟输出。

3、IP核结构

        时钟向导会生成源代码HDL,以实现时钟网络。生成的时钟网络通常包括一个时钟原语(MMCM(E2/E3)_ADV或PLL(E2/E3)_ADV)和一些附加电路,其中通常包括缓冲器和时钟引脚。网络分为分段,如图3-12所示。下面的部分将描述这些部分的详细信息。

三、MMCM和PLL

        在简单介绍了时钟这个IP核后,我们开始今天的重点,在之前的内容中,我们一直提到时钟IP核是通过例化MMCM和PLL这两个原语来实现的,这究竟是什么,其工作原理是怎么样的,接下来我们来一探究竟。

1、FPGA的时钟资源

        在之前的文章中,我们有介绍过7系列的FPGA中,每个时钟区域对应一个CMT(clock management tile),CMT由一个MMCM(mixed-mode clock manager)和一个PLL(phase-locked loop)组成。
  PLL的英文全称为Phase-Locked Loop,即锁相环,是一种控制反馈电路。PLL对时钟网络进行系统级别的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能。锁相环作为一种反馈控制电路,其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位。因为锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。

  MMCM是混合模式时钟管理器,相当于能够进行精准相移的PLL。(PLL为模拟电路,动态调相位数字电路)。7系列fpga中的PLL是MMCM功能的一个子集,它基于MMCM,而不一定基于以前的PLL设计。
  总结:MMCM相对PLL的优势就是相位可动态调整,但PLL占用的面积更小
  MMCM/PLL的参考时钟输入可以是IBUFG(CC)即具有时钟能力的IO输入、区域时钟BUFR、全局时钟BUFG、GT收发器输出时钟、行时钟BUFH以及本地布线(不推荐使用本地布线来驱动时钟资源)。绝大多数情况下,MMCM/PLL的参考时钟输入为IBUFG(CC)即具有时钟输入能力的IO输入。

        所以我们进行一个简单的总结,在FPGA中,PLL和MMCM是时钟管理单元CMT的组成部分,其主要功能可以概括到以下三点:(1)作为一个频率范围很广的频率合成器;(2)可作为外部或内部时钟的抖动滤波器;(3)去时钟倾斜

2、结构对比

        输入多路复用器从IBUFG、BUFG、BUFR、BUFH、GTs(仅限CLKIN)或互连(不推荐)中选择参考和反馈时钟。每个时钟输入都有一个可编程的计数器分频器(D)每个时钟输入都有一个可编程的计数器分频器(D)。

        下面给出了MMCM和PLL的具体结构分析:

        其中 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用于产生与两个时钟之间的相位和频率成比例的信号。该信号驱动电荷泵(CP)和回路滤波器(LF)产生一个基于VCO的参考电压。PFD向电荷泵和循环滤波器产生上或向下信号,以确定VCO应以更高或更低的频率工作。当VCO工作频率过高时,PFD激活一个下降信号,导致控制电压降低,降低VCO工作频率。当VCO在过低的频率下工作时,一个上升信号将增加电压。VCO产生8个输出相位和1个可变相位,用于精细相位转移。
        在工作时,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)。
        除了整数除法输出计数器外,MMCM还为CLKOUT0和CLKFBOUT添加了一个分数计数器。
        Xilinx 提供了用于实现时钟功能的 IP 核 Clocking Wizard,该 IP 核能够根据用户的时钟需求自动配置器件内部的 CMT 及时钟资源,以实现用户的时钟需求。

 3、MMCM和PLL的使用示例

        本节中的示例显示了MMCM,但是,它们同样可以应用于PLL。使用MMCM和/或PLL有几种设计方法。ISE或Vivado设计工具中的时钟向导可以帮助生成各种MMCM和PLL参数。此外,MMCM还可以手动实例化为一个组件。MMCM也可以与IP核合并。IP核将包含和管理MMCM。

3.1 Clock Network Deskew(时钟网络去偏斜)

        MMCM的主要用途之一是对时钟网络的去歪斜。一个CLKOUT用来驱动逻辑资源,而另一个反馈时钟用来精确控制输入和输出时钟之间的相位关系,右边的波形图展示了输入和输出需要相位对齐时的情况(图中的输入2和输出5是对齐的)。反馈计数器用于控制输入时钟和输出时钟之间的精确相位关系(例如:90°的相移)。下图中的配置是最灵活的,但它需要两个全局时钟网络(BUFG)。

        我们也可以通过BUFH来实现,原理是相同的

3.2 MMCM with Internal Feedback(MMCM内部反馈)

        当MMCM被用作频率合成和抖动过滤,并且对输出和输入的相位没有要求时,可以用内部信号作为反馈信号。此时MMCM的性能会更好,因为反馈时钟没有经过其他电源供电的元件,因此,也就没有其他电源的噪声。但是从CLKIN和BUFG的噪声还是照常。

 3.3 Zero Delay Buffer(零缓冲Buffer)

           MMCM也能被用来生成一个无延迟的buffer clcok, 如下图。无延迟的buffer可以把一个时钟信号扇出给多个目的地,并且信号之间的偏斜很小。它们之间有一个低偏斜的应用程序。此配置如图3-14所示。在这里,反馈信号驱动出芯片和板跟踪反馈被设计为将跟踪与外部组件相匹配。在这种配置中,假设时钟边缘在FPGA的输入和外部组件的输入处对齐。CLKIN和CLKFBIN的输入时钟缓冲区必须在同一bank中。

四、总结

        在本文中我们对于xilinx系列的FPGA所提供的时钟IP核:Clocking Wizard v6.0 IP核进行了简单的介绍,然后对于FPGA中时钟的CMT结构进行了解读,介绍了MMCM和PLL的作用与区别,最后介绍了一些MMCM和PLL的使用示例。理解IP核的原理可以帮助我们更好地使用IP核,在接下来的文章中,我们也将介绍这个IP核的具体使用方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA原理与结构——时钟IP核原理学习 的相关文章

  • CUDA异步并发之CUDA流详解

    CUDA中得异步并发 CUDA 将以下操作公开为可以彼此同时操作的独立任务 在主机上计算 设备上的计算 从主机到设备的内存传输 从设备到主机的内存传输 在给定设备的内存中进行内存传输 设备之间的内存传输 这些操作之间实现的并发级别将取决于设
  • 【数字IC】从零开始的Verilog SPI设计

    从零开始的Verilog SPI协议设计 一 写在前面 1 1 协议标准 1 2 数字IC组件代码 1 3 设计要求 1 4 其他协议解读 1 4 1 UART协议 1 4 2 SPI协议 1 4 3 I2C协议 1 4 4 AXI协议 二
  • Lattice Diamond安装

    1 下载 到Lattice官网 http www latticesemi com 注册一个lattice的账号后就可以去下载Diamond 登陆后如下图 根据自己系统情况选择对应的版本 我用的是32位win8 Diamond软件安装包和La
  • 从零开始zynq linux AXI DMA传输

    本文从0开始叙述过程 使用的工具为vivado2016 4 sdk也是2016 4 准备工作 首先下载如下的目标文件 1 下载xilinx官方的bootloader文件 git clone https github com Xilinx u
  • 使用七牛云进行文件上传

    目录 一 七牛云入门测试 1 注册七牛云账号 完成后选择对象存储 2 在里面创建空间 一个空间相当于一个文件夹 就是将对象上传到的地方 3 查看个人秘钥 注册完成账号后 会有一个秘钥 上传文件的时候进行授权和认证 4 文件上传测试 二 封装
  • 【FPGA】通俗理解从VGA显示到HDMI显示

    注 大部分参考内容来自 征途Pro FPGA Verilog开发实战指南 基于Altera EP4CE10 2021 7 10 上 贴个下载地址 野火FPGA Altera EP4CE10征途开发板 核心板 野火产品资料下载中心 文档 hd
  • FPGA实现VGA显示图片

    利用FPGA在带有VGA接口的液晶显示器上显示图片 电路原理图 端口说明 VGA R2 VGAB0的8个端口位VGA的RGB数据位 VGA HS为行同步信号 VGA VS为场同步信号 以分辨率为640x480为例 刷新速率为60Hz 每幅图
  • Spartan-3E 上的随机数生成

    我需要在 Spartan 3E FPGA 上为我的遗传算法生成伪随机数 并且我想在 verilog 中实现它 您能给我任何关于此的指示吗 当然 Adam 的随机生成器是不可合成的 您必须显式创建一个LFSR 以下示例可能会有所帮助 它是一个
  • 64 位 ALU 输出在 TestBench 波上显示高阻抗

    我必须制作一个 64 位 ALU 它接受 A 和 B 64 位输入 进位输入输入并输出 64 位结果以及 1 位进位输出 还有一个 5 位功能选择 FS 其中 FS 0 控制 B 是否反转 使用 2to1 多路复用器 F 1 对 A 执行相
  • 【FMC141】基于VITA57.4标准的4通道2.8GSPS 16位DA播放子卡(2片DAC39J84)

    FMC141是一款基于VITA57 4标准的4通道2 8GSPS 2 5GSPS 1 6GSPS采样率16位DA播放FMC子卡 该板卡为FMC 标准 符合VITA57 4与VITA57 1规范 16通道的JESD204B接口通过FMC 连接
  • VHDL——连接开关和LED

    我有 Xilinx Spartan6 和下一个 VHDL 代码 library ieee use ieee std logic 1164 all use ieee numeric std all entity Switches Leds i
  • 【ZYNQ学习】PL第一课

    这节课讲什么 这节课的名字本来是想写为LED 但这一课里除了LED也有按键 又想换为GPIO控制 但关于PL的GPIO控制 不应该这么草率和简单 而且这一课有很多和ZYNQ或者PL关联性不强的东西要说 所以我写了删删了写改了好几遍 终于定为
  • 时序约束理解

    异步配置信息 跨时钟域 配置信息一般set max delay按照3delay来约束 2 异步回读 rst clear信号 设置set false path 放松时序约束要求 不应分析设计中的逻辑路径 因为不关心点到点时序要求
  • [Verilog] Verilog 基本格式和语法

    主页 元存储博客 全文 3000 字 文章目录 1 声明格式 1 1 模块声明 1 2 输入输出声明 1 3 内部信号声明 1 4 内部逻辑声明
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • 模拟器和合成器之间初始化状态机的差异

    我的问题是关于合成状态机中使用的第一个状态 我正在使用莱迪思 iCE40 FPGA 用于仿真的 EDA Playground 和用于综合的莱迪思 Diamond Programmer 在下面的示例中 我生成一系列信号 该示例仅显示引用状态机
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步
  • 如何在Altera Quartus中生成.rbf文件?

    什么是 rbf 文件以及如何在 Windows 上从 Quartus 输出文件 sof 生成它们 An RBF is a 原始二进制文件例如 它代表原始数据 这些数据将被加载到闪存中 以便在上电时初始化 FPGA A SOF is an S
  • 无符号和 std_logic_vector 之间的区别

    谁能告诉我以下书面陈述之间的区别 signal A unsigned 3 downto 0 signal B std logic vector 3 downto 0 Both std logic vector and unsigned ar

随机推荐

  • vant ui Swipe pc端滑动失效

    这里我使用了vant的Swipe组件 由于vant是移动端的组件库 对pc端会有兼容性问题 例如Swipe 移动端是 touch 该组件做了相应的监听 而PC端是 mouse 没有做对应的监听 因此在pc端无法用鼠标拖动图片 1 安装插件
  • redis BITFIELD详解

    支持子命令和整型 本命令会把Redis字符串当作位数组 并能对变长位宽和任意未字节对齐的指定整型位域进行寻址 下面是已支持的命令列表 GET
  • MYSQL深入学习(一)

    1 mysql 体系结构 连接池组件 管理服务和工具组件 sql接口组件 查询分析器组件 优化器组件 查询缓存组件 插件式存储引擎 mysql的特点 可以根据需求 动态的配置存储引擎 物理文件
  • idea控制台输出中文乱码解决

    解决Intellij IDEA控制台logger info system out println等中文乱码问题 一 编写环境乱码 二 控制台打印乱码 又包含3种 当我们使用Intellij IDEA开发时 首当其冲就是中文乱码问题 造成中文
  • unity物体范围内随机生成

    这个脚本需要挂载到需要随机生成的物体上 但不能是空物体 using System Collections using System Collections Generic using UnityEngine public class Ran
  • CDN回源原理和CDN多级缓存

    一 CDN概念 CDN的全称是Content Delivery Network 即内容分发网络 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节 使内容传输的更快 更稳定 CDN是通过在网络各处放置节点服务器所构成的
  • STL案例——评委打分案例

    有5名选手 选手ABCDE 10个评委分别对每一名选手打分 去除最高分 去除评委中最低分 取消平均分 1 创建五名选手 放到vector中 2 遍历vector容器 取出每一个选手 执行for循环 可以把10个评分打分存到deque容器中
  • Rxjs在Angular中的简单应用

    Angular中集成了Rxjs库 Rxjs是javascript的一个响应式编程库 它提供了很多api 可以很方便的处理和操作应用中的数据 我们在自己的angular项目中新建一个组件 ng generate component rx bu
  • Java多线程两种实现

    在java中实现多线程的方式有两种 一种是继承Thread类 另一个是实现Runnable接口 对于两种实现 各有优缺点 接下来进行对比总结一下 这两种方法 都可以实现多线程 以下为两种实现的写法 继承Thread类的方式 package
  • 五、语言特性之<=default,=delete、using、noexcept、override、final、以及和const对比>

    目录 一 default delete 1 首先我们要回顾一下编译器提供的默认函数 2 何时需要自定义big three 构造函数 拷贝构造 拷贝赋值 big five 新增移动构造函数 移动赋值函数 3 default delete关键字
  • Yearning做SQL审核

    系统环境 Centos7一 Inception安装 1 安装相关依赖包 yum install bison ncurses libs libncurses5 devel ncurses devel wget git cmake openss
  • C++模板特例化

    模板是用来写一些独立化特定类型的代码 但是对于有些类型 在处理时 细节上却有所差别 常见的如char 如 现在你打算写一个栈 可以用于任何数据类型 那你肯定首先想到的就是模板啦 template
  • LeetCode-797. All Paths From Source to Target

    Given a directed acyclic graph of N nodes Find all possible paths from node 0 to node N 1 and return them in any order T
  • 【满分】【华为OD机试真题2023 JAVA&JS】知识图谱新词挖掘1

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 知识图谱新词挖掘1 知识点滑窗 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 小华负责公司知识图谱产品 现在要通过新词挖掘完善知识图谱 新词挖掘 给出一个待挖掘
  • C++ Primer 学习笔记 第十五章 面向对象程序设计

    面向对象程序设计 OOP 基于三个概念 数据抽象 只暴露类的接口 而如何实现的是不透明的 即类的接口和实现分离 继承 能实现相似的类型 动态绑定 忽略相似类型的区别 以统一方式使用它 继承关系联系在一起的类构成层次关系 在最低层有一个基类
  • 从海明校验码深入了解

    首先 海明校验码的学习看视频没看明白 看了博客有所感悟 1 海明校验码不是万能的 根据信息论也知道不可能 写在海明校验码之前 海明校验码的原理和我之前遇到的一道题目很像 10只老鼠试验1024瓶药是否有毒 有1024瓶药 其中已知有1瓶且只
  • java事务

    转载http blog csdn net foart archive 2009 06 11 4260864 aspx 一 什么是Java事务 通常的观念认为 事务仅与数据库相关 事务必须服从ISO IEC所制定的ACID原则 ACID是 原
  • SQL Server中使用convert转化长日期为短日期

    一般存入数据库中的时间格式为yyyy mm ddhh mm ss 如果要转换为yyyy mm dd 短日期格式 可以使用convert函数 下面是sqlserver帮助中关于convert函数的声明 使用 CONVERT CONVERT d
  • 保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识

    1 简介 有的小伙伴或者童鞋们可能会好奇地问 不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了 这是因为你对HTTP协议越了解 你就能越掌握Fiddler的使用方法 反过来你越使用Fiddler 就越能帮助你了解HTTP协
  • FPGA原理与结构——时钟IP核原理学习

    一 前言 在之前的文章中 我们介绍了FPGA的时钟结构 FPGA原理与结构 时钟资源https blog csdn net apple 53311083 article details 132307564 spm 1001 2014 300