FPGA学习记录(3)——Clock IP核调用及上板验证

it2026-02-16  9

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, //12.5Mhz 时钟频率 output clk_25m, //25Mhz 时钟频率 output clk_37_5m , //37.5Mhz 时钟频率 output clk_50m , //50Mhz 时钟频率 output clk_62_5m ,//62.5Mhz 时钟频率 output clk_75m ,//75Mhz 时钟频率 output locked //MMCM/PLL 锁定指示 ); //***************************************************** //** main code //***************************************************** //MMCM/PLL IP 核的例化 clk_wiz_0 clk_wiz_0 ( // Clock out ports .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), // 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

分频模块代码

module Frequence_Divider_N(clk, rst, clk_o); input clk, rst; output clk_o; reg [31:0] counter; wire clk_o; parameter N = 67108864; //改变N的值变成任意偶分频,同时counter的范围需要相应修改 2E26 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 ; //12.5Mhz 时钟频率 wire clk_25m ; //25Mhz 时钟频率 wire clk_37_5m ; //37.5Mhz 时钟频率 wire clk_50m ; //50Mhz 时钟频率 wire clk_62_5m ;//62.5Mhz 时钟频率 wire clk_75m ;//75Mhz 时钟频率 wire locked; //MMCM/PLL 锁定指示 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.某一时刻对齐

最新回复(0)