赞
踩
本文以Xilinx ZYNQ为例对FPGA的时钟资源进行介绍。
时钟资源主要有以下几方面:
全局时钟(Global clocks)为整个设备提供时钟;
区域时钟(Regional clocks)为一个区域(和相邻区域)的时钟提供时钟;
IO 时钟(IO clocks)为 IO 结构提供时钟;
时钟管理模块(Clock management tiles)提升时钟质量,如 MMCM(可动态调整)和 PLL。
全局时钟Clock Backbone是全局贯穿的主干道,借助HROW的道路可以为所有的同步原件提供时钟,也将整片FPGA分为左右两部分,局部时钟Clock Region又分为不同的区域,每个区域被HROW分为上下两部分。将上图中阴影部分单独拿出来,如下图:
BUFG:全局时钟缓冲器;BUFH:水平时钟缓冲器;BUFIO:IO时钟缓冲器;BUFR:区域时钟缓冲器;BUFMR(一般用不到);MMCM和PLL都是为了提高时钟质量,但MMCM可以动态调整。
先创建一个工程,并在设计文件中对端口做定义:
- module ip_clk_wiz(
- input sys_clk,
- input sys_rst_n
- );
- endmodule
1) IP Catalog;
2)搜索栏clock,并选择Clocking Wizard双击打开;
3)时钟命名;选择MMCM/PLL;选择平衡性能;选择输入频率(与外部晶振对应)
4)选择输出时钟个数与频率/相位;
5)根据芯片高/低电平复位有效,选择对应的复位类型。
创建成功:
从.veo文件复制IP模板,粘到设计文件中并将端口连接:
- `timescale 1ns / 1ps
-
- module ip_clk_wiz(
- input sys_clk,
- input sys_rst_n,
-
- output clk_out1,
- output clk_out2,
- output clk_out3,
- output clk_out4,
- output locked
- );
-
- clk_wiz_0 instance_name
- (
- // Clock out ports
- .clk_out1(clk_out1), // output clk_out1
- .clk_out2(clk_out2), // output clk_out2
- .clk_out3(clk_out3), // output clk_out3
- .clk_out4(clk_out4), // output clk_out4
- // Status and control signals
- .resetn(sys_rst_n), // input resetn
- .locked(locked), // output locked
- // Clock in ports
- .clk_in1(sys_clk)); // input clk_in1
-
- endmodule
TB:
- `timescale 1ns / 1ps
-
- module tb_ip_clk_wiz( );
- reg sys_clk;
- reg sys_rst_n;
-
- wire clk_100M;
- wire clk_100M_180de;
- wire clk_50M;
- wire clk_25M;
- wire locked;
-
- initial begin
- sys_clk =1'b0;
- sys_rst_n = 1'b0;
- #200
- sys_rst_n = 1'b1;
- end
- always #10 sys_clk <= ~sys_clk;
-
- ip_clk_wiz ip_clk_wiz_u(
- .sys_clk(sys_clk),
- .sys_rst_n(sys_rst_n),
-
- .clk_out1(clk_100M),
- .clk_out2(clk_100M_180de),
- .clk_out3(clk_50M),
- .clk_out4(clk_25M),
- .locked(locked)
- );
- endmodule
跑仿真,得到波形图如下图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。