基于板子的PL端无时钟晶振,需要从PS端借用clock1(50M)晶振
接下去是自定义clock的IP核封装,为后续的simulation可以正常仿真波形,需要注意顶层文件的设置,需要将自定义的IP核对应的.v文件设置为顶层文件,否则仿真波形会均为高阻态。
将代码和对应的tb激励文件,ip核的一些流程和simulation的仿真波形放在下方:
对应一个时钟输入(50Mhz),5个时钟输出,分别改变了时钟频率、相位和占空比。
仿真后的波形如下:(simulation的仿真并不需要系统的时钟,只是根据程序要求形成波形图)
代码和tb激励文件程序如下:
`timescale 1ns / 1ps
// Create Date: 2024/12/30 16:11:18
// Design Name:
// Module Name: test_025_PLL_Time
//需要将之设为顶层文件
module test_025_PLL_Time(
input sys_clk,
input sys_rst_n,
output clk_out1_100M,
output clk_out2_100M_180deg,
output clk_out3_50M,
output clk_out4_25M,
output clk_out5_duty25
);
wire locked;
//例化
clk_design1 instance_name
(
// Clock out ports
.clk_out1_100M(clk_out1_100M), // output clk_out1_100M
.clk_out2_100M_180deg(clk_out2_100M_180deg), // output clk_out2_100M_180deg
.clk_out3_50M(clk_out3_50M), // output clk_out3_50M
.clk_out4_25M(clk_out4_25M), // output clk_out4_25M
.clk_out5_duty25(clk_out5_duty25), // output clk_out5_duty25
// Status and control signals
.reset(~sys_rst_n), // input reset低电平有效
.locked(locked), // output locked
// Clock in ports
.clk_in1(sys_clk)); // input clk_in1
endmodule
`timescale 1ns / 1ps
// Module Name: tb_PLL_Time
module tb_PLL_Time();
reg sys_clk ;
reg sys_rst_n ;
wire clk_out1_100M ;
wire clk_out2_100M_180deg ;
wire clk_out3_50M ;
wire clk_out4_25M ;
wire clk_out5_duty25 ;
//--------
always #10 sys_clk = ~sys_clk; //20ns一个周期对应50Mhz时钟
initial
begin
sys_clk = 1'b0;
sys_rst_n = 1'b0;
#100
sys_rst_n = 1'b1;
end
//--------
//实现信号的连接:
test_025_PLL_Time u_test_025_PLL_Time(
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n ),
.clk_out1_100M (clk_out1_100M ),
.clk_out2_100M_180deg (clk_out2_100M_180deg),
.clk_out3_50M (clk_out3_50M ),
.clk_out4_25M (clk_out4_25M ),
.clk_out5_duty25 (clk_out5_duty25 )
);
endmodule
但由于此时PL因无时钟晶振,需要借用PS端的晶振的设置而出现的顶层文件的问题,以及在创建IP核初始选择的是自定义,而不是适应Block Design的,所以在Block Design中无法添加对应.v文件的module(会报错),因此只能在simulation中仿真查看波形,无法进行接下去的管脚分配和程序下载的过程。