FPGA常用IP核
前言:
芯片行业中的IP,一般称为IP(Intellectual Property)核,是具有知识产权核的集成电路芯核的总称。说白了就是厂家实现的具有特定功能工具,然后我们可以直接调用,就相当于是函数库吧,如果要定制IP核的化是需要氪金的,对于学习来说,免费的就够用啦。
在FPGA里,我用的是zynq-7000系列,有一个时钟管理器,包括MMCM与PLL,两者功能类似,PLL可以看作是MMCM的的子集,网上说MMCM相对于PLL的优势就是相位可以动态调整。
一、PLL锁相环
作用:产生高质量,低抖动的时钟信号,可以调频,调相,调占空比的功能。
具体原理不写了先,等以后再看,是一个反馈电路
使用方法:
1 选择IP Catalog,找到自己想要使用的IP核,然后双击需要的IP核,进行配置即可。
2 配置界面。
(1)基本设置
(2)配置输出
其他的没有配置,暂时用不到。
3 生成IP核。
配置好后点击OK,generate即可,生成后的IP在源文件目录中的样子如下:
点击源文件下的IP Sources,找到例化模板。
然后复制模板就行例化即可。
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 结果。
从locked置1开始,就说明时钟信号稳定了,其他四路信号经过测试结果也正确。
正在更新中。