设计应用

信号跨时钟域问题分析及验证方法研究

作者:王 菲,张莎莎,王 茜
发布日期:2017-02-15
来源:2017年电子技术应用第1期

0 引言

    近些年,FPGA设计已由过去的译码、编码等简单电路升级为各种复杂接口电路、通讯协议甚至专用算法处理器的实现,因此,单时钟设计远不能满足要求,多个时钟域并存已非常普遍。这必然带来信号跨时钟域问题,如传输丢失、产生亚稳态导致功能错误等。然而在实际中,如何发现跨时钟域问题是一个难点,本文提出一种跨时钟域的验证方法,对日常工作中发现及解决跨时钟域问题有着重要意义。

1 信号跨时钟域带来的问题分析

    信号跨时钟域是影响FPGA设计的可靠性、安全性的重要因素,究其根本原因都是由于亚稳态[1]造成。经过深入的分析归纳,信号跨时钟域问题(CDC问题)主要分为亚稳态的传播、数据丢失和跨时钟域信号再聚合时引起功能出错3类。

1.1 亚稳态的传播

    如图1所示,信号A违反了触发器的建立-保持时间,导致输出B产生振荡,并持续一段时间,所以当clk_B的第二个有效沿到来时,B有可能稳定到一个中间电压,也有可能继续震荡,因此就会给系统带来以下的问题:

wdz8-t1.gif

    (1)不同的扇出会把不稳定的B判定为不同的值,这样就使得系统进入了一个未知的状态,导致某些功能失效。

    (2)造成至少一个周期的传播延时,导致时序问题。

1.2 数据丢失

    触发器的输入A从clk_A时钟域(较快时钟域)进入clk_B时钟域(较慢时钟域)时,由于稳定的时间不够长造成没有被clk_B时钟域采样到,从而丢失正确的数据,如图2所示。

wdz8-t2.gif

1.3 跨时钟域信号再聚合(Re-convergence)时引起功能出错

    当跨时钟域信号再聚合时会引起电路功能错误。由于亚稳态的影响会造成接收到的CDC信号发生不可预测且可变的延迟,这些不同延迟的信号在重新聚合时就可能造成采样失败,从而导致功能错误。图3为跨时钟域信号再聚合的问题模型。这种设计路径常见于多位控制总线信号的跨时钟域传播,跨时钟域再聚合波形分析如图4所示。

wdz8-t3.gif

wdz8-t4.gif

2 跨时钟域验证方法

    对于跨时钟域验证而言,目前业界并没有统一的、成熟的验证方法,这里主要结合多年FPGA设计验证经验,加入对业界领先技术的应用,提出一种多模式、互补型的跨时钟域验证方法。该方法从不同角度、多方位、分阶段对FPGA进行检查,是一种以静态分析为主要技术手段,辅助以动态仿真验证的验证方法,跨时钟域验证的基本流程如图5所示。

wdz8-t5.gif

2.1 结构验证

    结构验证是跨时钟域验证整个流程中的主要环节,它是一种以静态分析为主要技术手段的形式验证方法,通过对FPGA设计综合后存在数据跨时钟域传播的路径进行分析,检查是否存在跨时钟域问题。

    (1)检查是否存在同步电路

    数据跨时钟域传播时(无论是从快时钟域到慢时钟域,或是从慢到快时钟域),由于两个时钟域互不相关,均存在亚稳态的可能性。因此需插入同步电路模块。没有同步电路的设计结构如图6所示。

wdz8-t6.gif

    (2)检查同步电路的正确性

    目前对于单bit信号的同步,主要有电平同步器、边沿同步器及脉冲同步器3种形式。但是无论哪种形式,同步电路的核心为两级寄存器同步。下面列出几种在FPGA设计中常见的无效同步电路形式,如图7~图11所示。

wdz8-t7.gif

wdz8-t8.gif

wdz8-t9.gif

wdz8-t10.gif

