(1.工业和信息化部电子第五研究所 广州 510610;2.重庆赛宝工业技术研究院 重庆 401332)
摘要:随着FPGA功能越来越复杂,其内部设计经常包含多个异步时钟,将FPGA分割为多个时钟域。不同时钟域之间进行的数据和信号通信引入了跨时钟域问题。本文主要阐述了跨时钟域设计常见问题、跨时钟域信号同步方案,在此基础上从验证工程师的角度出发,介绍了如何进行跨时钟域验证的方法和步骤,为更好的进行跨时钟域分析提供了一种思路。
关键词:现场可编程逻辑器件;跨时钟域;亚稳态;同步设计
Method of Signal Synchronization and Analysis of Cross Clock Domain in FPGA
SONG Wen-qiang,HU Yi
(The Fifth Electronics Research Institute of Ministry of Industry and Information Technology,GuangZhou 510610,
China;CEPREI Laboratory,Chongqing 401332,China)
Abstract:With the increasing complexity of the FPGA,most of designs based on FPGA contains multiple asynchronous clocks dividing into multiple clock domains.The cross clock domain problem is introduced when data and signal communication between different clock domains.This paper mainly elaborates the common problems and signal synchronization scheme of cross clock domain.Based on this,the method and procedure of how to verify the time domain is presented.
Key words:FPGA;cross clock domain;metastability;synchronization design
引言
随着电子自动化设计(EDA)技术的发展,现场可编程门阵列(FPGA)已经在许多方面得到广泛应用[1],比如将FPGA应用于通信领域,实现数字调制解调、编码解码,FPGA还在实现通信系统中的各种接口中起着重要作用,如PCI总线、SPI总线、429总线等。在FPGA接口设计中,同步决定了系统的稳定性与接收数据的准确性。但是实际的工程中,纯粹单时钟同步系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免。跨时钟域信号处理不当就会产生亚稳态、采样数据错误、采样丢失和重聚合错误等一系列问题,从而使系统无法正常运行。本文就此讨论了在FPGA设计中跨时钟域设计中常见问题,信号及数据同步的常见方法[2],在此基础上说明了进行跨时钟域分析时方法和步骤。
1.跨时钟域信号常见问题
1.1亚稳态问题
在FPGA系统中,如果数据传输中不满足触发器的建立时间Tsu和保持时间Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)和撤离时间(removal time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态。在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值,这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系[3-5]。
图1 亚稳态示意图
亚稳态产生的原因是不满足触发器Tsu和Th时间。对于同时钟域的信号,可以方便的采用时序约束来保证满足Tsu和Th时间的要求、采用静态时序分析工具的进行测试是否满足要求。但对于异步信号,源时钟和目的时钟相位关系完全不可控,而且会随时间发生变化,这就必然会存在亚稳态的问题。亚稳态的危害主要是破坏系统的稳定性,主要是逻辑误判和亚稳态传播。由于输出在稳定前可能有毛刺、振荡、不固定的电压值,因此亚稳态将导致逻辑误判,严重的情况输出0~1之间的电压值还会使下一级产生亚稳态,即亚稳态的传播。逻辑误判导致功能性错误,而亚稳态传播则扩大故障面[6]。
1.2数据丢失
数据丢失现象经常发生在跨时钟域信号进入快时钟域的信号持续时间太短,如果异步信号的长度小于目的时钟周期,作为采集方的慢时钟域有可能采不到该信号造成数据丢失。为安全起见,通常异步信号保持目的时钟域两个时钟周期长度。
1.3数据聚合错误
数据聚合是指信号在通过不同路径传输后重新聚合到一起使用。通常有几种情况:
1)单个信号多路扇出。如果信号从一个时钟域分多路进入另外一个时钟域,那么很有可能会导致功能上的错误。如图2所示,由于Td的存在,DA1和DA2到达CLKB的时间不同,最终导致fsm1_en和fsm2_en这两个本应该同时有效的信号实际上相差一个CLKB的周期。这很可能会影响到后继的电路功能。
图2 单信号重聚合问题示意图
2)多个信号的重聚合。如果多个信号从一个时钟域进入另外一个时钟域,然后这些信号在目的时钟域中又聚合到一起,那么就有可能因为信号的重新聚合导致电路功能上的异常。如图3所示,原本EN1和EN2转换时钟域后,期望得到的值是0b00和0b11,但由于EN1和EN2到达CLKB时钟域的时间有差异,实际得到的值是0b00、0b10和0b11,最终导致后继电路功能出现问题。
图3 多信号聚合问题示意图
2.跨时钟域信号同步方案
2.1信号同步
2.1.1单个信号
图4 两拍DFF信号同步电路
单个信号跨时钟域同步常用电路是两拍同步,见图4。理论上,采用这种方法可以有效地减少亚稳态继续传播的概率,但是并不能保证第2级输出的稳态电平就是正确电平。两拍同步是大部分同步处理措施的基础,如下面介绍到多位相关信号处理是对多个信号之间相互关系进行分析后,采用合并、抽取特征信号、增加指示信号等形式变为一个信号或逻辑独立再进行两拍同步。同样,数据同步的基础也是两拍同步,如握手协议的请求和应答信号,异步FIFO的地址信号。
2.1.2多位相关信号
当跨时钟域传输多个相互关联信号时,不能采样简单的两拍同步,因为数据传输时多位数据之间的传输延迟不同,有可能造成多位的数据在目的时钟域不同周期被采样,这种多位数据传输时由于数据之间的skew所引起的不能被目的时钟在同一个周期采样的现象称之为多位数据的跨时钟域问题。为简便起见,以两个信号为例。
1)传输两个需要同时有效的信号
目的时钟需要源时钟的两个同时有效的控制信号,这两个控制信号来自于同一个源时钟,有可能会出现时钟之间的偏移,从而导致两个控制信号在目的时钟域的不同周期被采样,在此情形下两个本应该同时起控制作用的信号在目的时钟域失去了作用。
图5 需同时有效的两个信号两拍同步处理问题及解决方法示意图
此种问题产生的原因是两个来自于同一个时钟的控制信号在目的时钟发生作用时产生的多位信号传输的问题。在逻辑设计中,通常可将这两个信号在源时钟中整合为一个信号,然后通过同步逻辑传送到目的时钟,从而消除了多位信号的跨时钟传输问题[7]。
2)传递两个顺序控制的信号
图6 有顺序控制关系两个信号两拍同步处理问题及解决方法示意图
此种问题产生的原因是两个来自于同一个时钟的控制信号在目的时钟发生作用时产生的多位信号传输的问题。在逻辑设计中,可以对前序逻辑进行分析,观察是否在一个信号有效后,其它信号一定会达到有效状态,这时可将该信号作为特征信号而仅传输该信号,那么经过同步逻辑传送到目的时钟,从而消除了多位信号的跨时钟传输问题。
3)传递两个编码控制信号
当具有编码关系的多位数据在不同的时钟之间进行传递时,不同编码信号之间具有skew导致目的时钟采样数据的不一致性,从而导致解码的错误。
图7 有编码关系两个信号两拍同步处理问题及解决方法示意图
考虑到目的时钟在接收多位信号时,无非是个别的信号在接收时晚一个时钟周期或者多位信号撤销时晚撤销一个时钟周期。所以,可以得出以下解决方案:传输数据时增加一位ready_flag的寄存器。源时钟必须在产生需传输的多位数据一个周期之后产生该read_flag信号,必须在需要传输的多位信号撤销之前一个周期撤销ready_flag信号。该read_flag的使能信号需在目的时钟至少保持两个目的时钟周期。
2.2数据同步
2.2.1握手协议
根据不同的设计需求和不同的设计标准,利用两到三个握手信号可以实现数据在不同时钟之间的传递,图8给出了握手信号传递数据的机制。采用的握手信号越多,从一个时钟到另外一个时钟所需要的延迟也越多,同时数据传递的也越准确。对于许多没有限制的传输,两个握手信号足以使数据在两个时钟之间准确的传递。
图8 握手机制传递数据示意图
与两级同步器相比异步握手同步器的信号切换过程很慢需要很多个时钟周期才能完成一组数据的传递。但这种通信方式能够精确传递指定数目的数据。数据信号会持续有效一段时间,可以用于多比特数据的传输,适合于连续处理。当几个电路不能预知相互的响应时间时,握手方法能让数字电路间实现有效的通信。
2.2.2异步FIFO
当主机端的数据连续放入总线时,握手写方式则可能无法正确进行数据同步,可以采用异步FIFO解决这一问题。异步FIFO的读写可以工作在不同的时钟域内,将需要同步的数据利用写时钟暂存在FIFO内部的一个双口RAM里,然后利用读时钟读取暂存在双口RAM里的数据。FIFO的典型结构图如下图所示,它由FIFO读控制逻辑、FIFO写控制逻辑、空/满状态判断模块和一个双端口RAM四部分组成[8]。空满状态的判断由于存在读写地址跨时钟域的问题,容易产生错误,所以FIFO设计的关键是空满标志的产生,一般会将地址通过Gray码编码后传给对方。
图9 异步FIFO结构框图
3.跨时钟域信号验证方法
由于跨时钟域设计不当会引入较多的问题,除在设计阶段由开发工程师对跨时钟域信号进行同步设计外,在设计完成后应由验证工程师对设计进行跨时钟域的分析。跨时钟域分析可借助工具或由人工将跨时钟域信号提取出来,然后再进行分析和验证,主要包含两个阶段:一是协议检查,二是仿真测试。
3.1协议检查
针对跨时钟域信号进行协议检查时,应按照逻辑梳理各信号相互之间的关系,按照关系选择是否应该进行同步化处理,同步化处理措施采用的同步协议是否合理。下面给出两拍同步器、握手协议、异步FIFO等同步协议的原理、应用场景和注意事项等[9-10]。
3.1.1两拍同步
两拍同步器中触发器到触发器路径上的时序裕量可以为潜在的亚稳态信号到达设计的其他部分提供一定的判决时间,以便达到稳定的值。在应用两拍同步器时,为确保跨时钟域信号能够安全传输至目的时钟域,应注意以下几点[11]:
1)跨时钟域信号在源时钟域尽量直接由寄存器驱动,直接输入给同步器的第一级触发器,不经过任何组合逻辑。因为数据传输很重要的一点就是进入接收时钟域的第一级触发器的输入信号不能出现毛刺,而组合逻辑电平不稳定,极易使得同步器采样到不稳定的信号。
2)两拍同步器采样到源时钟域的信号,经过目的时钟两个周期后,才能输出到目的时钟域的逻辑电路中,因此,同步信号传递到新时钟域时存在两个目的时钟周期的延时,这是需要注意的。
3)两拍同步器常应用于单个异步数据的同步,而在同步多位异步数据时,如果多位异步数据存在同时变化的情况,则应考虑过渡虚假数据的产生。
4)不能对一个信号在多个地方进行同步,如果进入亚稳态,它们可能输出不同的值,即使输出同一个数值,时间上也会有差别,如此产生的竞争会对后续电路有影响。
3.1.2握手协议
为了降低系统故障率就需要尽量减少跨时钟域信号数目,使用握手协议可以仅仅对请求信号和应答信号进行同步,使得并行数据有足够的时间满足建立时间和保持时间的要求,所以握手协议能够满足并行数据安全传输的需要。握手协议常应用于解决并行总线信号的同步问题。
3.1.3异步FIFO
异步FIFO的工作原理是先由写时钟把异步数据存储到RAM,稳定后再由读时钟读取数据,从而抑制亚稳态。总线数据同步、高速数据传输、数据在跨越时钟域时需要存储容量大的缓冲时则可以采用异步FIFO[12-14]。
需要着重指出的是,在实际设计中,设计人员对跨时钟域信号有时不进行同步处理。由于目的时钟域对跨时钟域进行捕获时,除可能引起的亚稳态传播外,带来的影响无非是信号早一个时钟出现或者晚一个时钟出现,又或者早一个时钟消失或者晚一个时钟消失,对于很多持续时间比较长的信号,一般不会造成影响。对于亚稳态传播的问题,由于芯片工艺的改进,决断时间越来越短,如果采用的是同步设计一般会产生亚稳态传播的问题。这时应该具体分析不进行同步是否会对目的时钟域逻辑产生影响。
3.2时序仿真
对于复杂的信号关系仅仅借助静态的协议检查不能够确认是否不存在问题,这时需要使用时序仿真测试的手段针对跨时钟域信号进行专门的测试。可使用随机测试的形式测试信号再聚合时产生的问题[15]。
4.小结
FPGA跨时钟域设计时对于跨时钟域信号处理不当容易产生各种问题,跨时钟域分析逐渐成为FPGA设计验证的一个标准流程。本文主要阐述了跨时钟域设计常见问题、跨时钟域信号同步方案。在此基础上从验证工程师的角度出发,介绍了如何进行跨时钟域验证的方法和步骤,为更好的进行跨时钟域分析提供了一种思路。
参考文献:
[1]龙祖利,王子云.FPGA测试技术与ATE实现[J].计算机工程与应用,2011,47(6):65-67
[2]邹晨.FPGA设计中跨时钟域信号同步方法[J].2014,44(4):131-134
[3]俞帆,张伟欣.FPGA设计中的跨时钟域问题[J].现代电子技术,2014,37(7):151-156
[4]徐翼,郑建宏.异步时钟域的亚稳态问题和同步器[J].微计算机信息,2008,24(2):171-172
[5]魏堃.跨时钟域信号同步技术研究[D].西安:西安电子科技大学,2009
[6]周伟,杜玉晓,杨其宇.FPGA跨时钟域亚稳态研究[J].电子世界,2012(3):87-89
[7]胡昌顺,高嵩,吴春瑜等.SOC设计中多bits数据跨时钟域的解决方法[J].辽宁大学学报,2011,38(1):11-15
[8]王杰,王诚,谢龙汉.Xilinx FPGA/CPLD设计手册[M].人民邮电出版社,2011:297-299
[9]Steve Kilts.高级FPGA设计:结构、实现和优化[M].孟宪元,译.北京:机械工业出版社,2009:22-25
[10]唐辉艳,李绍胜.FPGA设计中跨时钟域同步方法的研究[J].铁路计算机应用,2011,20(2):43-47
[11]王晓婷.跨时钟域设计方法研究[D].西安:西安电子科技大学,2012
[12]熊红兵,陈琦.基于FPGA的异步FIFO设计与实现[J].微计算机信息,2006,22(6-2):216-218
[13]黄忠朝,赵于前.一种实现高速异步FIFO的FPGA方法[J].计算机工程与应用,2010,46(3):13-15
[14]王娜,孙钰林,袁素春等.一种多输入情况下FPGA跨时钟域的解决方法[J].空间电子技术,2014,4:74-76
[15]梁骏,唐露,张明.基于随机延时注入的跨时钟域信号验证方法[J].微电子学与计算机,2014,31(2):1-4
作者简介:宋文强(1983-),男,汉族,甘肃人,工业和信息化部电子第五研究所软件质量与工程研究中心,工程师,硕士研究生,主要从事软件可靠性测试和FPGA验证技术研究。
论文作者:宋文强1,胡毅2
论文发表刊物:《电力设备》2018年第9期
论文发表时间:2018/7/3
标签:时钟论文; 信号论文; 亚稳态论文; 目的论文; 数据论文; 多位论文; 两个论文; 《电力设备》2018年第9期论文;