bitslip

本文主要来自UG471和xapp1208

一、背景

        Xilinx中常用selectio处理lvds信号,其中又有bitslip这个功能,本文主要是对bitslip进行的探索和研究。

二、bitslip的介绍

        在设计源代码中实例化ISERDES组件时,通过DATA_WIDTH属性设置捕获的位数。位在CLK时钟下在ISERDES中被捕获,而ISERDES的并行输出在通用互连中使用CLKDIV时钟可用。

因此,CLKDIV是CLK的分频版本。当DATA_WIDTH设置为八且ISERDES在单数据速率(SDR)模式下使用时,CLKDIV是CLK除以八。当ISERDES在双数据速率(DDR)模式下使用时,CLKDIV是CLK除以四。假设DATA_WIDTH设置为八:

  1. 位以CLK速率被捕获到ISERDES的串行->并行输入寄存器中。
  2. ISERDES中的状态机在同样的CLK下生成时钟脉冲,以将位从串行->并行输入寄存器中捕获到内部寄存器中,每当状态机达到DATA_WIDTH设置的值时。在这种情况下,当八位在串行->并行输入寄存器中被捕获时,状态机会为内部寄存器生成一个时钟脉冲。
  3. 内部状态机生成的时钟是外部提供的CLKDIV时钟的等效。这个内部生成的时钟与CLK时钟相关,与外部应用的CLKDIV不是相位对齐的。
  4. 数据通过外部应用的CLKDIV时钟从内部寄存器传输到并行输出寄存器Q。

        下图中显示了一个功能示例(SDR操作)。数据捕获从位值7开始。位按照CLK时钟速率被移入串行->并行输入寄存器。垂直堆叠的块表示寄存器。这些块显示位值为7的位首先被移入,然后在底部结束。最后一个移入的位是值为D的位。当内部寄存器包含八个捕获位时,它捕获来自串行->并行输入寄存器的内容。在接下来的CLKDIV上升沿时,内容移动到并行输出寄存器。那个寄存器随后包含值DCBA0987。

        

        一旦数据从串行->并行输入寄存器传输到内部存储寄存器中,连续的新数据就会在串行->并行输入寄存器中被移入。

        当使用Bitslip功能时,捕获、传输到内部寄存器以及传输到输出寄存器的操作方式相同。当ISERDES的Bitslip输入信号被断言时,串行->并行输入寄存器和内部寄存器之间的数据传输会被延迟一个CLK周期。当数据的传输被延迟一个CLK周期时,会有一个额外的位被移入串行->并行输入寄存器,并且在另一端会丢失一个位。然后,当数据被捕获到内部寄存器中时,看起来就像数据被向右移动了一个位。

        下显示的行为与上图相同,只是在第二个字节被捕获到串行->并行输入寄存器中时执行了Bitslip操作。数据在捕获了八位之后不会立即传输到并行寄存器,而是在九位之后传输。看起来模式向右移动了一个位。移入的第一个位在串行->并行输入寄存器的底部(末尾)丢失。

 

 

         从这两幅图可以看出,变化的是CLKDIV_Int的上升沿,而CLKDIV没有变化,因此同一个CLKDIV能够采集到数据是有限的,可以采集到:

        PNMLKHGF

        NMLKHGFE

        ...

        FEDCBA09

        这是理解Bitslip的关键点。

       因此通道间会存在Byte错位的场景:

        通道差异示意图:通道对应bit,0,1,2,3...对应1个bit;发送端bit0到bit7为1个完整的Byte;发送端bit8到bitF为1个完整的Byte;发送端bit0’到bit7’为1个完整的Byte;

 

在T1时刻

通道1经过bitslip之后可能恢复出一个Data,对应bit 0,到bit7;

通道2经过bitslip之后可能恢复出一个Data ,对应bit8,到bitF;

因此通道1和通道2,在并行接口上数据会差1拍;

 

三、bitslip的实现

解决方案A 

        在CLKDIV速率下旋转串行排序的并行寄存器中的位。为了进行Bitslip或移动所有可能性,需要多达寄存器宽度那么多个CLKDIV时钟周期(参见图4)。

        图4显示了在8位字上可能的所有移位或Bitslip步骤。要执行这些操作,至少需要两个8位寄存器和一个多路复用器。图5到图7详细显示了执行单个Bitslip步骤时发生的情况。

 

 

        步骤a:在开始时(图5),并且没有进行任何Bitslip操作,寄存器作为流水线寄存器起作用。并行数据只是以CLKDIV时钟速率通过寄存器传递

         步骤b:图6显示了调用Bitslip时发生的情况。与以前的设备操作模式一样,跳过了一个位,所有其他位都重新排列为新的设置。这些位的重新排列必须在Bitslip操作之后保持,以便在设计的进一步操作中反映Bitslip操作。

 

                步骤c:图7显示了在之前的Bitslip操作后跳过两位的新Bitslip。对于数据来说,这看起来与以前的设备系列的串行模式完全一样,即好像所有位都向右移动了两位。

        在图5中标记为来自ISERDES、RX_BITSLICE或并行逻辑的输出以及输入寄存器的寄存器可以合并为一个单一的寄存器。将这些寄存器合并可以节省一个CLKDIV时钟流水线级别,而分开使用这些寄存器可以提供更好的时序性能。在参考设计中提供了这个选项作为通用属性。

