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

3 篇文章 3 订阅
2 篇文章 0 订阅

一、简介

  • 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
在这里插入图片描述
2、在IP Catalog中搜索clock,打开下面的 Clocking Wizard,双击打开配置界面。
在这里插入图片描述
配置界面

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

`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


仿真在这里插入图片描述

结果:

在这里插入图片描述
在这里插入图片描述

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

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Successful 、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值