IP核之PLL

PLL IP核简介

     PLLPhase Locked Loop,即锁相环)是最常用的 IP 核之一,其性能强大,可以对输入到 FPGA 的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望时钟。
Altera 中的 PLL 是模拟锁相环,和数字锁相环不同的是模拟锁相环的优点是输出的稳定度高、相位连续可调、延时连续可调;缺点是当温度过高或者电磁辐射过强时会失锁。
PLL基本工作原理

                                       PLL结构模型示意图

1、首先需要参考时钟(ref_clk)通过鉴频(FD)鉴相器(PD)和需要比较的时钟频率进行较,我们以频率调整为例,如果参考时钟频率等于需要比较的时钟频率则鉴频鉴相器输出为 0,如果参考时钟频率大于需要比较的时钟频率则鉴频鉴相器输出一个变大的成正比的值,如果参考时钟频率小于需要比较的时钟频率则鉴频鉴相器输出一个变小的正比的值。
2、鉴频鉴相器的输出连接到环路滤波器(LF)上,用于控制噪声的带宽,滤掉高频噪声,使之稳定在一个值,起到将带有噪声的波形变平滑的作用。如果鉴频鉴相器之前的波形抖动比较大,经过环路滤波器后抖动就会变小,趋近于信号的平均值。
3、经过环路滤波器的输出连接到压控振荡器(VCO)上,环路滤波器输出的电压以控制 VCO 输出频率的大小,环路滤波器输出的电压越大 VCO 输出的频率越高,然后将这个频率信号连接到鉴频鉴相器作为需要比较的频率。
        如果 ref_clk 参考时钟输入的频率和需要比较的时钟频率不相等,该系统最终实现的就是让它们逐渐相等并稳定下来。如果 ref_clk 参考时钟的频率是 50MHz,经过整个闭环反馈系统后,锁相环对外输出的时钟频率 pll_out 也是 50MHz

PLL倍频

倍频是在 VCO 后直接加一级分频器,我们知道 ref_clk 参考时钟输入的频率和需要比较的时钟频率经过闭环反馈系统后最终会保持频率相等,而在需要比较的时钟之前加入分频器,就会使进入分频器之前的信号频率为需要比较的时钟频率的倍数,VCO 后输出的 pll_out 信号频率就是 ref_clk 参考时钟倍频后的结果。

 PLL分频

分频是在 ref_clk 参考时钟后加一级分频器,这样需要比较的时钟频率就始终和 ref_clk 参考时钟分频后的频率相等,在 VCO 后输出的 pll_out 信号就是 ref_clk 参考时钟分频后的结果。

PLL基本配置

以上我们分别将 c0c1c2c3 的输出设置为输入时钟的 2 倍频、输入时钟的 2 分频、输入时钟相移 90°、输入时钟占空比变为 20%,然后通过仿真进行对比。

PLL IP核的调用

配置完IP核后会生成pll_ip.ppf pll_ip.qip pll_ip.v pll_ip_inst.v四个文件,其中pll_ip_inst.v代码如下:
pll_ip	pll_ip_inst (
	.inclk0 ( inclk0_sig ),
	.c0 ( c0_sig ),
	.c1 ( c1_sig ),
	.c2 ( c2_sig ),
	.c3 ( c3_sig ),
	.locked ( locked_sig )
	);

以下是实例化PLL IP核并应用的代码编写

module pll
(
  input  wire   sys_clk,       //系统时钟50MHz
  input  wire   sys_rst_n,
  output wire   clk_mul_2,     //系统时钟经过 2 倍频后的时钟
  output wire   clk_div,       //系统时钟经过 2 分频后的时钟
  output wire   clk_pha_90,    //系统时钟经过相移 90°后的时钟
  output wire   clk_duc_20,    //系统时钟变为占空比为 20%的时钟
  output reg    [1:0]  cnt,   
  output wire   locked         //检测锁相环是否已经锁定,只有该信号为高时输出的时钟才是稳定的
);
pll_ip	pll_ip_inst (
	.inclk0 ( sys_clk ),
	.c0 ( clk_mul_2 ),
	.c1 ( clk_div ),
	.c2 ( clk_pha_90 ),
	.c3 ( clk_duc_20 ),
	.locked ( locked )
	);

always@(posedge clk_div or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
	   cnt <= 2'd0;
	else
	   cnt <= cnt + 1'b1;   

endmodule

PLL IP核的仿真

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

reg   sys_clk;

wire  clk_mul_2;
wire  clk_div;
wire  clk_pha_90;
wire  clk_duc_20;
wire  locked;


//初始化系统时钟
initial sys_clk = 1'b1;

//sys_clk:模拟系统时钟,每 10ns 电平翻转一次,周期为 20ns,频率为 50MHz
always #10 sys_clk = ~sys_clk;

pll pll_inst
(
   .sys_clk   (sys_clk),
   .clk_mul_2 (clk_mul_2),
   .clk_div   (clk_div),
   .clk_pha_90(clk_pha_90),
   .clk_duc_20(clk_duc_20),
   .locked    (locked)
);

endmodule

然后将编写好的仿真文件添加到工程中,进行仿真,查看波形。

### Quartus IP PLL 配置与使用 在Quartus环境中,IP中的PLL(Phase-Locked Loop)模块用于提供精确的时钟信号控制功能。以下是关于如何配置、使用以及解决常见问题的相关说明。 #### 1. 配置过程 在创建或修改PLL IP时,可以通过Qsys或者Megawizard插件管理器完成参数设定。具体操作如下: - 打开Quartus软件并加载项目文件。 - 调用Megawizard插件管理器来插入新的PLL实例或将现有实例更新至最新版本[^1]。 - 设置输入时钟频率范围和其他必要属性,例如输出分频因子和相位偏移量等。 #### 2. 参数设置详解 对于Altera Soft LVDS IP而言,“Off”选项意味着不会自动生成内部专用锁相环路(PLL),而是采用外部提供的稳定源作为工作基准。因此,在实际应用过程中需要特别注意以下几点关键参数的选择: - **Input Clock Frequency**: 定义进入PLL单元前的基础振荡速率。 - **Output Division Factor(s)**: 控制各个独立通道上产生的目标周期长度比例关系。 - **Phase Shift Values (if applicable)**: 如果设计需求涉及到多路异步切换场景,则可能还需要调整相应的初试角度差值。 这些数值应当依据具体的电路应用场景灵活变动,并通过仿真验证其合理性。 #### 3. 常见错误及解决方案 当遇到有关PLL初始化失败或者是锁定状态异常等问题时,可以尝试以下几个方面来进行排查: - 确认所选器件支持当前使用的PLL特性组合; - 检查电源电压等级是否满足官方文档给出的要求; - 对比实际连线方式同预期模型之间是否存在偏差情况; 如果上述常规手段均无法有效改善现状的话,建议参照对应系列的手册资料深入分析根本原因所在。 ```python # 示例 Python脚本片段展示如何读取FPGA板卡上的寄存器信息以便调试目的 import fpga_communicator as fc def read_pll_status(register_address): data = fc.read_register(register_address) return data status = read_pll_status(0x4A) # Assume this address corresponds to the PLL status register. print(f"Current PLL Status: {hex(status)}") ``` 以上代码仅为示意用途,真实环境下的实现细节可能会更加复杂。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值