FPGA学习记录
题目三:Clock IP核调用
题目描述
例化IP核,得到六种不同的频率输出,六种输出频率的关系为1:2:3:4:5:6,上板验证 PS:注意LED闪烁频率肉眼可观测
设计思路
首先例化Vivado自带的时钟IP,得到6个不同频率的时钟。 再对例化得到的时钟进行降频,达到人眼可观测的频率。
例化过程
1.新建工程 2.在IP目录里搜索找到Clock Wizard 3.设置输入频率为50MHZ 4.设置6个输出频率 5.生成IP后查看.veo文件 6.例化成功,可以调用
时钟模块代码
module ip_clk_wiz(
input sys_clk
,
input sys_rst_n
,
output clk_12_5m
,
output clk_25m
,
output clk_37_5m
,
output clk_50m
,
output clk_62_5m
,
output clk_75m
,
output locked
);
clk_wiz_0
clk_wiz_0
(
.clk_out1 (clk_12_5m
),
.clk_out2 (clk_25m
),
.clk_out3 (clk_37_5m
),
.clk_out4 (clk_50m
),
.clk_out5 (clk_62_5m
),
.clk_out6 (clk_75m
),
.reset (~sys_rst_n
),
.locked (locked
),
.clk_in1 (sys_clk
)
);
endmodule
分频模块代码
module Frequence_Divider_N(clk
, rst
, clk_o
);
input clk
, rst
;
output clk_o
;
reg
[31:0] counter
;
wire clk_o
;
parameter
N = 67108864;
always @
(posedge clk or negedge rst
)
begin
if (!rst
)
begin
counter
<= 0;
end
else
begin
if (counter
== 32'd67108863
)
begin
counter
<= 0;
end
else
counter
<= counter
+ 1;
end
end
assign clk_o
=counter
[25];
endmodule
顶层模块代码
module clk_top(clk
,rst_n
,clk_o_1
,clk_o_2
,clk_o_3
,clk_o_4
,clk_o_5
,clk_o_6
);
input clk
;
input rst_n
;
output clk_o_1
,clk_o_2
,clk_o_3
,clk_o_4
,clk_o_5
,clk_o_6
;
wire clk_12_5m
;
wire clk_25m
;
wire clk_37_5m
;
wire clk_50m
;
wire clk_62_5m
;
wire clk_75m
;
wire locked
;
wire clk_o_1
;
wire clk_o_2
;
wire clk_o_3
;
wire clk_o_4
;
wire clk_o_5
;
wire clk_o_6
;
ip_clk_wiz
clk_inst(
.sys_clk(clk
),
.sys_rst_n(rst_n
),
.clk_12_5m(clk_12_5m
),
.clk_25m(clk_25m
),
.clk_37_5m(clk_37_5m
),
.clk_50m(clk_50m
),
.clk_62_5m(clk_62_5m
),
.clk_75m(clk_75m
),
.locked(locked
)
);
Frequence_Divider_N
FD_inst1(.clk(clk_12_5m
), .rst(locked
), .clk_o(clk_o_1
));
Frequence_Divider_N
FD_inst2(.clk(clk_25m
), .rst(locked
), .clk_o(clk_o_2
));
Frequence_Divider_N
FD_inst3(.clk(clk_37_5m
), .rst(locked
), .clk_o(clk_o_3
));
Frequence_Divider_N
FD_inst4(.clk(clk_50m
), .rst(locked
), .clk_o(clk_o_4
));
Frequence_Divider_N
FD_inst5(.clk(clk_62_5m
), .rst(locked
), .clk_o(clk_o_5
));
Frequence_Divider_N
FD_inst6(.clk(clk_75m
), .rst(locked
), .clk_o(clk_o_6
));
endmodule
配置xdc约束文件
##############################################
## clock and reset
##############################################
set_property
PACKAGE_PIN Y9 [get_ports clk
]
set_property
IOSTANDARD LVCMOS33 [get_ports clk
]
set_property
PACKAGE_PIN M15 [get_ports rst_n
]
set_property
IOSTANDARD LVCMOS25 [get_ports rst_n
]
##
SW0##
##set_property
PACKAGE_PIN F22 [get_ports stop_tx
]
##set_property
IOSTANDARD LVCMOS25 [get_ports stop_tx
]
##
LED0##
set_property
PACKAGE_PIN U14 [get_ports clk_o_1
]
set_property
PACKAGE_PIN U19 [get_ports clk_o_2
]
set_property
PACKAGE_PIN W22 [get_ports clk_o_3
]
set_property
PACKAGE_PIN V22 [get_ports clk_o_4
]
set_property
PACKAGE_PIN U21 [get_ports clk_o_5
]
set_property
PACKAGE_PIN U22 [get_ports clk_o_6
]
set_property
IOSTANDARD LVCMOS33 [get_ports clk_o_1
]
set_property
IOSTANDARD LVCMOS33 [get_ports clk_o_2
]
set_property
IOSTANDARD LVCMOS33 [get_ports clk_o_3
]
set_property
IOSTANDARD LVCMOS33 [get_ports clk_o_4
]
set_property
IOSTANDARD LVCMOS33 [get_ports clk_o_5
]
set_property
IOSTANDARD LVCMOS33 [get_ports clk_o_6
]
综合设计
上板验证
1.复位 2.不同频率的灯工作 3.某一时刻对齐