首页 > 范文大全 > 正文

基于解复用/复用方法实现数据同步及其FPGA实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于解复用/复用方法实现数据同步及其FPGA实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【摘要】本文涉及数字信号传输技术,是一种基于FPGA的通过解复用复用方法实现数据同步的方法,并以一个同源的但有传输延时变化的时钟之间的数据同步为例,分析了该方法在节省FPGA RAM资源上的优势,通过数据证明该方法结构简单、占用逻辑资源少,能有效地降低数据同步的延时,容易满足实际设计的需要。

【关键词】复用;解复用;数据同步;FPGA

1.引言

随着数字系统的规模越来越大、复杂程度越来越高,两个或多个时钟域在逻辑设计中的应用越来越多。在不同的时钟域中,不可避免地会遇到数据的互相传递。由于两个不同的时钟之间会存在一定的相位差和短时的频率抖动,为了使数据能够可靠传输,在进行设计时,必须充分考虑时序对功能的影响,否则会照成两个时钟域之间的数据同步失败。

将数据由异步时钟域转换到同步时钟域通常采用双口RAM缓存数据的方法来实现:用异步时钟作为双口RAM的写时钟,写时钟产生双口RAM的写地址,由写时钟在一个端口写入数据;再用同步时钟作为读时钟,并产生双口RAM的读地址,读时钟在另一个端口读出数据;该双口RAM深度是根据需要容忍的短时频差范围来确定。分别将读写地址用同步时钟采样并进行比较,以判断读写地址之间的距离是否小于可能发生读、写冲突的最小距离,即“危险距离”[1-2],如果是,则将读地址跳转,转到离当前位置最远的地址后,再执行读操作;否则不必调整读地址,直接执行读操作。这样读出来的数据时稳定且正确的,且屏蔽了异步时钟和本地同步时钟之间的相位差以及短时的频率抖动。在读写指针冲突解决好后,可以有效处理异步时钟域的数据同步问题。上述方法的缺陷在于需要依赖可编程逻辑器件中的RAM资源,此外,同步数据的延时时间较长,需要根据双口RAM设计的深度决定。

本文在FPGA上通过解复用、复用实现数据同步,该方法不仅适用于两个同源但传输延时有变化的时钟,也可以适用于非同源的异步时钟,该方法能减少数据传输的延时的同时,可以有效地节省可编程逻辑的资源,不占RAM资源。

2.FPGA实现

FPGA的实现方法如图1所示,由解复用模块、同步模块、复用模块共3个功能模块组成。

解复用模块用异步时钟对异步数据进行1:N解复用,使数据的速率下降到原来的1/N,解复用输出N路数据。并对异步时钟计数,输出sync信号。

图2所示是解复用和复用实现数据同步的时序图,该异步时钟采用上升沿处理,在t0时刻对输入数据开始解复用,解复用后分别在接下来的t(1)到t(N)的N个时钟周期,分别输出D0、D1、D2、….DN-1共N路解复用的数据信号,数据的宽度为N个异步时钟周期,sync信号以2N个异步时钟宽度为周期,每N个异步时钟宽度发生电平跳变,在t0时刻跳变,和D0位置对齐。

需要说明的是:sync的周期T是N的整数倍,为了保证同步时钟能够可靠采样到,推荐sync的脉冲宽度至少大于2个异步时钟周期。

同步模块主要是用本地时钟对异步的sync信号进行同步采样,再对采样后的信号计数。首先,解复用模块输出的sync信号送入同步模块中进行同步处理。同步模块采用同步时钟作为主时钟,图3所示是同步模块的结构示意图,sync信号先送入信号同步单元内,信号同步单元用同步时钟的上升沿或者下降沿对异步sync信号进行采样,分别输出同步1拍的信号sync1和同步2拍后的sync2信号给判断模块单元,用同步时钟下降沿采sync信号,在k0时刻输出sync1,在k1时刻输出sync2。

其次,判断模块单元进行跳变沿的判断:当同步时钟判断sync1不等于sync2时,发出沿触发信号给M位计数器单元进行计数,M位计数器单元最后再将计数器的计数结果送给复用模块。图3所示的y0时刻出发信号给M位计数器单元进行计数。

M位计数器,M的取值为log2N的上取整(即M=log2N),该M位计数器的调整策略为:

(1)从0到N-1进行计数。当计数器记到为N-1时,再跳变为0。

(2)在沿触发的y0时刻,如果上一次的计数值没有超过预计的范围,则不用调整,继续按(1)进行计数,如果超过预计的范围,则计数器清0。例如N=4时,预计的范围为3、0、1,计数在此范围不进行调整,直接加1;如果为2,表示超过范围,需要调整为0。

