FPGA之锁相环(PLL)

IP核(PLL核)如何调用

1、建立工程

2、PLL核配置

---------点击 Project Manager 界面下的 IP Catalog--------搜索clock -------双击clocking wizard,打开配置界面
在这里插入图片描述------默认这个 Clocking Wizard 的名字为 clk_wiz_0, 这里我们不做修改。在第一个界面 Clocking
Options 里, 我们选择 PLL 资源,输入的时钟频率为 50Mhz。
在这里插入图片描述

---------------在 Output Clocks 界面里选择 clk_out1~clk_out4 四个时钟的输出,频率分别为 200Mhz,
100Mhz, 50Mhz, 25Mhz。这里还可以设置时钟输出的相位,我们不做设置,保留默认相位,
点击 OK 完成,然后点击生成。
在这里插入图片描述

3、新建源文件,编写源文件

选择 IP Sources 这页,然后双击打开 clk_wiz_0.veo 文件,这个文件里提供了这个 IP 的实例化模板。我们只需要把框框的中内容拷贝到我们 verilog 程序中,对 IP 进行实例化。
在这里插入图片描述

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2021/05/21 19:43:27
// Design Name: 
// Module Name: pl_pll
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module pl_pll(
    input sys_clk,// PL端的时钟为50MHz
    input rst_n,//复位,低电平有效
    
    output clk_out,
    output reg [3:0] led
    );
    reg [31:0] timer_cnt;
    wire locked;
    
/    调用 PLL IP  / 
    // 功能说明:程序中先用实例化 clk_wiz_0, 把单端 50Mhz 时钟信号输入到 clk_wiz_0 的 clk_in1,把clk_out4 的输出赋给 clk_out。       
     clk_wiz_0 clk_wiz_0_uut
     (
       // Clock in ports
      .clk_in1(sys_clk),      //in 50Mhz  周期为20ns
      
      // Clock out ports
      .clk_out1(clk_out1),     // output clk_out1  out 200MHz
      .clk_out2(clk_out2),     // output clk_out2  out 100MHz
      .clk_out3(clk_out3),     // output clk_out3  out 50MHz
      .clk_out4(clk_out),     // output clk_out4   out 25MHz
      // Status and control signals
      .reset(~rst_n),       // reset表示PLL这个核的模块端口,rst_n表示送入的值
      .locked(locked)        // output locked
        );
             
    always @(posedge clk_out or negedge rst_n)
          begin
           if(!rst_n)//复位
           begin
               led<=4'd0;
               timer_cnt<=32'd0; 
           end
           else if (timer_cnt>=32'd24_999_999) //40ns*25*10^6=1s
           begin
               led=~led;// 计数到1s,LED灯的翻转
               timer_cnt<=32'd0;
           end
           else
           begin
               led<=led;
               timer_cnt<=timer_cnt+32'd1;
           end    
          end   
        
        
endmodule


4、新建约束文件,编写约束文件

create_clock -period 20 [get_ports sys_clk]
# 系统时钟的约束文件
set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
set_property PACKAGE_PIN U18 [get_ports sys_clk]
# 复位的约束文件
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property PACKAGE_PIN N15 [get_ports rst_n]
# 示波器探针的约束文件
set_property IOSTANDARD LVCMOS33 [get_ports clk_out]
set_property PACKAGE_PIN F17 [get_ports clk_out]


# led的约束文件
set_property PACKAGE_PIN J16 [get_ports {led[3]}]
set_property PACKAGE_PIN K16 [get_ports {led[2]}]
set_property PACKAGE_PIN M15 [get_ports {led[1]}]
set_property PACKAGE_PIN M14 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]


create_clock -period 20.000 -name sys_clk -waveform {0.000 10.000} [get_ports sys_clk]

5、新建仿真文件,编写仿真文件

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2021/04/21 09:31:43
// Design Name: 
// Module Name: sim_pll
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module sim_pll;
     //input
    reg sys_clk;
    reg rst_n;
    //output
    wire clk_out;
    // 初始化
    pl_pll uut(
    .sys_clk(sys_clk),
    .rst_n(rst_n),//reset,low active
    .clk_out(clk_out)
    );
    
    initial
    begin
        //初始化输入
        sys_clk=0;
        rst_n=1;// // pll reset, high-active
        #1000;
        rst_n=0;
    end
    // create clock;
    always #10 sys_clk=~sys_clk;


endmodule

6、下载程序

实验结果

四个LED灯闪烁,周期为1s

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值