时钟IP核
对输入的时钟进行时钟分频、倍频、相位偏移
MMCM( 混合模式时钟管理 )和PLL(锁相环)内部的时钟资源
-
PLL 的全称是Phase Locked Loop , 锁相环,反馈控制电路
PLL对时钟网络进行系统级的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能。
-
时钟资源包含时钟管理单元CMT, 每个CMT由一个MMCM和一个PLL组成
MMCM mixed-mode clock manager 混合模式时钟管理
PLL( phase locked loop ) 锁相环
时钟资源简介
7系列的FPGA使用了专用的全局和区域时钟资源来管理和设计不同的时钟需求
-
全局时钟:专用的互联网络,降低时钟的偏斜,占空比的失真和功耗 --> 资源有限
专用的时钟缓冲、驱动结构,延时低
-
区域时钟:只能驱动区域内部的逻辑资源和IO口
Clock Management Tiles (CMT) 提供了时钟合成(Clock frequency synthesis ),倾斜矫正(deskew), 过滤抖动(jitter filtering) 功能
一个CMT包 1个MMCM 1个PLL
整体时钟资源视图
-
Clock Region 区域时钟
-
Clock Backbone 全局时钟线主干道
将FPGA分成左右两个部分,所有的全局时钟布线都要从Clock Backbone经过
-
BUFG 全局时钟缓存
-
HROW: 水平时钟线
水平方向贯穿每个时钟区域的中心部分
-
CMT Backbone CMT主干道
-
I/O Column 时钟的输入引脚
-
GT Column 串行时钟收发器
划分成几个不同的时钟区域,每个区域可以单独工作,也可以通过时钟主干道统一工作
单个时钟域视图
-
BUFG: 全局时钟缓冲器, BUFG的时钟输出可以经过Clock Backbone 到达任何一个区域,而且可以通过HROW到达每个区域内部的逻辑单元
-
BUFH : 水平时钟缓冲器,功能受限的BUFG,仅能在左右相邻的时钟区域
-
BUFIO: IO时钟缓冲器
-
BUFR: 区域时钟缓冲器,输出的时钟,仅能作用于本时钟区域
-
BUFMR: 多区域时钟缓冲器
-
CC 时钟专用引脚
-
MMCM: 混合模式时钟管理器
-
PLL: 锁相环
时钟引脚:SRCC, MRCC 专用时钟引脚
-
SRCC : 仅作用于本时钟区域
-
MRCC : 作用于本时钟区域和相邻时钟区域
_P、_N 差分信号
MMCM / PLL IP核
PLL
锁相环是一种反馈控制电路,利用外部输入的参考信号控制环路内部震荡信号的频率和相位。
锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路
锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。
PLL主要用于为内存接口生成所需的时钟信号,也具有与器件逻辑的连接
PLL由以下几个部分组成
- 前置分频计数器(D计数器)
- 相位-频率检测器(PFD, Phase-Frequency Detector)电路
- 电荷泵(Charge Pump)
- 环路滤波器( Loop Filter )
- 压控振荡器( VCO,Voltage Controlled Oscillator )
- 反馈乘法器计数器( M计数器 )
- 后置分频计数器( O1-O6计数器 )
工作过程
-
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)/(D*O)
MMCM
MMCM 的功能是PLL的超集,具有比PLL更强大的相移功能。
MMCM主要用于驱动器件逻辑(CLB, DSP, RAM 等 )的时钟
CMT
包含一个PLL 和一个MMCM
输入:
- IBUFG(CC) 具有时钟能力的IO输入 CCIO --> Clock Capable Input
- 区域时钟BUFR
- 全局时钟BUFG
- GT收发器输出时钟
- 行时钟BUFH
- 本地布线(不推荐使用本地布线来驱动时钟资源)
输出:
- 驱动全局时钟的BUFG
- 驱动全局时钟的BUFH
BUFG能够驱动整个器件内部的PL侧通用逻辑的所有时序单元的时钟端口。
Clocking Wizard配置
使用时钟向导(Clocking Wizard)配置时钟IP核
IP核框图:
-
clk_in 输入时钟,可以从专用时钟引脚输入
-
locked信号,从 0 变为1 ,表示输出的时钟达到稳定
配置过程
步骤1
步骤2
- Clock Monitor 时钟监控: 一般不勾选
- MMCM、PLL MMCM的功能比PLL强大,根据需求选择
- Clocking Features
- Frequency Synthesis 频率合成 --> 输出不同频率时钟
- Phase Aligment 相位矫正
- Minimize Power 低功耗,时钟精度会降低
- Jitter Optimization 抖动设置
- 默认平衡模式
步骤3
- 输入时钟设置
步骤4
- 输出时钟设置
步骤5
- 输入输出引脚设置
步骤6
- 端口重命名
步骤7
- 默认
步骤8
使用IP核
verilog
`timescale 1ns / 1ps
//
// Engineer: wkk
// Create Date: 2022/11/25 12:53:36
// Module Name: clock_ip
//
module clock_ip(
input sys_clk,
input sys_rst_n,
output clk_50m,
output clk_25m,
output clk_ip_locked
);
clk_clock_ip u_clk_clock_ip(
.clk_out1 (clk_50m),
.clk_out2 (clk_25m),
.reset (~sys_rst_n),
.locked (clk_ip_locked),
.clk_in1 (sys_clk)
);
endmodule
testbench
`timescale 1ns / 1ns
//
// Engineer: wkk
// Module Name: clock_ip_tb
//
module clock_ip_tb();
reg sys_clk ;
reg sys_rst_n ;
wire clk_50m ;
wire clk_25m ;
wire clk_ip_locked ;
clock_ip u_clock_ip(
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n ),
.clk_50m (clk_50m ),
.clk_25m (clk_25m ),
.clk_ip_locked (clk_ip_locked)
);
initial begin
sys_clk = 0;
sys_rst_n = 0;
end
always #5 sys_clk = ~sys_clk;
initial begin
#10
sys_rst_n = 1;
#200
$stop;
end
endmodule
参考
正点原子《启明星 ZYNQ 之 FPGA 开发指南 V2.0》