复用模块采用同步时钟作输入时钟,按照同步输出的同步计数器数值依次对解复用数据D0 D1 D2….DN-1进行采样,并N:1复用输出。例如图2所示,在y1时刻输出D0,在y2时刻输出D1,在y3时刻输出D2,在y(N)时刻输出DN-1。

3.实验结果与性能分析

3.1 实验过程

以下是利用该方法在Altera FPGA器件上设计一个同源的、但有传输延时变化的时钟之间的数据同步:图4是利用解复用/复用方法实现数据同步过程的时序图。

(1)先用异步时钟I_clk_wr对输入数据i_data将进行1:3解复用,解复用出8路解复用后的数据S0_i_data、S1_i_data、S2_i_data和1路同步信号S_sync。

(2)在同步模块单元中,信号同步模块采用同步时钟I_clk_rd的下降沿对输入的S_sync进行两次同步,S_sync1和S_sync2。

判断模块进行跳变沿的判断:当同步时钟判断S_sync1不等于S_sync2时,发出沿触发信号给2位计数器模块进行计数M=log23=2,S_flag_cnt是3位的计数器,该计数器的预计范围2,当计数到2时,再跳变为0。在输出触发信号的时刻需要判断上一拍的计数器是否为2,如果是2,计数器变为0。如果不为2,则计数器清0,其他时刻计数器依次累加。

(3)复用模块,采用同步时钟I_clk_rd作采样时钟,按照同步计数器数值依次对解复用数据S0_i_data、S1_i_data、S2_i_data进行采样,并3:1复用输出,图4中的O_data为复用的输出数据。

3.2 与利用DPRAM IPcore方法实现的数据同步功能对比

调用Altera的DPRAM IPcore生成双口RAM滤波器模块[8],设计一个位宽为8bit,深度为32字节的双口RAM,与上述方法进行仿真对比,如图5所示,O1_data是利用复用、解复用方法实现数据同步的输出结果,O2_data是利用DPRAM IPCORE输出的结果,对比数据,说明两种方法的输出数据一致。

3.3 FPGA资源和系统时钟速度的对比

上述的查阶跃响应法的实例只需要寄存器单元就可以实现,如果采用Altera Cyclone IV系列器件,型号为EP4CGX150(该器件具有149,760LEs(逻辑单元)和6,480Kbit嵌入式存储器[9]),编译工程进行对比,该方法只需要使用92LEs;而采用Altera DPRAM IPcore实现,需要占用32 LEs、256Memory Bits和1个M9K。如果输入数据的位宽比较大,节约RAM的优势更加明显。因此,采用解复用/复用方法实现的数据同步,可以节省FPGA的RAM资源。

4.结束语

从仿真和实验结果可以看出,解复用、复用实现数据同步的方法不仅可以适用于非同源的异步时钟,也可以适用于同源但有传输延时变化的时钟,这种方法能有效地减少数据传输的延时,如实例中延时小于3个时钟周期;同时采用寄存器实现,有效地节省可编程逻辑的资源,不占RAM资源。

参考文献

[1]莫毅群,方有纲,王峰.一种可编程逻辑器件实现数据交换的方法及其结构[P].CN200510130524.3,2005-12-14.

[2]孟庆锋.一种将异步时钟域转换成同步时钟域的方法[P].中国.CN03153668.9,2003-8-19.

[3]傅仙伟,赵翠芳,张长江.基于fpga的高速采样系统实现[J].微型机与应用,2012,31(6):19-21.

[4]谢修祥,王广生.异步多时钟系统的同步设计技术[J].电子工程师,2005,31(5):33-37.

[5]陈立万,黄青龙,刘万里.基于FPGA的数据采集系统的设计[J].合肥工业大学学报(自然科学版),2011,34(3):359-362.

[6]柳震,郭黎利,王鹏宇.通信数据同步中基于FPGA的一种有限任意长FIFO的生成办法[J].自动化技术与应用,2011(3):40-42.

[7]廖艳,王广君,高杨.FPGA异步时钟设计中的同步策略[J].自动化技术与应用,2006,25(1):67-68.

[8]Altera Corporation.Internal Memory(RAM and ROM)User Guide[M].2012.11:Chapter 3.

[9]Altera Corporation.Cyclone Device Handbook [M].2012,10,Volume 1.

作者简介:

周恒箴(1979―),女,福建福州人,硕士,FPGA工程师,主要从事逻辑设计和硬件电路设计工作。

高凤玲(1976―),女,湖北宜城人,大学本科,EDA设计工程师,主要从事电路EDA设计工作。