通过锁相环对时钟进行倍频生成我们需要的时钟频率
PLL,即锁相环。是FPGA的重要资源。一个FPGA系统往往需要多个不同的频率,不同相位的时钟信号。所以一个FPGA芯片的PLL数量是衡量FPGA芯片的重要指标。
数字锁相环(PLL)
锁相环(PLL)主要用于频率综合。使用一个PLL可以从一个输入时钟信号生成多个时钟信号。
一、创建Vivado工程新建一个pll_test工程,点击Project Manager界面下的IP Catalog
在第一个界面ClockingOptions里,我们选择PLL资源,输入时钟为50Mhz。
在Output Clocks界面里选择clk_out1~clk_out4四个时钟的输出,频率分别为200Mhz,100Mhz,50Mhz,25Mhz。这里还可以设置输出的相位,这里我们不做设置,点击OK完成。
在弹出的对话框点击Generate按钮生成PLL IP的设计文件
这时一个clk_wiz_0.xci的IP会自动添加到我们的pll_test项目中,用户可以双击它来修改这个IP的配置。
选择IP Sources这页,然后双击打开clk_wiz_0.veo这个文件,提供了IP 的实例化模块。,我们需要把方框中的内容拷贝到我们的verilog程序中对IP进行实例化。
二、我们编写一个顶层文件pll_test.v代码,注意PLL的复位时高电平有效,也就是高电平一直在复位状态,PLL不会工作。
`timescale 1ns / 1ps
module pll_test(
input sys_clk, //system clock 50Mhz on board u18
input rst_n, //reset ,low active N15
output clk_out1, //pll clock output M14
output clk_out2, //pll clock output M15
output clk_out3, //pll clock output K16
output clk_out4 //pll clock output J16
);
wire locked;
/PLL IP call
clk_wiz_0 clk_wiz_0_inst
(// Clock in ports
.clk_in1(sys_clk), // IN 50Mhz
// Clock out ports
.clk_out1(clk_out1), // OUT 200Mhz
.clk_out2(clk_out2), // OUT 100Mhz
.clk_out3(clk_out3), // OUT 50Mhz
.clk_out4(clk_out4), // OUT 25Mhz
// Status and control signals
.reset(~rst_n), // pll reset, high-active
.locked(locked)); // OUT
endmodule
~rst_n为复位按键,对整个系统进行复位。
sys_clk为晶振的时钟,输出四路时钟分别是
clk_ouy1 200Mhz,
clk_out2_100Mhz,
clk_out3 50Mhz,
clk_out425Mhz
分别接四个LED灯
保存工程后,IP核自动变成pll_test.v的子模块
三、添加管脚约束
三、仿真
右击SIMULATION中Simulation Settings
在Simulation settings窗口中进行如下图来配置,这里设置成50ms,单击OK
添加激励文件,点击Project Manager下的Add Sources图标单击Next
点击Create File创建激励文件
File name为pll_test
点击Finish完成
编辑测试文件,点击Run Simulation
K14 200Mhz输出
H15 100Mhz输出
H16 50Mhz频率输出
G17 25Mhz输出