3 一种非常巧妙的方案,基于lvds实现1.25Gbps的异步串行通信



内容简介

2024-01-31

全文共2547字,阅读大约需要6分钟,基于lvds的异步串行通信有很多种实现方法。Xilinx提供了一种比较有意思的方案,不仅构造巧妙而且速率还能到1.25Gbps,也就是《XAPP523》所介绍的内容。相关手册和代码可以从公众号的【资料下载】中获取。


01

简单介绍下实现方案


    一般来讲,用低压差分信号 (LVDS) 实现设备间数据交换的常用方法有以下这几种:


方法 1

发送端提供数据传输的伴随时钟,接收端根据伴随时钟对数据进行采样,像MIPI、HDMI就是采用这种方案。

方法 2

在数据中包含时钟信息,在接收端采用时钟恢复技术将时钟从数据中恢复出来,当然,并不是真的从数据中分离出时钟,而是能够实现相位对齐,例如SRIO、PCIE等高速串行通信。

方法 3

多倍频时钟采样,一般五倍频的采样速率可以保证数据采集的准确性,对于低速数据交换还是不错的,但对传输速率较高的通信场景就无能为力了。

方法 4

在数据传输前,先进行训练,发送端发送训练码,这个码是实现约定好的一组数据,接收端收到训练码后调整IDELAY的抽头值,找到最佳采样窗口,这种方法得单独写一段训练逻辑,而且训练码简单了还不行,容易出问题。


    《XAPP523》提供的方案是上述四种之外的另外一种方案,该方案可在数据传输速率与采样时钟同频的情况下实现高达1.25Gbps的异步串行通信。实现原理是通过同频不同相的时钟对数据进行多次采样,以获得最理想的数据采样点。如下图所示,数据采用625MHZ的DDR模式进行发送,也就是1.25Gbps,在接收端将差分信号的P和N相移45度,用相位差90度的4个625M时钟进行采样,如此对于每bit数据就相当于有四个采样点(P 和 N 各两个),每两个采样点间隔为45度,对于625M时钟也就是200ps。然后根据这四个采样点值的变化规律,确定采样值。



02

多相位采样的实现架构


    多相位采样就是用多个同频不同相的时钟对数据进行采样,关键点就是如何构造出一个这样的模型。Xilinx提供的方案是利用IDELAY使得输入差分信号间产生一定的相位差,再用多个时钟去进行采样,这就相当于对单bit进行了4次采样,如下图所示。数据采样DDR模式进行发送,所以在时钟的上升沿和下降沿都要进行采样。所以在同一时刻,4个时钟是对前后两个周期的数据进行采样,所以相当于对每bit采了两个点,而通过对差分信号的相移,也就是同时刻“P”和“N”的不同位置进行采样,且偏差为45度,而此刻“P”和“N”表示的是同一个数,所以也就是对同一个数4个位置进行采样,分别是0度、45度、90度和135度。



    “P”和“N”的相位差是由“IDLEAY”和 “IDELAYCTRL”这两个原语共同实现的。如下图是采样的示意图。




03

IDLEAY如何使用


    每一个BANK都有一个IDELAYCTRL,用来对该BANK的所有IDLEAYE2进行校准。如下图所示,其中IDLEAY的参考时钟不能任意取值,可以为 190到210、290 到310,390到410这几种,但不同系列不一定都能设置,例如A7就不能设置390到410MHZ。



    如下图是IDELAYE,差分信号分别进入这两个IDLEAY,这两个原语调用的区别就在于“IDELAY_VALUE”值得不同。其中M的是0,S的是4。这样设置就可以实现由IDELAY输出相位差45度了,也就是200ps。


    IDELAY的输出相位偏移是根据参考时钟和“IDELAY_VALUE”值来决定,最大偏移是半个时钟周期,对于该参考时钟就是1.6ns,“IDELAY_VALUE”值最大为31,故每份为1600ps/31=51.6ps,我们需要偏移200ps,所以200/51.6 = 3.875≈4。

 

 


04

