一、程序编写
在工程里面找到实例化后的ip文件,打开之后修改参数即可直接使用
程序如下
module pll
(
input wire sys_clk , //系统时钟50Mhz
output wire clk_mul_2 , //系统时钟经过2倍频后的时钟
output wire clk_div_2 , //系统时钟经过2分频后的时钟
output wire clk_phase_90, //系统时钟经过相移90°后的时钟
output wire clk_ducle_20, //系统时钟变为占空比为20%的时钟
output wire locked //检测锁相环是否已经锁定,
//只有该信号为高时输出的时钟才是稳定的
);
//------------------------ pll_inst ------------------------
pll_ip pll_ip_inst
(
.inclk0 (sys_clk ), //input inclk0
.c0 (clk_mul_2 ), //output c0
.c1 (clk_div_2 ), //output c1
.c2 (clk_phase_90 ), //output c2
.c3 (clk_ducle_20 ), //output c3
.locked (locked ) //output locked
);
endmodule
仿真程序
`timescale 1ns/1ns
module tb_pll();
//wire define
wire clk_mul_2 ;
wire clk_div_2 ;
wire clk_phase_90;
wire clk_ducle_20;
wire locked ;
//reg define
reg sys_clk ;
//初始化系统时钟
initial sys_clk = 1'b1;
//sys_clk:模拟系统时钟,每10ns电平翻转一次,周期为20ns,频率为50Mhz
always #10 sys_clk = ~sys_clk;
//------------------------pll_inst------------------------
pll pll_inst
(
.sys_clk (sys_clk ), //input sys_clk
.clk_mul_2 (clk_mul_2 ), //output clk_mul_2
.clk_div_2 (clk_div_2 ), //output clk_div_2
.clk_phase_90 (clk_phase_90 ), //output clk_phase_90
.clk_ducle_20 (clk_ducle_20 ), //output clk_ducle_20
.locked (locked ) //output locked
);
endmodule
注意:
1、在编程完之后可以对ip核内部参数进行修改
方式一:
方式二:
2、如果不小心把ip核删除了
3、如何复制已经生成过的ip核
建立一个新的文件体系,建立一个新的工程
复制已经生成的ip核有两种方式
方式一:
然后按照上面删除ip重新添加的方法,添加上刚刚复制过来的ip核文件即可
方式二:
使用管理器直接选择第三项
下一步之后就是ip核的参数调整了,可以对一些参数进行设置
4、关于资源
资源管理器,从这里面的颜色深浅可以看出其资源的使用率,当使用率越高颜色就越深
这是因为全局时钟线材质比较好,会有比较低的延时。再有经过全局时钟网络的时钟到达每个寄存器的延时都是相同的