PLL学习(IP核)
锁相环的功能:是产生特定频率的时钟信号,例如倍频信号。
使用IP核产生不同频率的时钟信号
- 新建一个 pll_test 的工程,点击 Project Manager 界面下的 IP Catalog
- 再在 IP Catalog 界面里选择 FPGA Features and Design\Clocking 下面的 Clocking Wizard,双击 打开配置界面。
- 默认这个 Clocking Wizard 的名字为 clk_wiz_0, 这里我们不做修改。在第一个界面 Clocking Options 里, 我们选择 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 进行实例化
程序编写以及仿真
顶层文件
`timescale 1ns / 1ps
module PLL(
input clk,
input rst_n,
output clk_out1,
output clk_out2,
output clk_out3,
output clk_out4
);
wire locked;//locked是一个输出信号
clk_wiz_0 clk_wiz_0_inst
(
// Clock out ports
.clk_out1(clk_out1),//output 25Mhz
.clk_out2(clk_out2),//output 50Mhz
.clk_out3(clk_out3),//output 100Mhz
.clk_out4(clk_out4),//output 200Mhz
// Status and control signals
.reset(~rst_n),
.locked(locked),
// Clock in ports
.clk_in1(clk)
);
endmodule
测试文件
module PLL_tb(
);
reg clk;
reg rst_n;
wire clk1;
wire clk2;
wire clk3;
wire clk4;
PLL PLL_test(
.clk(clk),
.rst_n(rst_n),
.clk_out1(clk1),
.clk_out2(clk2),
.clk_out3(clk3),
.clk_out4(clk4)
);
initial
begin
// Initialize Inputs
clk = 0;
rst_n = 1 ;
#1000 ;
rst_n = 0;
end
//Create clock
always #10 clk = ~ clk;
endmodule
仿真结果
本文参考的是黑金的教程,谢谢。