wdz8-t11.gif

    (3)检查是否属于多位信号的跨时钟域问题

    对于多位信号,主要是以握手协议、异步fifo的交互方式来完成信号的跨时钟域传播。多bit信号在跨时钟域传播时不能简单地采用同步每位信号来完成。这会带来多位数据的一致性问题,造成目的时钟域采样错误。错误电路结构如图12所示。

wdz8-t12.gif

    (4)检查是否属于跨时钟域信号再聚合问题[4]

    跨时钟域信号再聚合应与多位数据跨时钟域的问题有所区分,问题电路结构如图3所示,源时钟域可以是一个或多个时钟域,不同信号经过目的时钟域同步后由组合逻辑再聚合,再聚合而成的信号在使用时会对后级电路造成威胁。其与多位时钟跨时钟域问题的解决办法均为在源时钟域的输入端引入多位编码方式,即格雷编码。

    通过目前的验证情况看,以上电路结构形式基本可以涵盖90%以上的设计形式。

2.2 协议检查

    协议检查是对结构验证的有力补充,可以发现通过电路结构检查无法发现的跨时钟域问题,这里的协议检查仍然以静态分析为主要技术手段。协议检查的方法是通过对上级系统及任务需求等方面的深入分析,确认问题设计路径上信号的输入形式、变化快慢、保持时间等参数,从而确定是否存在跨时钟域问题。

    典型的协议检查例如数据由快时钟域向慢时钟域传播的情况。如图13的分析可知,当数据由快时钟域向慢时钟域传播时,如果数据保持时间不够则目的时钟域无法采样到数据,这种情况会造成数据丢失。这时就需要结合信号在实际电路中约定的协议来分析判断跨时钟域信号在源时钟域是如何变化的,每次变化保持的时间是多长。

wdz8-t13.gif

    经协议分析检查之后修改电路如图14所示,使得源时钟域的数据保持两个时钟周期从而使目的时钟域能够稳定采样,避免数据丢失的问题,相比图2波形发生的变化如图15所示。当然,这种修改适用于目的时钟域的时钟频率小于两倍源时钟域的情况。

wdz8-t14.gif

wdz8-t15.gif

2.3 CDC动态仿真

    前面的结构验证和协议检查的验证方法都是静态分析的方法,除此之外还可以采用动态仿真的方法对跨时钟域问题进行验证。这里的动态仿真与功能验证中的仿真有很大区别,CDC动态仿真主要是引入断言的方法针对数据跨时钟域时可能存在问题的时序点进行仿真。CDC仿真要在前面静态分析的基础上,在已知电路结构存在跨时钟域问题的前提下,有针对性地设计断言,验证时序的正确性。

    CDC动态仿真分为以下3个步骤:(1)提取属性,(2)断言设计,(3)断言仿真。提取属性和断言设计这两步可先由工具针对常见的CDC设计形式自动产生,这些自动产生的CDC协议检测器在仿真环境下运行,最后通过调用仿真环境(testbench)检查设计的功能是否正确。很多情况下,对于所需验证的时序点,需要人工进行断言的设计,这也是这个环节的难点。

3 总结

    本文主要对目前FPGA设计中存在的跨时钟域问题进行了深入的分析总结,提出了一种多模式、互补型的跨时钟域验证方法。详细讲解了如何分层次、多方位地进行跨时钟域验证以确认设计中的亚稳态问题,为发现目前FPGA产品研制中的跨时钟域问题提供了依据,后续会对方法中的断言设计进行进一步的研究。

参考文献

[1] 周伟.FPGA跨时钟域亚稳态研究[J].电子世界,2012(3):87-89.

[2] Mike Stein,Paradigm Works.Crossing the abyss:asynchronous signals in a synchronous world[].EDN magazine,2003.

[3] San Jose.Real intent introduces CDC verification for altera customers.Real Intent Inc.2008.3.



作者信息:

王  菲,张莎莎,王  茜

(中国航天科技集团公司第九研究院第七七一研究所,陕西 西安710119)

此内容为AET网站原创,未经授权禁止转载。
FPGA 跨时钟域 亚稳态 验证方法