IP核在我看来就跟stm32中的一些驱动的库函数一样,可以调用快速使用。不用一步一步的自己写底层原理。
可以加速设计,快速设计代码。
IP核的PLL还有一个MMCM。PLL是锁相环,对时钟进行管理。也是后面使用中很重要的IP核。不同器件需要不同的时钟。
时钟管理单元CMT=PLL+MMCM混合时钟管理(MMCM=PLL+DCM相位调整):倍频、分频、相位偏移、可编程占空比和优化抖动。
这边实验任务是将50MHZ的输入时钟,输出四路不同的时钟频率。分别是100M 反相100M 50M 和 25M
配置好IP核后,通过顶层模块例化
module clk_ip(
clk,
reset_n,
clk_100m,
clk_100m_180,
clk_50m,
clk_25m
);
input clk;
input reset_n;
output clk_100m;
output clk_100m_180;
output clk_50m;
output clk_25m;
wire locked;
wire rst_n;
assign rst_n = reset_n & locked; // 都为高电平时,就是稳定了,复位稳定。
clk_wiz_0 instance_name
(
// Clock out ports
.clk_out1(clk_100m), // output clk_out1
.clk_out2(clk_100m_180), // output clk_out2
.clk_out3(clk_50m), // output clk_out3
.clk_out4(clk_25m), // output clk_out4
// Status and control signals
.reset(~reset_n), // input reset 手册23页高电平有效
.locked(locked), // output locked
// Clock in ports
.clk_in1(clk)
); // input clk_in1
endmodule
唯一注意的地方就是,时钟IP核的复位信号,是高电平有效,所以例化的时候加上了取反。手册23页的。
然后仿真看波形
`timescale 1ns / 1ps
module clk_ip_tb();
reg clk;
reg reset_n;
wire clk_100m;
wire clk_100m_180;
wire clk_50m;
wire clk_25m;
initial clk = 1;
always #10 clk = ~ clk;
initial begin
reset_n = 0;
#201
reset_n = 1;
end
clk_ip clk_ip_inst(
.clk(clk),
.reset_n(reset_n),
.clk_100m(clk_100m),
.clk_100m_180(clk_100m_180),
.clk_50m(clk_50m),
.clk_25m(clk_25m)
);
endmodule
标签:reset,知识点,100m,FPGA,clk,IP,output,时钟
From: https://www.cnblogs.com/cjl520/p/18070802