代码编织梦想

1. 实验原理

PLL,锁相环。将参考信号FREF与可调反馈信号FO(多路)进行相位比较,由负反馈环路进行控制调节,当比较结果处于稳态,即输出频率和相位与误差检测器输入频率和相位匹配时,PLL被锁定。



PLL是FPGA中的重要资源,一个复杂的FPGA程序往往需要多个不同频率与相位的时钟信号,所以一个FPGA芯片中PLL数量是衡量FPGA芯片能力的重要指标。

AX7020开发板通过使用PLL输出一个方波到开发板拓展口J11的PIN3脚,进行PLL学习实验。

 

图1.1 PLL工作流程图

2. 工程创建

程序功能:将开发板上晶振提供的50MHz频率时钟倍频至200MHz、100MHz,分频到25MHz。

2.1 新建工程,调用PLL IP核。

新建pll_test工程,点击Project Manager界面下的IP Catalog。

在IP Catalog界面选择FPGA Features and Design\clocking下面的Clocking Wizard,双击打开配置页面。

组件默认名称为clk_wiz_0,可以不用改。在第一个界面Clocking Options里,选择PLL资源,输入时钟频率50MHz(由开发板上晶振提供)。

在Output Clocks界面选择clk1~4,4个时钟输出,频率分别为200MHz,100MHz,50MHz,25MHz。这里也可以设置时钟相位。

在弹出的对话框中点击Generate按钮生成PLL IP设计文件。

这时一个clk_wiz_0.xci的IP会自动添加到项目中,双击可修改IP配置。

选择IP资源页双击clk_wiz_0.veo这里有IP实例化模板,复制粘贴到自己程序中即可对IP进行实例化。

2.2 顶层设计文件编写

`timescale 1ns / 1p

//

module pll_test(

input      sys_clk,            //板上晶振提供的50M钟

input       rst_n,             //复位按键输入,低有效

output      clk_out           //PLL锁相环输出引脚,输出至J8的3脚

);

//注意,括号内,结尾

wire        locked;          //输出锁定,为高时PLL IP锁相环初始化完成

/PLL IP call

clk_wiz_0 clk_wiz_0_inst             // IP 实例化

(// Clock in ports

.clk_in1(sys_clk),            // 输入 50Mhz

// Clock out ports

.clk_out1(),                // 输出200Mhz

.clk_out2(),               // 输出 100Mhz

.clk_out3(),              // 输出 50Mhz

.clk_out4(clk_out),    // 输出 25Mhz

// Status and control signals

.reset(~rst_n),        // PLL复位高有效(~rst_n)

.locked(locked));     //输出锁定,为高时PLL IP锁相环初始化完成

2.3 管脚约束文件编写

############## clock and reset define##################

create_clock -period 20 [get_ports sys_clk]                     //50MHz系统时钟取得

set_property IOSTANDARD LVCMOS33 [get_ports {sys_clk}]      //时钟引脚3.3V

set_property PACKAGE_PIN U18 [get_ports {sys_clk}]            //时钟引脚取自FPGA U18 脚

set_property IOSTANDARD LVCMOS33 [get_ports {rst_n}]        //复位引脚工作电压3.3V,取自FPGA N15脚

set_property PACKAGE_PIN N15 [get_ports {rst_n}]

############## pll output define  J11 PIN3##################

set_property IOSTANDARD LVCMOS33 [get_ports clk_out]       //时钟输出至F17脚,该引脚工作电压3.3V

set_property PACKAGE_PIN F17 [get_ports clk_out]

2.4 仿真文件编写

`timescale 1ns / 1ps

//

// Module Name: vtf_led_test

//

module vtf_pll_test;

// Inputs

reg sys_clk;

reg rst_n;

// Outputs

    wire clk_out;

// 实例化PLL单元

pll_test uut (                                      

 .sys_clk(sys_clk), 

 .rst_n(rst_n), 

 .clk_out(clk_out)

);

initial begin

 // 初始化输入

 sys_clk = 0;

 rst_n = 0;

 // 100ns后复位至高直至仿真完毕

 #100;

          rst_n = 1;        

 // Add stimulus here

 #20000;

      //  $stop;

 end

   

    always #10 sys_clk = ~ sys_clk;   //5ns一个周期,产生50MHz时钟源

   

endmodule

2.5 仿真波形

输出25MHz时钟,时钟周期增至源时钟的两倍。F=1/T,时钟周期与频率之间的关系。

图2.1 仿真波形图

工程文件获取

链接:https://pan.baidu.com/s/1RYfZmh1-l0yB5MkI1h8r7A 

提取码:s5uw

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46154042/article/details/131027925