采样点是如何输出的


  完成偏移后就要将信号分别送入ISERDESE2模块,该模块配置为“OVERSAMPLE”模式,可见需要四个输入时钟,其中“IntClk0_n”是“Clk0”的取反,“IntClk90_n”是“Clk90”的取反,输出是4bit数据。



    本模块逻辑的示意图如下图所示,简单理解就是实现4个时钟的采样。采的是2bit的数据,每bit是两个采样点。

 

 

    如下图是过采样逻辑图的放大图片。可见第一拍是用各自的时钟进行采样,第二拍出现了跨时钟域的情况,例如用CLK采OCLK输出数据,第三排则统一用CLK采样,为什么要这样做呢?不担心出现亚稳态么?其实采样并非正真意义上的跨时钟域,因为4个时钟有着严格的相位关系且都是单沿采样。例如偏移“OCLK”要滞后“CLK”90度,在第二拍采样时相当于在“OCLK”采样延时270度后采样,所以不会出现亚稳态,用“OCLK”采“CLKB”、“OCLKB”也是同样的道理,分别延时90度和180度采样,在第三排则都可以用“CLK”来采样,使其信号均在“CLK”时钟下进行处理。

 


    数据发送是采用DDR模式,也就是在时钟的上升沿和下降沿都发送数据,所以每个“ISERDES”完成了单比特数据的两个采样点的采样,所以Q1、Q3可认为是上升沿采样数据,Q2、Q4可认为是下降沿采样数据。差分信号“P”和“N”通过IDELAY实现了角度偏移,且“N”要比“P”滞后45度,根据PN特性通过两个ISERDES采样点的组合则实现了单比特的4倍采样。


 

    根据上图可见“N”要滞后“P”45度,而在CLK采样时,可认为采的“N”的是最开始的点,所以采样输出会有如下排列




05

内部训练完成跨时钟域


    如下图是该方案的时钟架构。用于ISERDESE2的CLK和CLK90时钟仅适用于I/O BANK。数据必须从ISERDESE2传输到逻辑资源。也就是在BUFIO时钟网络采集的数据要在BUFG时钟网络处理,必须使用时钟域交叉(CDC)技术。由于二者没有严格的相位关系,所以需要内部进行相位训练。



        校准方法是再找一组ISERDES和OSERDES进行自环,这组需要时序约束来固定位置。OSERDES加载固定的数据,并通过BUFG时钟树(IntClk、IntClkDiv)中的时钟进行计时。OSERDESE2的输出是IntClk(625MHz,BUFG)时钟速率下的时钟模式。通过反馈路径,从BUFIO时钟树运行的邻居ISERDESE2捕获时钟模式。数据捕获ISERDESE2在同一时钟树上运行。


    使用这种技术,可以测量两个时钟之间的相位关系。利用MMCM与小型状态机的独立相移能力,BUFG时钟相移至与BUFIO时钟相匹配的相位。CLK90时钟(625 MHz)与CLK时钟(625 MHz)一起移相,而IntClk时钟(625 MHz)与IntClkDiv时钟(312.5MHz)一起移相。



06

数据恢复的方法


    采样是在IOB中完成的,但采样输出数据并非可用数据,只是单纯的完成了采样步骤。我们采集了8个点,包含了两比特的数据信息,需要筛选得出真正的可靠数据,解析的逻辑是在“Dru.vhd”模块实现,如下图所示。总的来说是根据采样方案以找沿的方式找到理想采样点,并对多个周期数据进行组合,最终形成一个10bit的原始数据输出,这个原始数据并不是恢复的与发送端一样的数据,还需要完成对齐操作,例如采样8B/10B编码进行数据对齐。


其实对于解析,我们可以做如下理解:

1、判断0~45、180~225度有没有跳变沿,如果有那么延后90度左右肯定是稳定数据,

2、判断45~90、225~270度有没有跳变沿,如果有那么延后90度左右肯定是稳定数据,

2、判断90~135、270~315度有没有跳变沿,如果有那么延后90度左右肯定是稳定数据,

2、判断135~180、315~360度有没有跳变沿,如果有那么延后90度左右肯定是稳定数据,








快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~

有建议、有需求、有疑问、联系我

<