FPGA-全局时钟缓冲IBUFG BUFG IBUFGDS ODDR2

学习内容

全局时钟缓冲,输入缓冲,输出缓冲

开发环境

xilinx spartan6、ISE14.7、modelsim10.5

写在前面的话

当你用ISE14.7时可能会出现如下的报错
This design contains a global buffer instance, <clk_inst/clkout3_buf>, driving the net, <clk_out_OBUF>, that is driving the following (first 30) non-clock load pins.
This design contains a global buffer instance,
等等
(上边的报错主要是因为如DCM出来的时钟信号要经过ODDR2才能引导我们外部的引脚)你会出现类似的报错,学习本篇文章后解决办法很简单,当然你不想学习也可以,直接参照本篇文末的的做法对于spartan6可以添加ODDR2来解决这个问题。
但是本文不限于解决这一种错误,本文的主要目的是了解和学习相关概念和思想,毕竟原语和IP核所包含的东西是不一样的,比如我们调用的PLL IP核是包含IBUFG和BUFG的,但是我们自己写PLL的话不能忘记的

知识总结

xilinx原语总结 包括BUFG IBUF和IBUFDS IBUFG和IBUGGDS OBUF和OBUFDS等

当我们的FPGA要使用外部时钟或者将时钟输出到外部引脚的时候该怎么做?

1.当我们使用外部时钟的时候,首先连线的时候一定要接到全局时钟引脚,平时用得最多的还是IBUFG+DCM(PLL)+BUFG方案,如下图所示。将时钟管脚输入的时钟作为IBUFG的输入,然后将IBUFG的输出作为DCM(PLL)的输入,将经DCM(PLL)频率变换后的输出再作为BUFG的输入这种方案使用方法最为灵活,对全局时钟的控制更加有效。通过DCM(PLL)模块不仅能对时钟进行同步、移相、分频、倍频等变换,而且可以使全局时钟的输出达到无抖动延迟(“0”skew)。简单来说就是
全局时钟I/O口->IBUFG->PLL
2.当把FPGA中的时钟(比如DCM和PLL输出的时钟)输出到普通I/O口时,不能直接输出,要经过BUFGODDR2,但是需要注意的是如果我们调用的是IP核那么不需要调用BUFG的原语,因为IP核已经包括了BUFG,只需要调用ODDR2即可,如果DCM和PLL是通过原语编写的那么我们需要加上BUFG和ODDR2。简单来说就是
内部使用的应该是 PLL -> BUFG->
外部管脚输出的 应该是 PLL -> BUFG -> ODDR -> PIN
ODDR2的代码如下:

ODDR2 oddr2_inst
	(
	 .D0(1'b1),
	 .D1(1'b0),
	 .CE(1'b1),
	 .C0(clk_in),  
	 .C1(!clk_in), 
	 .R (1'b0),
	 .S (1'b0),
	 .Q (clk_out)
	);
	

其中clk_in为我们经过BUFG的时钟信号,经过ODDR2后为clk_out可以输出到我们的普通I/O口不会报错。
为什么要用ODDR处理?因为如果直接从 BUFG 上连接到 OBUF 上,在编译器 map 的过程中就会出现错误,为避免这个错误,另一种方法就是在约束文件中加上一条约束,让编译器忽略时序约束的要求,直接通过普通逻辑资源连接。但这样 Clock 输出的时延和抖动(Jitter)都会变差。

Spartan6时钟资源介绍

时钟资源
时钟布线资源具有高速、低SKEW的特点,它对系统设计非常重要,即使系统速率不高,也应该关注时钟设计,以消除潜在的时钟危险。Spartan-6器件包含16个全局时钟资源40个I/O区域时钟资源。全局时钟用于系统时钟,而I/O区域时钟专用于I/O串行/解串(ISERDES和OSERDES)设计。

Spartan-6时钟资源包含以下4种。

全局时钟输入引脚(GCLK)。局时钟多路复用器。I/O时钟缓冲器。时钟布线网络。
包括由BUFGMUX驱动的全局时钟网络和由I/O时钟缓冲器(BUFIO2)、PLL时钟缓冲器(BUFPLL)驱动的I/O区域时钟网络。
时钟输入
每个Spartan-6有32个全局时钟输入引脚,分布在FPGA的四周。时钟输入引脚在片上的分布图如图2-5所示。时钟输入引脚接收外部时钟信号,直接连接片内的DCM/PLL/BUFGMUX/BUFIO2。时钟输入引脚不连接时钟时,用作普通I/O。

一个差分时钟输入需要两个全局时钟输入。成对的时钟输入在标号上是连续的,例如,GCLK0和GCLK1是差分对,GCLK20和GCLK21是差分对。每个全局时钟缓冲器有两个时钟输入,Spartan-6支持最多16对的差分全局时钟输入。

设计中的时钟输入引脚连接IBUFG原语,通常综合工具会分析设计,自动将顶层时钟引脚推演为与IBUFG相连。如果需要更多IBUFG的控制功能,可以通过例化IBUFG的方式,将IBUFG的I端口连到顶层端口,将O端口连接到DCM、BUFG或通用逻辑。

因为第一次接触FPGA资源相关方面知识,暂时更新到这里,以后学习深入了会回头更新。

  • 9
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kelinnn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值