PLL:Phase Locked Loop(锁相环)
PLL是一种反馈控制电路,其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位。
N:前置分频计数器,
PFD:相位频率检测器
Charge Pump:电荷泵
Loop Filter:环路滤波器
VCO:压控振荡器
M:反馈乘法器
K,V:后置分频器
Quartus II软件提供了锁相环PLL的IP核,对时钟网络进行系统级的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能
其中,输入的复位信号sys_rst_n可以有也可以没有,当locked信号由低电平到高电平的时候,说明锁相环的输出稳定,一个锁相环最多输出五个时钟。
PLL IP核的使用
在Quartus中创建一个空的工程
选择 Tools --> MegaWizard Plug-In Manager
选择创建新的IP核,点击Next。
设置好后,点击Next。
设置频率与开发版的频率一样
点击Next
保持默认,继续Next。
保持默认,继续点击Next。
保持默认,继续点击Next
不需要实时配置,点击Next
此步骤为配置一个时钟
设置好时钟频率后,点击Next。
配置第二个时钟同样为100Mh,偏移量为180,点击Next。
第三个时钟,使用默认的50Mhz,点击Next。
第四个时钟设置50Mhz,点击Next。
第五个时钟不启用,点击Next
添加仿真库页面,点击Next。
点击Finish完成。
点击Yes,将IP核添加到工程。
上图为生成的文件。
可以在相应的文件夹中找到这些文件
查看pll_clk.v的内容
创建一个Verilog HDL File (模块名与工程名保持一致)
内容为:
module ip_pll(
input sys_clk,
input sys_rst_n, //输入系统时钟和复位信号
output clk_100m, //输出第一个时钟100Mhz
output clk_100m_180deg, //输出第二个时钟100Mhz,相位偏移180度
output clk_50m, //输出第三个时钟50Mhz
output clk_25m //输出第四个时钟25Mhz
);
wire locked;
wire rst_n; //定义复位信号
assign rst_n = sys_rst_n & locked; //系统复位信号与locked信号相与,用于其他模块的复位信号,当locked信号为低电平(锁相环还未到达稳定),其他模块处于复位状态
//例化锁相环
pll_clk u_pll_clk(
.areset (~sys_rst_n), //锁相环高电平复位,系统低电平复位
.inclk0 (sys_clk),
.c0 (clk_100m),
.c1 (clk_100m_180deg),
.c2 (clk_50m),
.c3 (clk_25m),
.locked (locked)
);
endmodule
保存。
点击分析与综合按钮,然后分配引脚。输出的时钟分配到开发版的扩展引脚。
编译整个工程。
使用modelsim软件仿真需要添加altera_mf.v文件。
右击桌面上Quartus II的快捷方式,–>打开文件所在位置。搜索找到altera_mf.v文件位置。
复制其到一下文件夹下面:
开始手动仿真
在modelsim下创建一个工程
File -->New -->Projiect
点击ok
添加已存在的文件
再次添加已经存在的文件,目录 ip_pll–>par -->ipcore
添加后,点击ok。
全部编译Comple --> Comple All。开始仿真Simulate -->Start Simulation
选中Design中work下面的tb文件
点击ok
出现错误,缺少一个顶层文件。
右击tb_ip_pll.v,–>Add to Project -->Existing File,添加下图文件。
添加后,编译此文件。
重新开始仿真
右击上图u_ip_pll,Add Wave
运行10us.