PLL(phase-locked loop),即锁相环。是 FPGA 中的重要资源。由于一个复杂的 FPGA 系统往 往需要多个不同频率,相位的时钟信号。所以,一个 FPGA 芯片中 PLL 的数量是衡量 FPGA 芯片 能力的重要指标。FPGA 的设计中,时钟系统的 FPGA 高速的设计极其重要,一个低抖动, 低延 迟的系统时钟会增加 FPGA 设计的成功率。 本实验将通过使用 PLL, 输出一个方波到开发板上的扩展口(AX7020/AX7010 开发板 J11 的 PIN3 脚),来给大家演示在 Vivado 软件里使用 PLL 的方法。
1.打开VIVADO页面,(这是完成pll之后的页面,新开的页面不同)
2.新建一个 pll_test 的工程,点击 Project Manager 界面下的 IP Catalog。
3.再在 IP Catalog 界面里选择 FPGA Features and Design\Clocking 下面的 Clocking Wizard,双击 打开配置界面。
4.默认这个 Clocking Wizard 的名字为 clk_wiz_0, 这里我们不做修改。在第一个界面 Clocking Options 里, 我们选择 PLL 资源,输入的时钟频率为 50Mhz。
5.在 Output Clocks 界面里选择 clk_out1~clk_out4 四个时钟的输出,频率分别为 200Mhz, 100Mhz, 50Mhz, 25Mhz。这里还可以设置时钟输出的相位,我们不做设置,保留默认相位, 点击 OK 完成,
6.在弹出的对话框中点击 Generate 按钮生成 PLL IP 的设计文件。
7.这时一个 clk_wiz_0.xci 的 IP 会自动添加到我们的 pll_test 项目中, 用户可以双击它来修改 这个 IP 的配置。
8.选择 IP Sources 这页,然后双击打开 clk_wiz_0.veo 文件,这个文件里提供了这个 IP 的实例 化模板。我们只需要把框框的中内容拷贝到我们 verilog 程序中,对 IP 进行实例化 点击 add sources,点击 Design sources 进行编写,代码如下
module PLL(
input sys_clk,
input reset,
output clk
);
wire locked;
clk_wiz_0 instance_name
(
// Clock out ports
.clk_out1( ), // output clk_out1
.clk_out2( ), // output clk_out2
.clk_out3( ), // output clk_out3
.clk_out4(clk), // output clk_out4
// Status and control signals
.reset(~reset), // input reset
.locked(locked), // output locked
// Clock in ports
.clk_in1(sys_clk)); // input clk_in1
endmodule
9.为仿真做准备,写 tb测试文件,点击 add sources,点击 simulation sources 进行编写
module PLLtb(
);
reg clk;
reg rst;
wire clk_out;
PLL lu(
.sys_clk(clk),
.reset(rst),
.clk(clk_out)
);
initial
begin
clk=0;
rst=0;
#1000;
rst=1;
end
always #10 clk=~clk;
endmodule
10 仿真结果出来后,添加io口引脚,open implemented design ,结合手册分别找到时钟,复位,输出引脚。
11.下入板子
12.频率正确25Mhz