【FPGA学习笔记】如何调用FPGA的PLL IP core 模块

一、简介

  • PLL(Phase-locked loop)即锁相环。是 FPGA 中的重要资源。由于一个复杂的 FPGA 系统往往需要多个不同频率,相位的时钟信号。所以,一个 FPGA 芯片中 PLL 的数量是衡量 FPGA 芯片能力的重要指标。FPGA 的设计中,时钟系统的 FPGA 高速的设计极其重要,一个低抖动, 低延迟的系统时钟会增加 FPGA 设计的成功率。
  • 数字锁相环(PLL):主要用于频率综合。使用一个 PLL 可以从一个输入时钟信号生成多个时钟
    信号。
  • List item

二、PLL IP Core调用
Vivado软件操作为例

1、新建一个 工程,点击 Project Manager 界面下的 IP Catalog
【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第1张图片
2、在IP Catalog中搜索clock,打开下面的 Clocking Wizard,双击打开配置界面。
【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第2张图片
配置界面
【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第3张图片
3、 Clocking Wizard 的名字可以修改, 这里我不做修改。在第一个界面 Clocking Options 里, 我们选择 PLL 资源,输入的时钟频率为 50Mhz。
【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第4张图片
4、 在 Output Clocks 界面里选择时钟输出,这里我选择 clk_out1~clk_out4 四个时钟的输出,频率分别为 100Mhz, 75Mhz, 50Mhz, 25Mhz。这里还可以设置时钟输出的相位,我们不做设置,保留默认相位,点击 OK 完成,(我们可以在左侧预览)
【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第5张图片
5、在弹出的对话框中点击 Generate 按钮生成 PLL IP 的设计文件。
【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第6张图片
6、这时一个 clk_wiz_0.xci 的 IP 会自动添加到我们的 项目中, 可以双击它来修改这个 IP 的配置【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第7张图片
选择 IP Sources 这页,然后双击打开 clk_wiz_0.veo 文件,这个文件里提供了这个 IP 的实例化模板。我们只需要把框框的中内容拷贝到我们 verilog 程序中,对 IP 进行实例化。
【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第8张图片
7、下面新建一个顶层文件,并将pll 实例化模板copy进去,做一些修改
【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第9张图片
【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第10张图片
代码如下:

`timescale 1ns / 1ps

module pll_test(
 input      sys_clk,            //system clock 50Mhz on board
input       rst_n,             //reset ,low active
output      clk_out_100M,           //pll clock output 
output      clk_out_75M,           //pll clock output 
output      clk_out_50M,           //pll clock output 
output      clk_out_25M           //pll clock output 

    );
    
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_out_100M),                // OUT 200Mhz
    .clk_out2(clk_out_75M),               // OUT 100Mhz
    .clk_out3(clk_out_50M),              // OUT 50Mhz
    .clk_out4(clk_out_25M),    // OUT 25Mhz	 
    // Status and control signals	 
    .reset(~rst_n),        // pll reset, high-active
    .locked(locked));     // OUT

endmodule


仿真文件如下:

`timescale 1ns / 1ps
//
// Module Name: vtf_led_test
//

module vtf_pll_test;
	// Inputs
	reg sys_clk;
	reg rst_n;

	// Outputs
    wire clk_out;

	// Instantiate the Unit Under Test (UUT)
	pll_test uut (
	.sys_clk(sys_clk),            //system clock 50Mhz on board
    .rst_n(rst_n),             //reset ,low active
    .clk_out_100M(clk_out_100M),           //pll clock output 
    .clk_out_75M(clk_out_75M),           //pll clock output 
    .clk_out_50M(clk_out_50M),           //pll clock output 
    .clk_out_25M(clk_out_25M)           //pll clock output 
	);

	initial begin
		// Initialize Inputs
		sys_clk = 0;
		rst_n = 0;

		// Wait 100 ns for global reset to finish
		#100;
          rst_n = 1;        
		// Add stimulus here
		#20000;
      //  $stop;
	 end
   
    always #10 sys_clk = ~ sys_clk;   //5ns一个周期,产生50MHz时钟源
   
endmodule


仿真【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第11张图片

结果:

【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第12张图片
【FPGA学习笔记】如何调用FPGA的PLL IP core 模块_第13张图片

有问题可以留言私信,看到必回

你可能感兴趣的:(学习笔记,fpga,数字ic,fpga开发,学习笔记,PLL,经验分享,数字IC学习‘)