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