当前位置:首页 > 技术学院 > 技术前线
[导读]只要FPGA设计中的所有资源不全属于一个时钟域,那么就可能存在跨时钟域问题,因为异步逻辑其实也可以看做一种特殊的跨时钟域问题。

只要FPGA设计中的所有资源不全属于一个时钟域,那么就可能存在跨时钟域问题,因为异步逻辑其实也可以看做一种特殊的跨时钟域问题。发生跨时钟域问题的必要条件是不同时钟域之间存在信息交互,如果一个FPGA设计中存在多个时钟域的话,这几乎是无法避免的,否则各个时钟域互不相关,那么就相当于把原设计分解为多个独立的小设计,这样的话FPGA设计的功能就无法通过协作来扩展。

那么当两个不同时钟域之间进行信息交互的时候,到底会存在什么问题呢?

首先介绍亚稳态:

触发器的建立时间和保持时间在时钟上升沿左右定义了一个时间窗口,如果触发器的数据输入端口上数据在这个时间窗口内发生变化(或者数据更新),那么就会产生时序违规。存在这个时序违规是因为建立时间要求和保持时间要求被违反了,此时触发器内部的一个节点(或者要输出到外部的节点)可能会在一个电压范围内浮动,无法稳定在逻辑0或者逻辑1状态。换句话说,如果数据在上述窗口中被采集,触发器中的晶体管不能可靠地设置为逻辑0或者逻辑1对应的电平上。所以此时的晶体管并未处于饱和区对应的高或者低电平,而是在稳定到一个确定电平之前,徘徊在一个中间电平状态(这个中间电平或许是一个正确值,也许不是)。

在 FPGA 设计 中,如果一个工程包含多个时钟,正确的时钟匹配和跨时钟域处理至关重要,否则可能会导致亚稳态问题、数据损坏或系统错误。以下是几种常见的方法来处理多个时钟:

1. 确定各个时钟的关系

首先,需要分析时钟之间的关系:

同步时钟(有共同的时钟源,如 PLL 产生的不同时钟):可以直接在时序约束中定义多时钟域。异步时钟(无共同源,例如不同模块由不同时钟驱动):需要跨时钟域处理。2. 处理多个时钟的方法

方法 1:使用 PLL / MMCM 进行时钟同步

适用于多个时钟频率相关的情况(如 100MHz 和 50MHz 来源于同一 200MHz PLL)。

使用 PLL(Phase-Locked Loop)或 MMCM(Mixed-Mode Clock Manager) 生成多个相关时钟,并确保它们是同步的。在时序约束(SDC 文件或 XDC 文件)中正确指定多时钟域。使用 时钟缓冲器(BUFG, BUFGCE, BUFHCE) 以减少时钟偏斜(Clock Skew)。方法 2:跨时钟域信号处理(CDC 处理)

适用于异步时钟(不同来源)的情况

① 单比特信号:使用双/多级寄存器同步

用于跨时钟域的单个信号(如复位、使能信号等)

原理:使用两个或多个级联的 D 触发器(DFF) 进行同步,以消除亚稳态。② 多比特数据:使用 FIFO 进行数据缓冲

适用于异步时钟域之间的数据传输

FIFO(First-In-First-Out 缓冲器) 具有独立的 写时钟 & 读时钟,适用于跨时钟域传输数据。例子:写端口 用 clk_A 作为时钟,写入数据。读端口 用 clk_B 作为时钟,读取数据。FPGA 里常用的 FIFO:Xilinx: xpm_fifo_asyncIntel (Altera): scfifo③ 跨时钟域握手机制(Handshake)

适用于小数据量但需高可靠性的跨时钟通信

双时钟握手协议:发送方等待接收方的 ack 信号,确保数据已被正确接收。Gray Code(格雷码):用于跨时钟域的 地址传输,避免跳变时数据错误。3. 时序约束(Timing Constraints)

在 FPGA 设计中,必须正确设置多时钟的时序约束,否则可能会导致不稳定的行为。

处理时钟域跨越问题的方法

1. 同步器

双边沿触发器同步器:将异步信号转换为与目标时钟对齐的双边沿触发器信号。

三态同步器:通过三态门实现信号跨域同步。

2. 握手协议:使用握手协议确保数据在跨越时钟域传输时的正确性,如使用握手信号来控制数据的有效性和接收阶段。

3. FIFO缓冲区:在不同时钟域之间使用FIFO缓冲区进行数据传输,以平衡不同时钟频率带来的速度不匹配。

4. 时钟插补:使用时钟插补技术,通过插入额外的时钟周期来调整不同时钟域之间的时序关系,缓解时钟域跨越问题。

5. 异步FIFO:异步FIFO可以在不同时钟域之间进行高效的数据传输,通过自适应的方式解决不同时钟频率之间的速度差异。

6. 严格的规范约束:制定严格的时序分析和布线规则,避免设计中出现时序失真,减少时钟域跨越问题的可能性。

应用举例

串口通信:处理串口数据传输时,需要处理串口接收和处理时钟信号的时钟域跨越问题。

多核处理器:在多核处理器系统中,不同核心的时钟频率可能不同,需要处理时钟域跨越问题。

深度学习加速器:在人工智能领域的FPGA设计中,处理神经网络计算单元与整体时钟域的同步问题。

时钟域跨越问题是复杂FPGA设计中常见的挑战之一,需要仔细设计和有效的解决方案来确保系统的稳定性和正确性。通过合理的设计和采用适当的技术手段,可以有效地处理时钟域跨越问题,提高FPGA系统的可靠性和性能。

在实际应用中,工程师需要深入理解各种时钟域跨越问题的原因和可能导致的后果,结合具体的设计需求和约束条件选择合适的解决方案。同时,进行严格的时序分析、仿真验证和布局布线规划也是避免时钟域跨越问题的重要步骤。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