Xilinx 7系列FPGA全局时钟缓冲器基本单元

2024-04-22 10:52

本文主要是介绍Xilinx 7系列FPGA全局时钟缓冲器基本单元,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Global Clock Buffer Primitives(全局时钟缓冲器基本单元)在FPGA(现场可编程门阵列)和其他数字系统中扮演着至关重要的角色。这些基本单元被设计用于处理、分配和增强时钟信号,以确保系统中的各个组件都能以精确和同步的方式工作。
表2-2中的基本单元代表了全局时钟缓冲器的不同配置。
在这里插入图片描述

1. BUFGCTRL

BUFGCTRL基本单元如图2-3所示,可以在两个异步时钟之间切换。所有其他全局时钟缓冲器基本单元都是基于BUFGCTRL的某些配置推导而来的。
在这里插入图片描述
BUFGCTRL具有四个选择线,即S0、S1、CE0和CE1。它还有两条额外的控制线,即IGNORE0和IGNORE1。这六条控制线用于控制输入I0和I1。

BUFGCTRL的工作机制是通过选择线和控制线来确定哪个输入时钟信号被传递到输出。选择线S0和S1用于选择输入I0或I1,而CE0和CE1则用于使能或禁用相应的输入。IGNORE0和IGNORE1控制线提供了额外的灵活性,可以在某些条件下忽略输入时钟的变化。

BUFGCTRL的设计是为了在两个时钟输入之间切换,而不会出现任何毛刺(glitch)。当目前所选的时钟在S0和S1改变后从高电平过渡到低电平时,输出将保持低电平状态,直到另一个(待选)时钟从高电平过渡到低电平。然后,新的时钟开始驱动输出。BUFGCTRL的默认配置是对下降边沿敏感的,并且在输入切换之前保持在低电平状态。通过使用INIT_OUT属性,BUFGCTRL也可以配置为对上升边沿敏感,并在输入切换之前保持在高电平状态。

在某些应用中,之前描述的条件可能并不理想。断言IGNORE引脚将使BUFGCTRL绕过检测两个时钟输入之间切换的条件。换句话说,当断言IGNORE时,多路复用器(MUX)会在选择引脚变化的瞬间切换输入。IGNORE0会在选择引脚变化时立即使输出从I0输入切换开,而IGNORE1则会在选择引脚变化时立即使输出从I1输入切换开。

选择一个输入时钟需要一对“选择”信号(S0和CE0,或S1和CE1)被断言为高电平。如果S或CE中的任何一个没有被断言为高电平,那么期望的输入将不会被选中。在正常情况下,不期望S和CE对(所有四个选择线)同时被断言为高电平。通常,一个“选择”对中的一个引脚用作选择线,而另一个引脚则连接高电平。真值表如表2-3所示。
在这里插入图片描述
注意:
①旧输入指的是在此状态达到之前的有效输入时钟。
②对于所有其他状态,输出将变为INIT_OUT属性的值,并且不会切换(toggle)。
对于两个控制信号:S和CE。尽管两者都用于选择所需的输出,但仅建议使用S进行无故障切换。这是因为当使用CE切换时钟时,时钟选择的变化可能比使用S时更快。如果CE引脚的建立/保持时间(Setup/Hold time)被违反,时钟输出可能会产生故障(glitch)。故障是指电路中的瞬时错误信号,可能导致电路功能异常。
另一方面,使用S引脚可以在不考虑建立/保持时间的情况下在两个时钟输入之间切换。因此,使用S切换时钟不会导致故障。

2. BUFG

BUFG是一个具有一个时钟输入和一个时钟输出的时钟缓冲器。这个基本单元是基于BUFGCTRL的,其中一些引脚被连接到逻辑高电平或低电平。BUFG通常用于确保时钟信号的稳定性和质量,减少时钟信号的抖动和偏斜。
图2-5展示了BUFG和BUFGCTRL之间的关系。可以使用LOC约束来手动放置BUFG的位置。
在这里插入图片描述
BUFGCTRL是一个更高级别的控制单元,用于配置和管理BUFG的行为。它提供了更多的配置选项,允许用户根据需要调整BUFG的工作方式。然而,BUFG可以被视为BUFGCTRL的一个简化版本,其中某些引脚被固定连接到高电平或低电平,从而限制了其配置选项。

3. BUFGCE和BUFGCE_1

都是具有一个时钟输入、一个时钟输出以及一个时钟使能(enable)线的时钟缓冲器。这些基本单元都是基于BUFGCTRL的,其中一些引脚被连接到逻辑高电平或低电平。图2-7展示了BUFGCE和BUFGCTRL之间的关系。
在这里插入图片描述
BUFGCE的时钟使能线允许设计者动态地控制时钟信号的传递。当使能线被激活(通常是置为高电平)时,时钟信号会从输入传递到输出;当使能线被禁用(置为低电平)时,时钟输出会被停止或保持在当前状态,这取决于具体的FPGA实现。

BUFGCE的切换条件与BUFGCTRL类似。如果CE(时钟使能)输入在即将到来的上升时钟边沿之前为低电平,那么接下来的时钟脉冲不会通过时钟缓冲器,并且输出将保持低电平。在时钟信号处于高电平期间,CE的任何电平变化都不会产生影响,直到时钟信号变为低电平。当时钟被禁用时,输出保持低电平。然而,当时钟正在被禁用时,它会完成时钟高电平的脉冲。

