ZYNQ初识6(zynq_7010)clock时钟IP核
基于板子的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_in1endmodule
`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 beginsys_clk = 1'b0;sys_rst_n = 1'b0;#100sys_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中仿真查看波形,无法进行接下去的管脚分配和程序下载的过程。