FPGA常用IP核

ZLJ_Nice / 2023-08-13 / 原文

前言:

芯片行业中的IP,一般称为IP(Intellectual Property)核,是具有知识产权核的集成电路芯核的总称。说白了就是厂家实现的具有特定功能工具,然后我们可以直接调用,就相当于是函数库吧,如果要定制IP核的化是需要氪金的,对于学习来说,免费的就够用啦。

在FPGA里,我用的是zynq-7000系列,有一个时钟管理器,包括MMCM与PLL,两者功能类似,PLL可以看作是MMCM的的子集,网上说MMCM相对于PLL的优势就是相位可以动态调整。

一、PLL锁相环

作用:产生高质量,低抖动的时钟信号,可以调频,调相,调占空比的功能。

具体原理不写了先,等以后再看,是一个反馈电路

使用方法:
1 选择IP Catalog,找到自己想要使用的IP核,然后双击需要的IP核,进行配置即可。
image
2 配置界面。
(1)基本设置
image
(2)配置输出
image
其他的没有配置,暂时用不到。
3 生成IP核。
配置好后点击OK,generate即可,生成后的IP在源文件目录中的样子如下:
image

点击源文件下的IP Sources,找到例化模板。
image

然后复制模板就行例化即可。
image

3 使用IP核。
在需要的位置直接例化IP核即可。

module pll(
    input sys_clk,
    output clk_100m,
    output clk_25m,
    output clk_s_90,
    output clk_d_20,
    output locked
);
    
    pll_ip pll_ip_inst
    (
        // Clock out ports
        .clk_100m(clk_100m),     // output clk_100m
        .clk_25m(clk_25m),     // output clk_25m
        .clk_s_90(clk_s_90),     // output clk_s_90
        .clk_d_20(clk_d_20),     // output clk_d_20
        // Status and control signals
        .locked(locked),       // output locked
       // Clock in ports
        .pll_clk(sys_clk)
     );      // input pll_clk
    
endmodule

4 测试IP核。
Testbench代码如下:

`timescale 1ns / 1ns
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2023/08/13 09:19:14
// Design Name: 
// Module Name: tb_pll
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module tb_pll();
    
    reg sys_clk;
    
    wire clk_100m;
    wire clk_25m;
    wire clk_s_90;
    wire clk_d_20;
    wire locked;
    
    initial sys_clk = 1'b1;
    
    always #10 sys_clk = ~sys_clk;
    
    
    pll pll_inst(
        .sys_clk    (sys_clk ),
        .clk_100m   (clk_100m),
        .clk_25m    (clk_25m ),
        .clk_s_90   (clk_s_90),
        .clk_d_20   (clk_d_20),
        .locked     (locked  )
    );
    
endmodule

5 结果。
image
从locked置1开始,就说明时钟信号稳定了,其他四路信号经过测试结果也正确。

正在更新中。