由于时钟使能线使用BUFGCTRL的CE引脚,因此选择信号必须满足建立时间要求。违反这个建立时间可能会导致出现毛刺(glitch)。建立时间是指信号在到达其目标之前必须保持稳定的最短时间,以确保电路能够正确响应。在BUFGCE的情况下,如果CE信号在时钟边沿到达之前没有足够的建立时间,可能会导致输出不稳定或产生意外的脉冲,这可能会对系统的稳定性和性能产生负面影响。

BUFGCE_1与BUFGCE非常相似,但它们的切换条件有所不同。如果CE输入在即将到来的下降时钟边沿之前为低电平,那么接下来的时钟脉冲不会通过时钟缓冲器,并且输出将保持高电平。在时钟信号处于低电平期间,CE的任何电平变化都不会产生影响,直到时钟信号变为高电平。当时钟被禁用时,输出保持高电平。然而,当时钟正在被禁用时,它会完成时钟低电平的脉冲。

与BUFGCE一样,BUFGCE_1的CE引脚也用于控制时钟信号的传递。不同的是,BUFGCE_1对下降时钟边沿敏感,而BUFGCE则对上升时钟边沿敏感。这种差异使得BUFGCE_1能够在不同的应用场景中提供更大的灵活性。

4. BUFGMUX和BUFGMUX_1

都是带有两个时钟输入、一个时钟输出以及一个选择线的时钟缓冲器。这些基本单元基于BUFGCTRL,其中一些引脚被连接到逻辑高电平或低电平。图2-10展示了BUFGMUX和BUFGCTRL之间的关系。
在这里插入图片描述
BUFGMUX的主要功能是根据选择线的状态来选择并传递两个输入时钟信号中的一个到输出。选择线通常是一个二进制信号,当它为高电平时,BUFGMUX会选择并输出第一个时钟输入;当它为低电平时,则会选择并输出第二个时钟输入。这种能力使得BUFGMUX在需要动态切换不同时钟源的应用中非常有用,比如在不同工作模式之间切换、故障切换或时钟门控等场景。

5. BUFGMUX_CTRL

BUFGMUX_CTRL具有两个时钟输入、一个时钟输出以及一个选择线,这使得它能够在两个不同的时钟源之间切换,并将选定的时钟信号传递到输出。图2-13展示了BUFGMUX_CTRL和BUFGCTRL之间的关系。
在这里插入图片描述
BUFGMUX_CTRL的设计基于BUFGCTRL,并通过一些引脚连接到逻辑高电平或低电平来实现其功能。这种设计使得BUFGMUX_CTRL能够利用BUFGCTRL的灵活性和性能优势,同时增加了额外的控制选项,以满足更复杂的时钟管理需求。

BUFGMUX_CTRL使用S引脚作为选择引脚。S可以在任何时候进行切换,而不会导致毛刺(glitch)的产生。S引脚的建立时间(Setup time)和保持时间(Hold time)用于确定在切换到新时钟之前,输出是否会传递之前所选时钟的额外脉冲。

6. 其他模型

① 使用BUFGCTRL的异步MUX

在某些情况下,应用程序需要立即在时钟输入之间切换,或者绕过BUFGCTRL的边沿敏感性。一个例子是当其中一个时钟输入不再切换时。如果发生这种情况,时钟输出将不会具有正确的切换条件,因为BUFGCTRL从未检测到时钟边沿。在这种情况下,需要使用异步MUX。图2-15展示了使用BUFGCTRL的异步MUX设计示例。/img-blog.csdnimg.cn/direct/efc306de553043bc95c793e7c24d95de.png)

异步MUX允许在不考虑时钟边沿的情况下进行时钟信号的切换。它不受BUFGCTRL的边沿检测机制的限制,因此即使某个时钟输入停止切换,也能实现快速的时钟源切换。

在设计异步MUX时,需要特别注意确保切换过程不会导致时钟信号的失真或毛刺。这通常涉及到对S引脚(选择引脚)的精确控制,以确保在切换过程中时钟信号的稳定性和连续性。

② 带有时钟使能的BUFGMUX_CTRL

带有时钟使能的BUFGMUX_CTRL和BUFGCTRL配置允许在选择输入时钟信号之间进行切换。如果需要,可以使用时钟使能来禁用输出。图2-17展示了BUFGCTRL的使用设计示例。
在这里插入图片描述
在这种配置中,BUFGMUX_CTRL用作多路复用器,它根据S引脚(选择引脚)的状态选择并传递一个输入时钟信号到输出。同时,BUFGCTRL提供时钟使能功能,通过控制CE引脚(时钟使能引脚)的状态来启用或禁用BUFGMUX_CTRL的输出。

当时钟使能被禁用(CE引脚为低电平)时,无论BUFGMUX_CTRL如何选择时钟输入,其输出都将被禁止,即输出时钟信号将被停止。这提供了一种灵活的方式来控制时钟信号的传播,以适应不同的系统需求和工作模式。

这篇关于Xilinx 7系列FPGA全局时钟缓冲器基本单元的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/925592

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

springboot日期格式化全局LocalDateTime详解

《springboot日期格式化全局LocalDateTime详解》文章主要分析了SpringBoot中ObjectMapper对象的序列化和反序列化过程,并具体探讨了日期格式化问题,通过分析Spri... 目录分析ObjectMapper与jsonSerializer结论自定义日期格式(全局)扩展利用配置

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写