发布时间:2023-09-06 10:30
上篇咱们仅仅简要的介绍了时钟的用法,并未详细的说明,主要是因为很多时钟用法是针对特定的应用需求,无法一一介绍。本篇咱们将重提上篇的CMT时钟模块,聊一聊它的用法。可以这么说,每个靠谱的FPGA设计里都应该用到CMT模块。
在7系列FPGA里,每一个时钟区域对应一个CMT(clock management tile),CMT由1个MMCM(mixed-mode clockmanager)和1个PLL(phase-locked loop)组成,如图1所示为其输入/输出连接图。
图1:CMT输入/输出连接图
MMCM、PLL的功能可以总结为3点:
(1) 频率综合:将外部输入的固定频率时钟调理成多路不同频率的时钟
(2) 去抖动
(3) 去偏斜
(4) 相位操作
咱们这里强调下,7系列FPGA里的PLL只是MMCM的功能子集。这里咱们先介绍MMCM,如图2所示为其结构框图:
图2:MMCM结构框图
上图咱们一目了然,MMCM有2个时钟输入,使用时任选1路即可,输入时钟经过PFD(phase-frequency detector),CP(charge pump),LF(loop filter)后产生一定幅度的电压输入到VCO,VCO产生频率与输入电压幅度成比例的高频时钟,再除以M倍并反馈到PFD。因此VCO的输出频率是一个稳定的、输入频率M倍的高频时钟,该时钟除以不同的倍数(用户可调)即可输出时钟clkout0~clkout6。另外第0路输出和反馈输出是可以被分数除法,且第0路~第3路提供反相180度的输出,VCO的输出还可以精确调整相位,这是7系列FPGA特有的。
咱们再看PLL的结构,如图3所示:
图3:PLL结构框图
其结构与MMCM大体一致,但没有反相输出、分数倍数的除法、精确的动态相位调整以及CLKOUT6。
这里强调一下:MMCM、PLL均可实现时钟整数倍的频率综合、去抖、去偏斜,但MMCM还可以实现分数倍的频率综合、反相时钟输出以及动态的时钟相位调整。当然,对于咱们一般的应用来说,用不到MMCM的这些高端功能,两者使用没啥区别。
接下来咱们给出xilinx官方推荐的几种MMCM/PLL的使用方法:
图4为最最常用的用法,目前被使用的最多,这种方式设计保留了输入与输出时钟之间的相位关系,时钟性能最高,系统最稳定,但需要使用2个BUFG,BUFG在FPGA里面属于稀缺资源,只有32个,对于某些特别复杂的系统可能就捉襟见肘了。
图4:基于BUFG的相位保持时钟设计
图5是将BUFG换成了BUFH,其系统性能是优于BUFG的,但前一篇咱们提到过,BUFH的使用范围只有左右相邻的时钟区域,对于逻辑资源使用量超过2个时钟区域的应用肯定就不合适了。
图5:基于BUFH的相位保持时钟设计
图6为时钟的内部反馈应用,由于没有引入BUFG反馈的噪声,因此输出时钟的噪声性能更好,但失去了输入与输出时钟之间的相位关系,所有这种用法适用于高精度的频率综合,对相位关系不太关注的应用。
图6:基于内部反馈的低噪声时钟设计
图7为零延迟的时钟应用,这种应用适用于单个外部时钟源供给需要保持相位关系的多个数字系统。
图7:基于零延迟的多系统时钟设计
到此,咱们的7系列FPGA的时钟篇就算是简简单单的介绍完了,有疑惑的同学们欢迎私信我~
咱们下一部分就介绍7系列FPGA的内部逻辑资源吧,所有数字系统的功能实现都得靠它啦~
00后进入职场时,65%的工作已消失:时代抛弃你时,连招呼都不会打一声...
Android 中TextureView和SurfaceView的属性方法及示例说明
Spark3.x入门到精通-阶段三(深度剖析spark处理数据全流程)
NLP经典论文:Attention、Self-Attention、Multi-Head Attention、Transformer 笔记
[深度学习论文笔记]TransUNet: Transformers Make Strong Encoders for Medical Image Segmentation
对象的序列化流ObjectOutputStream和对象的反序列化流ObjectInputStream
Python 项目管理与构建工具:CookieCutter, PyScaffold, PyBuilder, Poetry