FPGA原理与结构——时钟IP核原理学习
一、前言
在之前的文章中,我们介绍了FPGA的时钟结构
FPGA原理与结构——时钟资源https://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的具体结构分析:
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核的具体使用方式。
相关文章:

FPGA原理与结构——时钟IP核原理学习
一、前言 在之前的文章中,我们介绍了FPGA的时钟结构 FPGA原理与结构——时钟资源https://blog.csdn.net/apple_53311083/article/details/132307564?spm1001.2014.3001.5502 在本文中我们将学习xilinx系列的FPGA所提供的时钟IP核,来帮助我们进一…...

创建python环境——Anaconda
在Windows中安装Anaconda和简单使用 一.Anaconda发行概述 Anaconda是一个可以便捷获取和管理包,同时对环境进行统一管理的发行版本,它包含了conda、 Python在内的超过180个科学包及其依赖项。 1.Anaconda发行版本具有以下特点: (1)包含了…...

使用Linux部署Kafka教程
目录 一、部署Zookeeper 1 拉取Zookeeper镜像 2 运行Zookeeper 二、部署Kafka 1 拉取Kafka镜像 2 运行Kafka 三、验证是否部署成功 1 进入到kafka容器中 2 创建topic 生产者 3 生产者发送消息 4 消费者消费消息 四、搭建kafka管理平台 五、SpringBoot整合Kafka 1…...

pyechart笔记:opts.AxisOpts
定制化图表的轴线(x轴和y轴)的样式和设置 0 不设置坐标轴 c1(Bar().add_xaxis([力量,智力,敏捷]).add_yaxis(全能骑士,# 系列名称,用于 tooltip 的显示,legend 的图例筛选。[429,321,296],#系列数据).add_yaxis(猴子,[352,236,4…...
深度思考rpc框架面经之五:rpc熔断限流、rpc复用连接机制
11 RPC框架如何实现限流和熔断 推荐文章:RPC实现原理之核心技术-限流熔断 11.1 为什么Dubbo要做服务的限流?(根本原因是服务端进行自我保护) 限流是一种常见的系统保护手段。在分布式系统和微服务架构中,一个接口的过度使用可能会导致资源…...
Go 数组
数组用于在单个变量中存储相同类型的多个值,而不是为每个值声明单独的变量。 声明数组 在Go中,有两种声明数组的方式: 使用var关键字: 语法 var array_name [length]datatype{values} // 这里定义了长度 或者 var array_n…...

04架构管理之分支管理实践-一种git分支管理最佳实践
专栏说明:针对于企业的架构管理岗位,分享架构管理岗位的职责,工作内容,指导架构师如何完成架构管理工作,完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作,专栏名称:架构管理…...

D.OASIS City 和 Warrix 在The Sandbox 庆祝 Rise of the 10th Legend十周年
D.OASIS 首次展示了变革性娱乐 D.OASIS City,正如它与 WARRIX 一起承诺的那样。WARRIX 是获得泰国国家队球衣生产授权的标志性运动服装品牌。 这款激动人心的游戏冒险游戏于今天推出,让用户能够投入 D.OASIS City x WARRIX:Rise of the 10th…...

Git基本操作(Idea版)
第一次发布项目(本地->远程) 方式一 通过push的方式推送本地库到远程库(远程已创建好仓库) 这种方式需要提前创建好仓库。 右键点击项目,可以将当前分支的内容 push 到 GitHub 的远程仓库中。 注意:…...

NSS [羊城杯 2020]easyser
NSS [羊城杯 2020]easyser 开题。很容易让人觉得环境坏了。 不要慌,无从下手时。看源码、扫目录、抓包。一套操作下来,发现几个可以下手的路由。 /index.php /robots.txt 访问 /star1.php,一说到百度,就猜测是否存在SSRF。 源码中…...

理解底层— —Golang的log库,二开实现自定义Logger
理解底层— —Golang的log库,实现自定义Logger 1 分析实现思路 基于golang中自带的log库实现:对日志实现设置日志级别,每天生成一个文件,同时添加上前缀以及展示文件名等 日志级别,通过添加prefix:[INFO]、…...

RabbitMQ---Spring AMQP
Spring AMQP 1. 简介 Spring有很多不同的项目,其中就有对AMQP的支持: Spring AMQP的页面:http://spring.io/projects/spring-amqp 注意这里一段描述: Spring-amqp是对AMQP协议的抽象实现,而spring-rabbit 是对协…...

C语言练习题解析:挑战与突破,开启编程新篇章!(2)
💓博客主页:江池俊的博客⏩收录专栏:C语言刷题专栏👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论📝收藏⭐ 文…...
sqlite3 加密访问
关于sqlite3 加密 一、相关加密用到的sqlcipher 1.1 sqlcipher 是一个数据库加密的开源库 sqlcipher开源地址 我这边是使用的docker镜像,镜像地址: https://hub.docker.com/r/pallocchi/sqlcipher 加密格式 docker run -v <workdir>:/sqlcip…...
clickhouse 系列1:clickhouse v21.7.5.29 源码编译
1.gcc10安装 安装依赖 yum update yum install -y gcc gcc-c++ yum install -y bzip2 下载gcc 源码包并解压 wget -P /data/base https://mirrors.aliyun.com/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz cd /data/base && tar -xzvf /data/base/gcc-...

servlet初体验之环境搭建!!!
我们需要用到tomcat服务器,咩有下载的小伙伴看过来:如何正确下载tomcat???_明天更新的博客-CSDN博客 1. 创建普通的Java项目,并在项目中创建libs目录存放第三方的jar包。 建立普通项目 创建libs目录存放第三…...
宁芝 NIZ 键盘开机需要重新插拔 USB 线才能使用
宁芝 NIZ 键盘开机需要重新插拔 USB 线才能使用 问题描述 宁芝 NIZ 键盘开机后无法识别到键盘,需要重新插拔 USB 线才能使用。 解决方法 按住 Fn BackSpaceE 键 5 秒,键盘会切换模式, 状态灯闪 1 次为 USB 接口;状态灯闪 2 次为 PS / 2 …...
R编程教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R语言的核心是解释计算机语言,其允许分支和循环以及使用函数的模块化编程。 R语言允许与以Cÿ…...
[CMake教程] CMake列表 - list
目录 零、简介一、Reading二、Search三、Modification四、Ordering 零、简介 列表在CMake中大量使用。初始化列表语法如下: set(myList a b c) # Creates the list "a;b;c"归根结底,列表只是一个由分号分隔列表项的单个字符串,这…...

报错 - net::ERR_ABORTED 500 (Internal Server Error)
报错:net::ERR_ABORTED 500 (Internal Server Error) 根据提示找到对应文件 解决:检查代码,根据高亮颜色判断,发现箭头函数漏了一个>。 报错:Uncaught TypeError: Assignment to constant variable. 原因&#x…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...

uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...

相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...