解决方案B 

        将ISERDES、RX_BITSLICE或其他并行逻辑的输出作为输入,同时将所有位旋转到一组并行放置的寄存器中。这个解决方案需要一个CLKDIV周期来移动所有可能的值。在操作开始时,需要两个时钟周期才能获得有效的输出:一个初始时钟周期用于加载历史寄存器,第二个时钟周期用于加载输出寄存器中的所有位排列。从那时起,每个时钟周期都会产生有效的输出数据。然后,应用程序可以选择具有所需位排列的四位数或字节。当需要检测和匹配预定模式时,这种解决方案是理想的(见图8)。

 

Bitslip in Logic Design Description

参考设计包含了上述描述的两种电路,所选的选项决定了使用哪种电路和哪些选项。参考设计作为一个可实例化的单一组件提供,带有一组可选择的选项。两种可能的电路中的每一种都使用自己的一组选项来应用设计特性。

参考设计组件如图1所示。以下是引脚功能:

  1. DataIn:4位或8位输入。在4位模式下,使用LSB的四位数。
  2. BitSlip:控制输入,在高脉冲时,对解决方案A进行Bitslip操作,对解决方案B进行电路使能。
  3. SlipVal:3位输入,允许电路在启用输出之前进行指定次数的Bitslip操作。
  4. CompVal:8位输入,用于在数据中检测模式。在4位模式下,使用LSB的四位数。
  5. Ena:电路使能,高电平时激活。
  6. Rst:电路复位,高电平时激活。
  7. Clk:时钟,通常等于CLKDIV时钟。
  8. DataOut:4位或8位输出。在4位模式下,使用LSB的四位数。
  9. ErrOut:错误和状态输出:
    1. “Slip”模式:在执行八次Bitslip操作时产生高脉冲。
    2. “Nmbr”模式:表示在“Nmbr”次Bitslip操作后输出数据已准备好。
    3. “Comp”模式:表示已检测到请求的模式。

解决方案A 

使用源代码泛型进行的定制选项包括:

  1. C_DataWidth:设置设计的数据宽度。此参数的可选选项为4和8。默认值为8,并且预计是最有用的,因为它提供了最佳的I/O逻辑使用和最低的内部时钟频率(最容易实现时序目标)。
  2. C_InputReg:当将此选项设置为1时,电路输入处将存在额外的输入寄存器。默认情况下,通过将其设置为0来关闭此选项。额外的寄存器会增加一个额外的时钟周期。
  3. C_Function:四个选项中的三个适用于设计的这部分:
    1. Slip:这是以前的设备系列中可用的Bitslip,当Bitslip输入在一个时钟周期内产生高脉冲时,对每个位执行Bitslip操作。当Bitslip输入在多个时钟周期内保持高电平时,效果与在一个时钟周期内脉冲Bitslip相同。
    2. Nmbr:此选项将输入数据进行Bitslip操作,值由SlipVal输入给出。在所有请求的Bitslip操作完成后提供输出。Bitslip输入用作SlipVal输入处应用的值的加载。将Bitslip输入在一个时钟周期内设置为高电平。
  4. Comp:此选项将对输入数据进行Bitslip操作,直到在CompVal输入处给定的模式被检测到,然后启用输出。

解决方案B 

使用源代码泛型进行的定制选项包括:

  1. C_DataWidth:设置设计的数据宽度。此参数的可选选项为4和8。默认值为8,并且预计是最有用的,因为它提供了最佳的I/O逻辑使用和最低的内部时钟频率(最容易实现时序目标)。
  2. C_InputReg:当将此选项设置为1时,电路输入处将存在额外的输入寄存器。默认情况下,通过将其设置为0来关闭此选项。额外的寄存器会增加一个额外的时钟周期。
  3. C_Function:第四个选项适用于这个设计解决方案:
    1. FstC:快速比较。Bitslip输入会在CompVal输入处的给定模式上启动比较。当检测到提供的模式时,数据将被输出。

 

        一个实现约束的XDC文件将参考设计放置在方形边界内。然而,在将设计用于应用程序时,您可以根据应用程序的需求调整此XDC文件。图11和图12显示了解决方案A的“Slip”模式下的实现设计,以及解决方案B的“FstC”模式。 

四、总结

        本文讲解bitslip的由来以及实现的方式,并指出了通道间的差异,如何实现通道对齐就比较简单了。

        

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值