FPGA——PLL

野火学习备忘录——PLL
PLL(Phase Locked Loop,即锁相环)是最常用的 IP 核之一,其性能强大,可以对输入到 FPGA 的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望时钟,实际上,即使不想改变输入到 FPGA 时钟的任何参数,也常常会使用 PLL,因为经过 PLL 后的时钟在抖动(Jitter)方面的性能更好一些。Altera 中的 PLL 是模拟锁相环,和数字锁相环不同的是模拟锁相环的优点是输出的稳定度高、相位连续可调、延时连续可调;缺点是当温度过高或者电磁辐射过强时会失锁(普通环境下不考虑该问题)。
PLL的大体结构
在这里插入图片描述
FD/PD:鉴频鉴相器,输入鉴频鉴相器的两路信号分别是参考时钟ref_clk和比较时钟,通过计较两个时钟的大小,如果两个时钟相等,则鉴频鉴相器输出为0,如果参考时钟大于比较时钟,鉴频鉴相器会输出一个变大成正比的值,反之则会输出一个变小成正比的值。
LF:环路滤波器,鉴频鉴相器输出的值通过环路滤波器 用于控制噪声的带宽,滤掉高频噪声。同还会输出电压幅值
VCO:压控振荡器,自身有一个基准的震荡频率。输入到压控振荡器信号的幅度越高,则压控振荡器的输出的频率越高。
假设输入的参考时钟为50MHz,VCO的基准频率为10MHz,则FD/PD会输出一个变大的值,随之LF输出的电压幅度也会变大,最后VCO输出的频率也会变大 。直到比较频率等于参考频率,就能稳定输出。

倍频PLL大概结构图
在这里插入图片描述
DIV为分频器,假设DIV为2分频,参考频率为50MHz,则VCO的输出比较频率应为100MHz。

分频的PLL大概结构图
在这里插入图片描述
如果想要一个25MHz的频率,则DIV为2分频。
下面我们就来配置PLL.

在这里插入图片描述

1.为速度等级,数字越大,速度等级越低,越小则越大。
2.此为输入的时钟频率。
3.PLL输出的四种模式
第一种,源同步模式,常用在高速的数据接口。
在这里插入图片描述
在这里插入图片描述

由官方数据手册可知,源同步模式保证数据和时钟在进入寄存器之前还保持着原来的相位关系。

第二种是无补偿模式
在这里插入图片描述
锁相环不对时钟做任何的补偿处理,当时钟达到寄存器或者直接输出时钟时,相位可能超前或者滞后与原来的相位关系。

第三种时标准模式
在这里插入图片描述
时钟经过PLL到寄存器是有补偿的,而直接输出PLL产生的时钟会有相位偏差。所以标准模式一般使用在内部寄存器上,不作输出。

第四种是零延迟缓冲模式
在这里插入图片描述
由图可知,时钟在经过PLL到达寄存器时,PLL没进行补偿,所以产生了相位误差。而经过PLL输出时,是进行了补偿,所以输出时钟无原来时钟没有相位误差。所以零延迟缓冲模式适合进行时钟输出。


在这里插入图片描述
1.PLL异步复位。
2.锁定输出,高电平时表示PLL输出时钟可用。


在这里插入图片描述
1.是否输出该时钟
2.直接配置,输出150M直接填150即可。
3.参数配置,乘法因子,对应上图倍频的DIV,为3时输出150M
4.除法因子,对应上图分频的DIV值,为2时,输出25M
5.相位调整
6.占空比配置。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这里配置四个时钟,一个倍频100M,一个分频25M,一个相移90度,一个占空比20


在这里插入图片描述
生成例化文件。

RTL代码

module	PLL
(
	input	wire			sys_clk		,//50MHz
	
	output	wire			clk_100		,//倍频100MHz
	output	wire			clk_25		,//分频25MHz
	output	wire			clk_d90		,//相移90度
	output	wire			clk_duty_20	,//20占空比
	output	wire			blocked		 //锁定信号,高电平时钟有效
	
);


pll	pll_inst (
	.inclk0 (sys_clk),
	.c0 ( clk_100 ),
	.c1 ( clk_25 ),
	.c2 ( clk_d90 ),
	.c3 ( clk_duty_20 ),
	.locked ( blocked )
	);


endmodule

testbench

`timescale 1ns/1ns 
module	tb_PLL();

reg			sys_clk;

wire		clk_100			;		
wire		clk_25		    ;
wire		clk_d90	        ;
wire		clk_duty_20     ;
wire		blocked	        ;
		
initial
	begin
		sys_clk = 1'b0;
	end
	


always	#10 sys_clk = ~sys_clk;

PLL		PLL_inst
(
	.sys_clk		(sys_clk),//50MHz

	.clk_100		(clk_100),//倍频100MHz
	.clk_25			(clk_25),//分频25MHz
	.clk_d90		(clk_d90),//相移90度
	.clk_duty_20	(clk_duty_20),//20占空比
	.blocked		(blocked) //锁定信号,高电平时钟有效
	
);
endmodule

modelsim仿真结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值