本文节选UG472的第三章,进行整理翻译,用于介绍7系列 FPGA的时钟管理模块的内部结构以及相关用法。本文介绍的CMT在FPGA开发设计中是比较重要的一个内容,因此文章篇幅也相对较长。
在 7 系列 FPGA 中,时钟管理块 (CMT) 包括一个混合模式时钟管理器 (MMCM) 和一个锁相环 (PLL)。 PLL 包含 MMCM 功能的子集。 7 系列 FPGA CMT 的核心是类似于 Virtex-5 和 Virtex-6 FPGA 的架构,具有增强的功能和能力。 CMT 主干可用于链接 CMT 时钟功能; 但是,放置、距离和连接资源存在限制。
CMT 图(图 3-1)显示了各种时钟输入源和 MMCM/PLL 之间连接的高级视图。 在 7 系列 FPGA 中,时钟输入连接允许多种资源为 MMCM/PLL 提供参考时钟。 输出计数器(分频器)的数量为 8,其中一些能够驱动反向时钟信号(180° 相移)。 为了向后兼容 DCM,可以选择九个独立的输出将 DCM 输出直接映射到 MMCM。 7 系列 FPGA MMCM 在任一方向具有无限精细相移能力,可用于动态相移模式。 精细相移的分辨率取决于 VCO 频率。 CLKFBOUT 和 CLKOUT0 以 1/8 (0.125) 为增量的小数分频功能可用于支持更大的时钟频率合成能力。 7 系列 FPGA 为 MMCM 添加了扩频功能。 如果不使用 MMCM 扩频功能,外部输入时钟上的扩频将不会被过滤,因此不会被传递到输出时钟。
7 系列器件包含多达 24 个 CMT 块。 MMCM 和 PLL 用作各种频率的频率合成器,用作外部或内部时钟的抖动滤波器,以及去歪斜时钟。
7 系列 FPGA 中的 PLL 是 MMCM 功能的子集,它基于 MMCM,不一定基于以前的 PLL 设计。
MMCM 支持的附加功能包括:
输入多路复用器从 IBUFG、BUFG、BUFR、BUFH、GT(仅限 CLKIN)或互连(不推荐)中选择参考和反馈时钟。 每个时钟输入都有一个可编程计数器分频器 (D)。 相位频率检测器 (PFD) 比较输入(参考)时钟和反馈时钟的上升沿的相位和频率。 如果维持最小的高/低脉冲,则占空比是辅助的。
PFD 用于生成与两个时钟之间的相位和频率成比例的信号。 该信号驱动电荷泵 (CP) 和环路滤波器 (LF) 以生成VCO的参考电压。 PFD 向电荷泵和环路滤波器产生一个向上或向下信号,以确定 VCO 是应该在更高频率还是更低频率下工作。 当 VCO 以过高的频率工作时,PFD 会激活一个下降信号,导致控制电压降低,从而降低 VCO 的工作频率。 当 VCO 以过低的频率工作时,向上信号会增加电压。 VCO 产生八个输出相位和一个可变相位,用于精细移相。 可以选择每个输出相位作为输出计数器的参考时钟(图 3-2 和图 3-3)。 每个计数器都可以针对给定的客户设计进行独立编程。
还提供了一个特殊的计数器 M。 该计数器控制 MMCM 和 PLL 的反馈时钟,允许进行广泛的频率合成。除了整数除法输出计数器之外,MMCM 还为 CLKOUT0 和 CLKFBOUT 添加了一个小数计数器。
下图显示了两个 7 系列 FPGA MMCM 原语 MMCME2_BASE 和 MMCME2_ADV。
7 系列 FPGA PLL 原语 PLLE2_BASE 和 PLLE2_ADV 如下图所示。
MMCME2_BASE 原语提供对独立 MMCM 最常用功能的访问。 时钟去偏斜、频率合成、粗略相移和占空比编程可用于 MMCME2_BASE。 端口列于下表中。
Description | Ports |
---|---|
Clock Input | CLKIN1, CLKFBIN |
Control Inputs | RST |
Clock Output | CLKOUT0 to CLKOUT6, CLKOUT0B to CLKOUT3B, CLKFBOUT, and CLKFBOUTB |
Status and Data Outputs | LOCKED |
Power Control | PWRDWN |
PLLE2_BASE 原语提供对独立 PLL 最常用功能的访问。 时钟去偏斜、频率合成、粗略相移和占空比编程可用于 PLLE2_BASE。 端口列于下表中。
Description | Port |
---|---|
Clock Input | CLKIN1, CLKFBIN |
Control Inputs | RST |
Clock Output | CLKOUT0 to CLKOUT5, CLKFBOUT |
Status and Data Outputs | LOCKED |
MMCME2_ADV 原语提供对所有 MMCME2_BASE 功能以及用于时钟切换的附加端口、对动态重配置端口 (DRP) 以及动态精细相移的访问。 端口列于下表中。
Description | Ports |
---|---|
Clock Input | CLKIN1, CLKIN2, CLKFBIN, DCLK, PSCLK |
Control and Data Input | RST, CLKINSEL, DWE, DEN, DADDR, DI, PSINCDEC, PSEN |
Clock Output | CLKOUT0 to CLKOUT6, CLKOUT0B to CLKOUT3B, CLKFBOUT, and CLKFBOUTB |
Status and Data Output | LOCKED, DO, DRDY, PSDONE, CLKINSTOPPED, CLKFBSTOPPED |
Power Control | PWRDWN |
PLLE2_ADV 原语提供对所有 PLLE2_BASE 功能以及用于时钟切换的附加端口的访问,以及对动态重配置端口的访问。 端口列于下表中。
Description | Port |
---|---|
Clock Input | CLKIN1, CLKIN2, CLKFBIN, DCLK |
Control and Data Input | RST, CLKINSEL, DWE, DEN, DADDR, DI |
Clock Output | CLKOUT0 to CLKOUT5, and CLKFBOUT |
Status and Data Output | LOCKED, DO, DRDY |
Power Control | PWRDWN |
7 系列 FPGA MMCM 和 PLL 是混合信号模块,旨在支持时钟网络去偏斜、频率合成和抖动减少。 下面将更详细地讨论这三种操作模式。 压控振荡器 (VCO) 的工作频率可以通过以下关系确定:
F V C O = F C L K I N × M D F_{VCO} = F_{CLKIN} × \frac MD FVCO=FCLKIN×DM
F O U T = F C L K I N × M D × O 或 者 F V C O O F_{OUT} = F_{CLKIN} × \frac M{D×O} 或者 \frac {F_{VCO}} {O} FOUT=FCLKIN×D×OM 或者 FVCO O
其中 M、D 和 O 计数器如图 3-2 所示。 M 的值对应于 CLKFBOUT_MULT_F 设置,D 的值对应于 DIVCLK_DIVIDE,O 对应于 CLKOUT_DIVIDE。
七个“O”计数器可以独立编程。 例如,可以对 O0 进行编程以进行二分频,而对 O1 进行编程以进行三分频。 唯一的限制是所有输出计数器的 VCO 工作频率必须相同,因为单个 VCO 驱动所有计数器。
在许多情况下,设计人员不希望在其 I/O 时序预算中引起时钟网络延迟,因此他们使用 MMCM/PLL 来补偿时钟网络延迟。 7 系列 FPGA 支持此功能。 与参考时钟 CLKIN 频率匹配的时钟输出(始终为 CLKFBOUT)连接到器件同一半的 BUFG,并反馈到 MMCM/PLL 的 CLKFBIN 反馈引脚。 剩余的输出仍可用于将时钟分频以获取额外的合成频率。
在这种情况下,所有输出时钟都与输入参考时钟具有定义的相位关系。MMCM 或 PLL 的 CLKOUT0–CLKOUT3 可用于级联到其他 MMCM/PLL。 但是,级联 MMCM/PLL 之间的输出时钟存在相位偏移。
MMCM 和 PLL 也可用于独立的频率合成。 在此应用中,MMCM/PLL 不用于对时钟网络进行去偏移,而是为其他模块生成输出时钟频率。 在这种模式下,MMCM/PLL 反馈路径是内部的,这将所有路由保持在本地,从而最大限度地减少抖动。 下图显示了配置为频率合成器的 MMCM。 在本例中,外部 33 MHz 参考时钟可用。
参考时钟可以是晶体振荡器或另一个 MMCM 的输出。 将 M 计数器设置为 32 会使 VCO 以 1056 MHz (33 MHz x 32) 振荡。 MMCM 输出经过编程以提供(例如)528 MHz 处理器时钟、264 MHz gasket 时钟、176 MHz 时钟、132 MHz 存储器接口时钟、66 MHz 接口和 33 MHz 接口。 在此示例中,参考时钟和输出时钟之间没有必需的相位关系,但输出时钟之间存在必需的关系。
7 系列 FPGA 支持 CLKOUT0 输出路径中的小数(非整数)除法。 小数除法的分辨率为 1/8 或 0.125,有效地将可合成频率的数量增加了八倍。 例如,如果 CLKIN 频率为 100 MHz,并且 M 分频值设置为 8,则 VCO 频率为 800 MHz。CLKOUT0 可用于进一步对 800 MHz VCO 频率进行小数分频(例如,CLKOUT0_DIVIDE = 2.5,产生 320 MHz 的输出频率)。
使用小数分频器时,占空比对于小数模式中使用的输出不可编程。
MMCM 和 PLL 可降低参考时钟固有的抖动。 MMCM 和 PLL 可以作为独立功能实例化,以支持在外部时钟驱动到另一个模块之前过滤来自外部时钟的抖动。 作为抖动滤波器,通常假设 MMCM 和 PLL 将充当缓冲器并在输出端重新生成输入频率(例如,FIN = 100 MHz,FOUT = 100 MHz)。 通常,通过将 MMCM 属性 BANDWIDTH 设置为低,可以实现更大的抖动过滤。 将 BANDWIDTH 设置为低会导致 MMCM 的静态偏移增加。
MMCM 和 PLL 有一些必须遵守的限制。 这些在 7 系列 FPGA 数据表(DS181、DS182 和 DS183)中的 MMCM 和 PLL 电气规范中进行了总结。 一般来说,主要限制是 VCO 工作范围、输入频率、占空比可编程性和相移。 此外,时钟资源和每个时钟区域的连接变化中概述的其他时钟元素(引脚、GT 和时钟缓冲器)存在连接限制。 级联 MMCM/PLL 只能与相邻的 CMT 一起出现。
最小和最大 VCO 工作频率在 7 系列 FPGA 数据手册 DS181、DS182 和 DS183 的电气规范中定义。 这些值也可以从速度规范中提取。
最小和最大 CLKIN 输入频率在 7 系列 FPGA 数据手册(DS181、DS182 和 DS183)的电气规范中定义。
在给定 VCO 工作频率的情况下,只有离散的占空比是可能的。 根据 CLKOUT_DIVIDE 值,最小和最大范围是可能的,步长也取决于 CLKOUT_DIVIDE 值。 时钟向导工具给出了给定 CLKOUT_DIVIDE 的可能值。
在许多情况下,时钟之间需要有相移。 MMCM 有多种选择来实现相移。PLL 还具有基本的静态相移能力。 静态相移可以通过选择八个 VCO 输出相位之一来实现,并根据 CLKOUT 分频值在 CLKOUT 输出计数器中提供额外的精细相移。 在 7 系列 FPGA 中,还具有固定或动态模式下的内插相移功能。 MMCM 相移功能非常强大,可能会导致复杂的场景。 通过使用时钟向导,可根据 MMCM 配置设置确定允许的相移值。
以时间为单位的静态相移 (SPS) 分辨率定义为:
S P S = 1 8 F V C O p e r i o d o r D 8 M F I N p e r i o d SPS = \frac {1}{8F_{VCO}}period{\quad}or{\quad}\frac {D}{8MF_{IN}}period SPS=8FVCO1periodor8MFINDperiod
由于 VCO 可以提供 8 个相移时钟,每个 45°; 始终为 0°、45°、90°、135°、180°、225°、270° 和 315° 相移提供可能的设置。 VCO 频率越高,相移分辨率越小。 由于 VCO 具有不同的工作范围,因此可以使用从
1 8 F V C O M I N p e r i o d t o 1 8 F V C O M A X p e r i o d \frac {1}{8F_{VCOMIN}}period{\quad}to{\quad}\frac {1}{8F_{VCOMAX}}period 8FVCOMIN1periodto8FVCOMAX1period
每个 CLKOUT 输出计数器均可单独编程,允许每个输出计数器根据所选 VCO 的相位和 CLKOUT 计数器分频值具有额外的相移分辨率(以度为单位)。 CLKOUT 相移值的粒度可以计算为 45°/CLKOUT_DIVIDE 值。 最大相移范围也由 CLKOUT_DIVIDE 值决定。
当 CLKOUT_DIVIDE ≤ 64 时,最大相移为 360°。当 CLKOUT_DIVIDE > 64 时,最大相移为:
M a x i m u m P h a s e S h i f t = ( 63 C L K O U T _ D I V I D E × 360 ) + ( 7 × P h a s e S h i f t V a l u e ) Maximum{\ } Phase{\ } Shift{\ } ={\ } (\frac {63}{CLKOUT\_DIVIDE} × 360){\ } +{\ } (7×Phase{\ }Shift{\ }Value) Maximum Phase Shift = (CLKOUT_DIVIDE63×360) + (7×Phase Shift Value)
可以对 CLKFBOUT 反馈时钟进行相移。 在这种情况下,所有 CLKOUT 输出时钟都相对于 CLKIN 负相移。
两个小数计数器(CLKFBOUT 和 CLKOUT0)也具有静态相移能力。 相移步长定义为:
S P S ( f r a c ) = ( 360 8 × f r a c t i o n a l _ d i v i d e _ v a l u e ) O R ( 45 f r a c t i o n a l _ d i v i d e _ v a l u e ) SPS(_{frac})={\ } (\frac {360}{8\ ×\ fractional\_divide\_value}){\ }OR{\ } (\frac {45}{fractional\_divide\_value}) SPS(frac)= (8 × fractional_divide_value360) OR (fractional_divide_value45)
例如,如果小数分频值为 2.125,则静态相移步长为 360/(2.125 x 8) = 21.176 度。
MMCM 中的插值精细相移 (IFPS) 模式具有独立于 CLKOUT_DIVIDE 值的线性偏移行为,并且相移分辨率仅取决于 VCO 频率。 在这种模式下,输出时钟可以 360° 以1/56Fvco
的线性增量循环旋转。
如果 VCO 以 600 MHz 运行,则相位分辨率约为(四舍五入)30 ps,而在 1.6 GHz 时,相位分辨率约为(四舍五入)11 ps。
相移值可以编程为配置期间设置的固定值或配置后在应用程序控制下的动态递增/递减。 动态相移由 MMCME2_ADV 的 PS 接口控制。 通过将 USE_FINE_PS 属性设置为 TRUE,此相移模式同样影响为此模式选择的所有 CLKOUT 输出时钟。在插值精细相移模式下,时钟必须始终连接到 MMCM 的 PSCLK 引脚。 无论时钟处于何种内插精细相移模式(固定或动态),时钟都必须始终连接到 MMCM 的 PSCLK 引脚。 每个单独的 CLKOUT 计数器可以独立地选择内插相移、前面描述的静态相移模式或不选择。 在固定或动态插值精细相移模式中不允许小数除法。 反馈路径的固定或动态相移将导致所有输出时钟相对于 CLKIN 产生负相移。 当移相模式设置为固定时,不能使用动态移相接口。
MMCME2_ADV 原语为动态精细相移提供三个输入和一个输出。 每个 CLKOUT 和 CLKFBOUT 分频器都可以单独选择用于相移。 属性 CLKOUT[0:6]_USE_FINE_PS 和 CLKFBOUT_USE_FINE_PS 选择要动态相移的输出时钟。动态相移量对所有选择的输出时钟是通用的。
可变相移由 PSEN、PSINCDEC、PSCLK 和 PSDONE 端口控制。
MMCM 锁定后,初始相位由 CLKOUT_PHASE 属性确定。 最常见的是,不选择初始相移。 MMCM 输出时钟的相位根据 PSEN、PSINCDEC、PSCLK 和 PSDONE 从初始或先前执行的动态相移的交互而增加/减少。PSEN、PSINCDEC 和 PSDONE 与 PSCLK 同步。 当 PSEN 置位一个 PSCLK 时钟周期时,将启动相移递增/递减。
当 PSINCDEC 为高时,开始递增,当 PSINCDEC 为低时,开始递减。 每个增量都会使 MMCM 时钟输出的相移增加 VCO 周期的 1/56。 类似地,每次递减都会将相移减少 VCO 周期的 1/56。 PSEN 必须在一个 PSCLK 周期内有效。 当相移完成时,PSDONE 在恰好一个时钟周期内为高电平。 PSCLK 周期数是确定的,始终为 12 个 PSCLK 周期。 通过置位 PSEN 启动相移后,MMCM 输出时钟从其原始相移变为递增/递减相移。 当 PSDONE 置为高电平时,会发出递增或递减完成的信号。 在 PSDONE 脉冲高后,可以启动另一个递增/递减。 没有最大相移或相移溢出。 无论频率如何,整个时钟周期(360 度)总是可以相移。 当周期结束时,相移以循环方式环绕。
CLKOUT6 分频器(计数器)可以与 CLKOUT4 分频器级联。 这提供了具有大于 128 的输出分频器的能力。CLKOUT6 馈送 CLKOUT4 分频器的输入。 级联分频器的输出与所有其他输出分频器之间存在静态相位偏移。
MMCM/PLL 的编程必须遵循一套流程,以确保配置能够保证稳定性和性能。 下面介绍如何根据特定设计要求对 MMCM/PLL 进行编程。 可以通过两种方式实现设计,直接通过 GUI 界面(时钟向导)或通过实例化实现 MMCM/PLL。 无论选择何种方法,对 MMCM/PLL 进行编程都需要以下信息:
第一步是确定输入频率。 这允许通过使用最小和最大输入频率来确定所有可能的输出频率来定义 D 计数器范围,VCO 工作范围来确定 M 计数器范围,以及输出计数器范围。 可能有非常多的频率。 使用整数除法时,在最坏的情况下,将有 106 x 64 x 136 = 868,363 种可能的组合。 实际上,不同频率的总数较少,因为无法实现 M 和 D 计数器的整个范围,并且各种设置之间存在重叠。
例如,考虑 FIN = 100 MHz,FVCO = 600 MHz 和 1600 MHz 之间,以及 FPFD = 10 MHz 和 550 MHz 之间。
对于 10 MHz 的 FPFDMIN,D 的值只能在 1 到 10 之间。
DMIN = 1,DMAX= 10
此外,D = 1 M = 4 是 D = 2 M = 8、D = 4 M = 16 和 D = 8 M = 32 的子集,允许删除这些案例。 对于这种情况,仅考虑 D = 1、3、5、6、7 和 9,因为所有其他 D 值都是这些情况的子集。 这大大减少了可能的输出频率的数量。 依次选择输出频率。 应根据可能生成的输出频率检查所需的输出频率。
一旦确定了第一输出频率,就可以对 M 和 D 的值施加额外的约束。这可以进一步限制第二输出频率的可能输出频率。 继续此过程,直到选择所有输出频率。用于确定允许的 M 和 D 值的约束显示在以下等式中:
D M I N = r o u n d u p f I N f P F D M A X D_{MIN}={\ }{roundup}\frac {f_{IN}}{f_{PFD\ MAX}} DMIN= roundupfPFD MAXfIN
D M A X = r o u n d d o w n f I N f P F D M I N D_{MAX}={\ }{rounddown}\frac {f_{IN}}{f_{PFD\ MIN}} DMAX= rounddownfPFD MINfIN
M M I N = r o u n d u p ( f V C O M I N f I N × D M I N ) M_{MIN}={\ }{roundup}(\frac {f_{VCOMIN}}{f_{IN}}×D_{MIN}) MMIN= roundup(fINfVCOMIN×DMIN)
M M A X = r o u n d d o w n ( f V C O M A X f I N × D M A X ) M_{MAX}={\ }{rounddown}(\frac {f_{VCOMAX}}{f_{IN}}×D_{MAX}) MMAX= rounddown(fINfVCOMAX×DMAX)
确定输入频率可以产生几个可能的 M 和 D 值。 下一步是确定最佳 M 和 D 值。 首先确定起始 M 值。这是基于 VCO 目标频率,即 VCO 的理想工作频率。
M I D E A L = D M I N × f V C O M A X f I N M_{IDEAL}= \frac {D_{MIN}×f_{VCOMAX}}{f_{IN}} MIDEAL=fINDMIN×fVCOMAX
目标是找到最接近 VCO 理想工作点的 M 值。 最小D 值用于启动该过程。 目标是使 D 和 M 值尽可能小,同时保持 Fvco尽可能高。
下表总结了 MMCM 端口。除 PSINCDEC 之外的所有控制和状态信号均为高电平有效。
Pin Name | I/O | Pin Description |
---|---|---|
CLKIN1 | Input | 通用时钟输入。 |
CLKIN2 | Input | MMCM 参考时钟的辅助时钟输入。 |
CLKFBIN | Input | 反馈时钟输入 |
CLKINSEL | Input | 信号控制时钟输入 MUX 的状态,高 = CLKIN1,低 = CLKIN2。 动态切换 MMCM 参考时钟。 |
RST | Input | 异步复位信号。 RST 信号是 MMCM 的异步复位。 当该信号被释放时,MMCM 将同步重新启用自身(即 MMCM 重新启用)。 当输入时钟条件发生变化(例如频率)时,需要进行复位。 |
PWRDWN | Input | 关闭已实例化但未使用的 MMCM。 |
DADDR[6:0] | Input | 动态重配置地址 (DADDR) 输入总线为动态重配置提供重配置地址。 不使用时,所有位都必须分配为零。 |
DI[15:0] | Input | 动态重配置数据输入 (DI) 总线提供重配置数据。 不使用时,所有位必须设置为零。 |
DWE | Input | 动态重配置写使能 (DWE) 输入引脚提供写使能控制信号以将 DI 数据写入 DADDR 地址。 不使用时,必须绑低。 |
DEN | Input | 动态重配置使能 (DEN) 提供使能控制信号以访问动态重配置功能。 当不使用动态重配置功能时,DEN 必须连接到低电平。 |
DCLK | Input | DCLK 信号是动态重配置端口的参考时钟。 |
PSCLK | Input | 相移时钟。 |
PSEN | Input | 相移使能。 |
PSINCDEC | Input | 相移递增/递减控制。 |
CLKOUT[0:6] | Output | 用户可配置的时钟输出(0 到 6),可以将 VCO 相位输出(用户可控)从 1(旁路)分频到 128。输出时钟彼此相位对齐(除非相移)并与输入对齐 具有适当反馈配置的时钟。 仅在 CLKOUT[0:3] 上支持到 BUFR/BUFIO 的直接 HPC 连接。 |
CLKOUT[0:3]B | Output | 反相 CLKOUT[0:3]。 |
CLKFBOUT | Output | 专用 MMCM 反馈输出。 |
CLKFBOUTB | Output | 反相 CLKFBOUT。 |
CLKINSTOPPED | Output | 指示输入时钟已停止的状态引脚。 |
CLKFBSTOPPED | Output | 指示反馈时钟已停止的状态引脚。 |
LOCKED | Output | MMCM 的输出,指示 MMCM 何时在预定义的窗口内实现了相位对齐以及在预定义的 PPM 范围内实现了频率匹配。 MMCM 上电后自动锁定。 不需要额外的重置。 如果输入时钟停止或违反相位对齐(例如,输入时钟相移),LOCKED 将被置低。 解除 LOCKED 后,MMCM 必须复位。 |
DO[15:0] | Output | 动态重配置输出总线在使用动态重配置时提供 MMCM 数据输出。 |
DRDY | Output | 动态重配置就绪输出 (DRDY) 为 MMCM 动态重配置功能提供对 DEN 信号的响应。 |
PSDONE | Output | 相移完成。 |
下表总结了 PLL 端口。
Pin Name | I/O | Pin Description |
---|---|---|
CLKIN1 | Input | 通用时钟输入 |
CLKIN2 | Input | 用于动态切换 PLL 参考时钟的辅助时钟输入。 |
CLKFBIN | Input | 反馈时钟输入 |
CLKINSEL | Input | 信号控制输入多路复用器的状态,高 = CLKIN1,低 = CLKIN2。 动态切换 PLL 参考时钟。 |
RST | Input | 异步复位信号。 RST 信号是 PLL 的异步复位。 释放该信号时,PLL 将同步重新使能自身(即 PLL 重新使能)。 当输入时钟条件发生变化(例如频率)时,需要进行复位。 |
PWRDWN | Input | 关闭实例化但未使用的 PLL。 |
DADDR[6:0] | Input | 动态重配置地址 (DADDR) 输入总线为动态重配置提供重配置地址。 不使用时,所有位都必须分配为零。 |
DI[15:0] | Input | 动态重配置数据输入 (DI) 总线提供重配置数据。 不使用时,所有位必须设置为零。 |
DWE | Input | 动态重配置写使能 (DWE) 输入引脚提供写使能控制信号以将 DI 数据写入 DADDR 地址。 不使用时,必须绑低。 |
DEN | Input | 动态重配置使能 (DEN) 提供使能控制信号以访问动态重配置功能。 当不使用动态重配置功能时,DEN 必须连接到低电平。 |
DCLK | Input | DCLK 信号是动态重配置端口的参考时钟。 |
CLKOUT[0:5] | Output | 用户可配置的时钟输出(0 到 5),可以将 VCO 相位输出(用户可控)从 1(旁路)分频到 128。输入时钟和输出时钟是相位对齐的。 |
CLKFBOUT | Output | 专用 PLL 反馈输出。 |
LOCKED | Output | PLL 的输出,指示 PLL 何时在预定义窗口内实现相位对齐和在预定义 PPM 范围内实现频率匹配。 PLL 上电后自动锁定,无需额外复位。 如果输入时钟停止或违反相位对齐(例如,输入时钟相移),LOCKED 将被置低。 在 LOCKED 解除断言后,PLL 必须复位。 |
DO[15:0] | Output | 动态重配置输出总线在使用动态重配置时提供 PLL 数据输出。 |
DRDY | Output | 动态重配置就绪输出 (DRDY) 为 PLL 动态重配置功能提供对 DEN 信号的响应。 |
CLKIN1 可以通过垂直相邻时钟区域中的 CMT 主干、BUFG、BUFR、 BUFH,互连(不推荐),或直接由高速串行收发器。 当时钟输入来自另一个用于级联 CMT 功能的 CMT 模块时,只能使用 CLKOUT[0:3]。
CLKIN2 是辅助时钟输入,用于动态切换 MMCM/PLL 参考时钟。 CLKIN2 可由同一时钟区域内的 SRCC 或 MRCC I/O 直接驱动,SRCC 或 MRCC I/O 通过垂直相邻时钟区域中的 CMT 主干、BUFG、BUFR、BUFH、互连(不推荐)或直接由 高速串行收发器。
必须直接连接到 CLKFBOUT 用于内部反馈或 IBUFG(通过具有时钟功能的引脚用于外部去偏斜)、BUFG、BUFH 或互连(不推荐)。 对于外部时钟对齐,反馈路径时钟缓冲器类型应匹配正向时钟缓冲器类型,但 BUFR 除外。 BUFR 无法补偿。
有关可能的配置,参考MMCM 和 PLL 使用模型小节。 CLKFBOUT 也可以驱动类似于 Virtex-5 FPGA 中 DCM 的 CLK0 的逻辑。
该信号不应用于反馈。 它提供了一个额外的反相 CLKFBOUT 输出时钟。 CLKFBOUTB 可以驱动类似于 Virtex-5 FPGA 中 DCM 的 CLK180 时钟的逻辑。 在 PLL 中不可用。
CLKINSEL 信号控制时钟输入 MUX 的状态,高 = CLKIN1,低 = CLKIN2(参见参考时钟切换)。 在时钟切换期间,MMCM/PLL 必须保持在 RESET。
RST 信号是 MMCM/PLL 的异步复位。 当该信号无效时,MMCM/PLL 将同步重新使能。
关闭已例化但当前未使用的 MMCM/PLL。 此模式可用于为设计的暂时不活动部分和/或在某些系统配置中不活动的 MMCM/PLL 节省功耗。 在此模式下不消耗 MMCM/PLL 功率。
动态重配置地址 (DADDR) 输入总线为动态重配置提供重配置地址。 此总线上的地址值指定在下一个 DCLK 周期写入或读取的 16 个配置位。 不使用时,所有位都必须分配为零。
动态重配置数据输入 (DI) 总线提供重配置数据。 该总线的值被写入配置单元。 数据以 DEN 和 DWE 处于活动状态的周期呈现。 数据被捕获在影子寄存器中并在以后写入。DRDY 指示 DRP 端口何时准备好接受另一个写入。 不使用时,所有位必须设置为零。
动态重配置写使能 (DWE) 输入引脚提供写/读使能控制信号以将 DI 数据写入 DADDR 地址或从 DADDR 地址读取 DO 数据。 不使用时,必须绑低。
动态重配置使能选通 (DEN) 提供使能控制信号以访问动态重配置功能并启用所有 DRP 端口操作。 当不使用动态重配置功能时,DEN 必须连接到低电平。
DCLK 信号是动态重配置端口的参考时钟。 该信号的上升沿是所有其他端口信号的时序参考。 设置时间在数据表中指定。 相对于 DCLK 的上升沿,其他输入信号没有保持时间要求。 该引脚可由 IBUF、IBUFG、BUFG、BUFR 或 BUFH 驱动。 该时钟输入没有专用连接。
该输入引脚为动态相移接口提供源时钟。 所有其他输入与该时钟的上升沿同步。 该引脚可由 IBUF、IBUFG、BUFG、BUFR 或 BUFH 驱动。 该时钟输入没有专用连接。在 PLL 中不可用。
动态(可变)相移操作通过同步置位该信号来启动。 它必须在 PSCLK 的一个周期内被激活。 开始相移后,相位逐渐移动,直到 PSDONE 上的高电平脉冲指示操作完成。 操作过程中没有故障或零星的变化。 从操作开始到结束,相位以连续模拟方式移动。 在 PLL 中不可用。
该输入信号同步指示动态相移是递增还是递减操作(正相移或负相移)。 PSENCDEC 在递增时置为高电平,在递减时置为低电平。 没有与动态相移操作相关的相移溢出。 如果移动更多 360° 或更多,则相位将从原始相位开始环绕。 在 PLL 中不可用。
这些用户可配置的时钟输出(用于 MMCM 的 CLKOUT0 到 CLKOUT6 或用于 PLL 的 CLKOUT0 到 CLKOUT5)可以分频版本的 VCO 相位输出(用户可控),从 1(旁路)到 128 . 输入时钟和输出时钟可以相位对齐。
当与 BUFR 或 BUFIO 一起使用时,只有 MMCM 可以从时钟输出 CLKOUT0 到 CLKOUT3 直接连接到 HPC。 此外,CLKOUT0 到 CLKOUT3 可以连接到 CMT 主干,用于级联 MMCM 和 PLL。 与将 MMCM 和 PLL 从 CCIO 管脚驱动到相邻区域(请参阅具有时钟功能的输入)类似,级联使用 CMT 主干中可用的一些有限资源来直接连接相邻区域中的时钟资源。 也会导致同一列内的级联元件之间的相位偏移。
有关可能的配置,请参阅 MMCM 和 PLL 使用模型。 在 MMCM 中,CLKOUT0 和 CLKFBOUT 可用于小数分频模式。 所有 CLKOUT 输出均可用于非小数模式,以提供静态或动态相移。 在分数模式下,只允许固定相移。 有关详细信息,请参阅静态相移模式。
CLKOUT[0:3] 的反相(180° 相移)。 在 PLL 中不可用。
指示输入时钟已停止的状态引脚。 该信号在时钟停止的一个时钟周期内被置位。 在时钟重新启动并实现 LOCKED 或时钟切换到备用时钟输入且 MMCM 已重新锁定后,该信号被置低。 在 PLL 中不可用。
状态引脚,指示反馈时钟已停止。 该信号在时钟停止的一个时钟周期内被置位。 在反馈时钟重新启动并且 MMCM 重新锁定后,该信号被置低。 在 PLL 中不可用。
来自 MMCM/PLL 的输出,用于指示 MMCM/PLL 何时在输入引脚上实现了参考时钟和反馈时钟的相位和频率对齐。 相位对齐在预定义的窗口内,频率匹配在预定义的 PPM 范围内。 MMCM 上电后自动锁定,无需额外复位。 如果输入时钟停止、违反相位对齐(例如,输入时钟相移)或频率已更改,则 LOCKED 将在一个 PFD 时钟周期内取消声明。 当 LOCKED 被取消断言时,MMCM/PLL 必须复位。 在 LOCKED 断言之前不应使用时钟输出。
动态重配置输出总线在使用动态重配置时提供 MMCM 数据输出。 如果 DWE 在 DCLK 的上升沿处于非活动状态而 DEN 处于活动状态,则该总线保存由 DADDR 寻址的配置单元的内容。
当 DRDY 处于活动状态时,必须在 DCLK 的上升沿捕获 DO 总线。 DO 总线值一直保持到下一次 DRP 操作。
动态重配置就绪输出 (DRDY) 为 MMCM 动态重配置功能提供对 DEN 信号的响应。 该信号表明 DEN/DCLK 操作已完成。
相移完成输出信号与 PSCLK 同步。 当当前相移操作完成时,PSDONE 信号被置位一个时钟周期,表示可以启动一个新的相移周期。 在 PLL 中不可用。
下表列出了 MMCME2_BASE 和 MMCME2_ADV 原语的属性。
Attribute | Type | Allowed Values | Default | Description |
---|---|---|---|---|
BANDWIDTH | String | HIGH LOW OPTIMIZED |
OPTIMIZED | 指定影响 MMCM 的抖动、相位裕度和其他特性的 MMCM 编程算法。 |
CLKOUT[1:6]_DIVIDE | Integer | 1 to 128 | 1 | 如果需要不同的频率,则指定对相关 CLKOUT 时钟输出进行分频的量。 该数字与 CLKFBOUT_MULT_F 和 DIVCLK_DIVIDE 值一起决定输出频率。 |
CLKOUT[0]_DIVIDE_F | Integer or Real | 1 to 128 or 2.000 to 128.000 in increments of 0.125 | 1 | 如果需要不同的频率,则指定对相关 CLKOUT 时钟输出进行分频的量。 该数字与 CLKFBOUT_MULT_F 和 DIVCLK_DIVIDE 值一起决定输出频率。 |
CLKOUT[0:6]_PHASE | Real | –360.000 到 360.000,增量为 FVCO 的 1/56 或取决于 CLKOUT_DIVIDE。 | 0.0 | 允许以度数偏移量指定相关 CLKOUT 时钟输出的输出相位关系(即,90 表示 90° 或 1/4 周期偏移相位偏移,而 180 表示 180° 偏移或 1/2 周期相位偏移)。 |
CLKOUT[0:6]_ DUTY_CYCLE | Real | 0.01 to 0.99 | 0.50 | 以百分比指定相关 CLKOUT 时钟输出的占空比(即,0.50 将生成 50% 的占空比)。 |
CLKFBOUT_MULT_F(2) | Integer or Real | 2 to 64 or 2.000 to 64.000 in increments of 0.125 | 5 | 如果需要不同的频率,则指定将所有 CLKOUT 时钟输出相乘的数量。 该数字与相关的 CLKOUT#_DIVIDE 值和 DIVCLK_DIVIDE 值一起确定输出频率。 |
DIVCLK_DIVIDE | Integer | 1 to 106 | 1 | 指定所有输出时钟相对于输入时钟的分频比。 有效地划分进入PFD的CLKIN。 |
CLKFBOUT_PHASE | Real | 0.00 to 360.00 | 0.0 | 指定时钟反馈输出的相位偏移量。 偏移反馈时钟会导致所有输出时钟到 MMCM 的负相移。 |
REF_JITTER1 REF_JITTER2 | Real | 0.000 to 0.999 | 0.010 | 此属性仅用于模拟目的。 模拟检查最大允许值。 如果已知,则应根据输入时钟上预期抖动的单位间隔 (UI)(最大峰峰值)指定所提供的值。 |
CLKIN1_PERIOD | Real | 0.938 to 100.000 | 0.000 | 以 ns 为单位指定 MMCM CLKIN1 输入的输入周期。 分辨率到ps。 此信息是强制性的,必须提供。 |
CLKIN2_PERIOD | Real | 0.938 to 100.000 | 0.000 | 以 ns 为单位指定 MMCM CLKIN2 输入的输入周期。 分辨率到ps。 此信息是强制性的,必须提供。 |
CLKFBOUT_USE_FINE_PS | Boolean | FALSE, TRUE | FALSE | CLKFBOUT 计数器可变精细相移使能。 |
CLKOUT0_USE_FINE_PS | Boolean | FALSE, TRUE | FALSE | CLKOUT0 计数器可变精细相移使能。 CLKOUT0_DIVIDE 必须是整数,因此不允许小数除法。 |
CLKOUT[1:6]_USE_FINE_PS | Boolean | FALSE, TRUE | FALSE | CLKOUT[1:6] 可变精细相移使能。 |
STARTUP_WAIT | Boolean | FALSE, TRUE | FALSE | 在配置启动周期中等待 MMCM 锁定。 |
CLKOUT4_CASCADE | Boolean | FALSE, TRUE | FALSE | 将输出分频器(计数器)CLKOUT6 级联到 CLKOUT4 分频器的输入,以获得大于 128 的输出时钟分频器,有效地提供 16,384 的总分频值。 |
COMPENSATION | String | ZHOLD(1), EXTERNAL, INTERNAL, BUF_IN | ZHOLD | 时钟输入补偿。 必须设置为 ZHOLD。 定义如何配置 MMCM 反馈。 ZHOLD:表示 MMCM 配置为在 I/O 寄存器提供负保持时间。 EXTERNAL:表示正在补偿 FPGA 外部的网络。 INTERNAL:表示 MMCM 正在使用自己的内部反馈路径,因此不会补偿延迟。 BUF_IN:表示配置与其他补偿方式不匹配,不补偿延迟。 如果时钟输入由 BUFG/BUFH/BUFR 或 GTX/GTH/GTP 驱动,就会出现这种情况。 |
SS_EN | Boolean | FALSE, TRUE | FALSE | 启用扩频生成。 |
SS_MODE | String | DOWN_LOW, DOWN_HIGH, CENTER_LOW, CENTER_HIGH | CENTER_HIGH | 控制扩频频率偏差和扩频类型。 |
SS_MOD_PERIOD | Integer | 4000–40000 | 10000 | 指定扩频调制周期 (ns) |
下表列出了 PLLE2_BASE 和 PLLE2_ADV 原语的属性。
Attribute | Type | Allowed Values | Default | Description |
---|---|---|---|---|
COMPENSATION | String | ZHOLD(1), EXTERNAL, INTERNAL, BUF_IN | ZHOLD | 时钟输入补偿。 必须设置为 ZHOLD。 定义如何配置 PLL 反馈。 ZHOLD:指示 PLL 配置为在 I/O 寄存器提供负保持时间。 EXTERNAL:表示正在补偿 FPGA 外部的网络。 INTERNAL:表示 MMCM 正在使用自己的内部反馈路径,因此不会补偿延迟。 BUF_IN:表示配置与其他补偿方式不匹配,不补偿延迟。 如果时钟输入由 BUFG/BUFH/BUFR 或 GTX/GTH/GTP 驱动,就会出现这种情况。 |
BANDWIDTH | String | HIGH LOW OPTIMIZED |
OPTIMIZED | 指定影响 PLL 的抖动、相位裕度和其他特性的 PLL 编程算法。 |
CLKOUT[0:5]_DIVIDE | Integer | 1 to 128 | 1 | 如果需要不同的频率,则指定对相关 CLKOUT 时钟输出进行分频的量。 该数字与 CLKFBOUT_MULT 和 DIVCLK_DIVIDE 值一起决定输出频率。 |
CLKOUT[0:5]_PHASE | Real | –360.0 to 360.0 | 0.0 | 允许以度数偏移量指定相关 CLKOUT 时钟输出的输出相位关系(即,90 表示 90° 或 1/4 周期偏移相位偏移,而 180 表示 180° 偏移或 1/2 周期相位偏移)。 |
CLKOUT[0:5]_ DUTY_CYCLE | Real | 0.01 to 0.99 | 0.50 | 以百分比指定相关 CLKOUT 时钟输出的占空比(即,0.50 将生成 50% 的占空比)。 |
CLKFBOUT_MULT | Integer | 2 to 64 | 5 | 如果需要不同的频率,则指定将所有 CLKOUT 时钟输出相乘的数量。 该数字与相关的 CLKOUT#_DIVIDE 值和 DIVCLK_DIVIDE 值一起确定输出频率。 |
DIVCLK_DIVIDE | Integer | 1 to 56 | 1 | 指定所有输出时钟相对于输入时钟的分频比。 |
CLKFBOUT_PHASE | Real | 0.0 to 360.0 | 0.0 | 指定时钟反馈输出的相位偏移量。 偏移反馈时钟会导致所有输出时钟到 PLL 的负相移。 |
REF_JITTER1 REF_JITTER2 | Real | 0.000 to 0.999 | 0.010 | 此属性仅用于模拟目的。 模拟检查最大允许值。 如果已知,则应根据输入时钟上预期抖动的单位间隔 (UI)(最大峰峰值)指定所提供的值。 |
CLKIN1_PERIOD | Real | 0.938 to 52.631 | 0.000 | 以 ns 为单位指定 PLL CLKIN1 输入的输入周期。 分辨率到ps。 此信息是强制性的,必须提供。 |
CLKIN2_PERIOD | Real | 0.938 to 52.631 | 0.000 | 以 ns 为单位指定 PLL CLKIN2 输入的输入周期。 分辨率到ps。 此信息是强制性的,必须提供。 |
STARTUP_WAIT | Boolean | FALSE, TRUE | FALSE | 以 ns 为单位指定 PLL CLKIN2 输入的输入周期。 分辨率到ps。 此信息是强制性的,必须提供。 |
MMCM 可能的时钟源包括:
MMCM/PLL 输出计数器使用 DIVIDE、DUTY_CYCLE 和 PHASE 的组合提供多种合成时钟。 下图说明了计数器设置如何影响计数器输出。
顶部波形代表 VCO 的输出。
下图显示了八个 VCO 相位输出和四个不同的计数器输出。 每个 VCO 阶段都显示有适当的启动顺序。 保证相位关系和启动顺序,以确保保持正确的相位。 这意味着 0° 相位的上升沿将发生在 45° 相位的上升沿之前。 O0 计数器被编程为使用 0° 相位抽头作为参考时钟进行简单的二分频。 O1 计数器被编程为进行简单的二分频,但使用来自 VCO 的 180° 相位抽头。 此计数器设置可用于为 DDR 接口生成时钟,其中参考时钟与数据转换边沿对齐。 O2 计数器被编程为除以三。 除了相位设置为一个周期延迟外,O3 输出与 O2 输出具有相同的编程。 大于一个 VCO 周期的相移是可能的。
如果 MMCM/PLL 被配置为提供一定的相位关系并且输入频率发生变化,那么这种相位关系也会发生变化,因为 VCO 频率会发生变化,因此以皮秒为单位的绝对偏移也会发生变化。 使用 MMCM/PLL 进行设计时必须考虑这一方面。 当设计的一个重要方面是在各种时钟输出(例如 CLK 和 CLK90)之间保持某种相位关系时,无论输入频率如何,都将保持这种关系。
所有“O”计数器都可以等效,O0 可以做的任何事情,O1 都可以做。 在 7 系列器件中,O0 计数器具有用于小数除法模式的附加功能。 MMCM/PLL 输出在连接到全局时钟网络时非常灵活,因为它们是相同的。 在大多数情况下,您无法察觉这种详细程度,因为软件和时钟向导通过 MMCM/PLL 属性和向导输入确定正确的设置。
MMCM 和 PLL 参考时钟可以通过使用 CLKINSEL 引脚进行动态切换。 切换是异步完成的。 一旦时钟切换,MMCM/PLL 很可能会失去 LOCKED 并自动锁定到新时钟。 因此,一旦时钟切换,MMCM/PLL 必须复位。 MMCM/PLL 时钟 MUX 切换如下图所示。 CLKINSEL 信号直接控制 MUX。 不存在同步逻辑。
当输入时钟或反馈时钟丢失时,CLKINSTOPPED 或 CLKFBSTOPPED 状态信号被置位。 MMCM 解除 LOCKED 信号。 时钟返回后,CLKINSTOPPED 信号被置低,并且必须应用 RESET。
下面的示例显示了 MMCM,它们同样可以应用于 PLL。 有几种方法可以使用 MMCM 和/或 PLL 进行设计。 ISE 或 Vivado 设计工具中的时钟向导可以帮助生成各种 MMCM 和 PLL 参数。 此外,MMCM 可以手动实例化为组件。MMCM 也可以与 IP 核合并。 IP 核将包含和管理 MMCM。
MMCM 的主要用途之一是时钟网络偏斜。 图 3-11 和图 3-12 显示了该模式下的 MMCM。 来自 CLKOUT 计数器之一的时钟输出用于驱动架构和/或 I/O 内的逻辑。 反馈计数器用于控制输入时钟和输出时钟之间的精确相位关系(例如,如果需要 90° 相移)。 对于输入时钟和输出时钟需要相位对齐的情况,相关的时钟波形显示在右侧。 图 3-11 中的配置是最灵活的,但它确实需要两个全局时钟网络。
实施反馈有一定的限制。 CLKFBOUT 输出可用于提供反馈时钟信号。 当 MMCM 同时驱动 BUFG 和 BUFH 时,只有一个也用于反馈路径的时钟缓冲器被去偏斜。 基本限制是PFD的两个输入频率必须相同。因此,必须满足以下关系:
f I N D = f F B = f V C O M \frac {f_{IN}}{D}= \ f_{FB}\ =\frac {f_{VCO}}{M} DfIN= fFB =MfVCO
例如,如果 Fin 为 166 MHz,D = 1,M = 6,O = 2,则 VCO 为 996 MHz,时钟输出频率为 498 MHz。 由于反馈路径中的 M 值为 6,因此 PFD 的两个输入频率均为 166 MHz。
复习公式Fvco:
F V C O = F C L K I N × M D F_{VCO} = F_{CLKIN} × \frac MD FVCO=FCLKIN×DM
在另一个更复杂的情况下,输入频率为 66.66 MHz,D = 2,M = 30,O = 4。本例中的 VCO 频率为 1000 MHz,CLKOUT 输出频率为 250 MHz。 因此,PFD 的反馈频率为 1000/30 或 33.33 MHz,与 PFD 的 66.66 MHz/2 输入时钟频率相匹配。
当 MMCM 用作合成器或抖动滤波器并且 MMCM 输入时钟和 MMCM 输出时钟之间没有所需的相位关系时,MMCM 反馈可以在 MMCM 内部。 MMCM 性能提高是因为反馈时钟不受内核电源噪声的影响,因为它从不通过由该电源供电的模块。 当然,在 CLKIN 信号和 BUFG 上引入的噪声仍然存在。
MMCM 还可用于生成零延迟缓冲器时钟。 零延迟缓冲器对于将单个时钟信号扇出到多个目的地且它们之间的偏斜较低的应用非常有用。 此配置如下图所示。 在这里,反馈信号驱动芯片外,电路板走线反馈旨在将走线与外部组件匹配。 在此配置中,假设时钟沿在 FPGA 的输入和外部组件的输入处对齐。 CLKIN 和 CLKFBIN 的输入时钟缓冲器必须在同一个 bank 中。
在某些情况下,由于外部组件的输入电容和 FPGA 的反馈路径电容之间的负载差异,无法进行精确对齐。 例如,外部组件的输入电容为 1 pF 至 4 pF,而 FPGA 的输入电容约为 8 pF。 信号斜率存在差异,基本上是歪斜的。 设计人员需要意识到这种影响以确保时序。
MMCM 和 PLL 可以通过 CMT 主干使用 CLKOUT0 到 CLKOUT3 级联,以允许生成更大范围的时钟频率。 与 CMT 主干一起使用时不需要缓冲。 两个 MMCM 的输出时钟之间会有相位偏移,因为主干延迟没有得到补偿。
频率范围限制仍然适用。下面的公式显示了两个 MMCM 的最终输出频率与输入频率和计数器设置之间的关系(图 3-15 和图 3-16)。 第二个MMCM的输出时钟和输入时钟之间的相位关系是不确定的,因为没有补偿主干连接,所以在两个MMCM之间增加了一个额外的相位偏移。 要级联 MMCM,请将第一个 MMCM 的输出路由到第二个 MMCM 的 CLKIN 引脚。此路径提供最低的设备抖动。 使用反相 CLKOUTxB 输出的级联不可用。
f O U T M M C M 2 = f O U T M M C M 1 × M M M C M 2 D M M C M 2 × O M M C M 2 = f I N × M M M C M 1 D M M C M 1 × O M M C M 1 × M M M C M 2 D M M C M 2 × O M M C M 2 f_{OUTMMCM2} = f_{OUTMMCM1} × \frac {M_{MMCM2}}{D_{MMCM2}\ ×\ O_{MMCM2}} = \ f_{IN} × \frac {M_{MMCM1}}{D_{MMCM1}\ ×\ O_{MMCM1}} \ ×\ \frac {M_{MMCM2}}{D_{MMCM2}\ ×\ O_{MMCM2}} fOUTMMCM2=fOUTMMCM1×DMMCM2 × OMMCM2MMMCM2= fIN×DMMCM1 × OMMCM1MMMCM1 × DMMCM2 × OMMCM2MMMCM2
扩频时钟生成 (SSCG) 被电子设备制造商广泛用于降低这些设备产生的电磁干扰 (EMI) 的频谱密度。 制造商必须确保发射的电磁能量水平不会干扰附近其他电子设备的运行。 例如,当电话靠近视频显示器时,电话的清晰度不应降低。 同理,在使用手机的时候应该不会影响显示。
电磁兼容性 (EMC) 法规用于控制引起这些干扰的噪声或 EMI。 满足 EMC 要求的典型解决方案包括添加昂贵的屏蔽、铁氧体磁珠或扼流圈。 这些解决方案会使 PCB 布线复杂化并迫使产品开发周期延长,从而对最终产品的成本产生不利影响。
SSCG 将电磁能量传播到一个大频带上,以有效降低在窄频率窗口内测量的电场和磁场强度。 通过调制 SSCG 输出可以降低任一频率的峰值电磁能量。当 SS_EN 设置为 TRUE 时,MMCME2 可以从标准固定频率振荡器生成扩频时钟。 在 MMCME2 中,VCO 频率与 CLKFBOUT 和 CLKOUT[6:4,1,0] 一起调制。 时钟输出 CLKOUT[3:2] 用于控制调制周期,不可用于一般用途。 只要慢慢调整时钟频率,扩频就不会影响MMCME2的周期抖动。
调整调制周期 SS_MOD_PERIOD 允许 FPGA 设计人员指导工具根据 MMCME2 设置选择最接近的调制周期。 只要调制频率高于 30 kHz 的可听频率范围,扩频调制就会降低 EMI。 通常,设计人员首选较低的调制频率,以尽量减少引入扩频的影响。
使用 SS_MODE(CENTER_HIGH 或 DOWN_HIGH)增加频率偏差将增加整体 EMI 降低,但必须注意确保增加的频率范围不会影响整个系统的运行。 由于扩频时钟和输入时钟以不同的频率运行,因此在时钟域之间传输的任何数据都应使用异步 FIFO 以确保数据不会丢失。 增加频率偏差将需要更大的 FIFO。
另一个设计权衡是使用中心扩展或向下扩展的决定。 选择 SS_MODE (DOWN_HIGH, DOWN_LOW) 会将频率扩展到较低的频率,如下图所示。 DOWN_HIGH 将具有与 CENTER_LOW 相似的频率偏差。
使用下扩频的决定通常是考虑扩频的时序分析影响的结果。 当使用扩频时钟时,设计必须满足频率偏差中最高频率的时序。 因此,如果具有 SS_MODE (CENTER_LOW) 的 100 MHz 时钟产生 3% (±1.5%) 的中心扩展,则具有 3% 中心扩展的 100 MHz 时钟必须作为 101.5 MHz 时钟通过时序分析。 但是,如果 SS_MODE (DOWN_HIGH) 产生 3% 的向下扩展,则输入频率是频率偏差内的最高频率。 因此,对于具有 3% 向下扩展的 100 MHz 时钟,向下扩展时钟将继续通过时序分析作为 100 MHz 时钟进行分析。
以下 MMCM 属性设置会产生多种合成时钟:
CLKOUT0_PHASE = 0;
CLKOUT0_DUTY_CYCLE = 0.5;
CLKOUT0_DIVIDE = 2;
CLKOUT1_PHASE = 90;
CLKOUT1_DUTY_CYCLE = 0.5;
CLKOUT1_DIVIDE = 2;
CLKOUT2_PHASE = 0;
CLKOUT2_DUTY_CYCLE = 0.25;
CLKOUT2_DIVIDE = 4;
CLKOUT3_PHASE = 90;
CLKOUT3_DUTY_CYCLE = 0.5;
CLKOUT3_DIVIDE = 8;
CLKOUT4_PHASE = 0;
CLKOUT4_DUTY_CYCLE = 0.5;
CLKOUT4_DIVIDE = 8;
CLKOUT5_PHASE = 135;
CLKOUT5_DUTY_CYCLE = 0.5;
CLKOUT5_DIVIDE = 8;
CLKFBOUT_PHASE = 0;
CLKFBOUT_MULT_F = 8;
DIVCLK_DIVIDE = 1;
CLKIN1_PERIOD = 10.0;
对于 DRP 的使用,请参阅 XAPP888、MMCM 和 PLL 动态重配置以及相关的参考设计。