USB3.0物理层中的弹性缓冲区设计

1.简介USB3.0是一种高速,串行,源同步数据传输协议。

但是,该数据与通过传输线的原始数据有很大的偏差。

本文从USB3.0的角度分析了弹性缓冲机制,解释了与其他设计的区别,并使用指针控制和握手设计方法将其实现。

2.弹性缓冲功能2.1 USB3.0弹性缓冲范围USB USB3.0的数据传输采用双单工,因此物理层设计为接收和发送2套差分对传输部分。

传输线是承载数据传输的载体。

因此,如何正确地从传输线接收数据并将其同步到系统的内部时钟域变得非常关键。

USB3.0中指定的物理层接收部分的结构图如下,其中包括差分接收,时钟数据恢复,串并转换和8B10B解码。

& Nbsp;图1 USB3.0物理层接收部分的结构整个数据从上到下流动,差分输入被差分接收,从差分信号中提取时钟,恢复的时钟用于恢复数据(CDR)。

恢复的数据在接收时钟域中串行并行转换为10位宽的并行数据1,并检测到USB3.0数据包起始标识符(K28.5)。

一旦检测到开始标记K28.5,启用符号即有效(符号锁定),并且直到检测到结束符号后,结束符号才有效。

灵活的缓冲将接收到的数据从串行转换为并行,所有接收到的数据和控制工作都在接收时钟域(接收时钟)中进行。

因此,弹性缓冲区需要将数据和控制同步到系统时钟域(系统时钟)。

数据被传递到8B10B解码模块,然后传递到系统。

2.2灵活的缓冲容量USB3.0,协议规定允许的时钟精度为-5300ppm至300ppm。

符号时钟频率为2ns或2000ps。

在最坏的情况下,每178个符号添加或删除一个SKP,即,每356个符号添加或删除一对SKP(SKP订单集)。

USB3.0中的最长数据包为1052字节,因此在最坏的情况下,最多可以添加或删除8个SKP或4个SKP对,因此弹性缓冲区必须能够缓冲至少8个SKP。

USB3.0协议规定每个SKP指令集是2个连续的SKP符号。

因此,在10B8B解码之前,SKP指令集的运行差异应是互补的。

根据计算,弹性缓冲器的缓冲容量为8.本文设计采用正常半满2(normal half full)模式设计弹性缓冲器,因此弹性缓冲容量为16,在正常情况下应是8个数据,其余8个是缓冲区空间,因此称为正常半满。

在正常的半满模式下,必须首先将8个符号写入缓冲区,然后读取使能才能生效,因此存在大约8个时钟的延迟。

在通常的半满模式下,当SKP对出现在符号队列中时,只能添加或删除SKP对。

下图显示了恒定半满的输入和输出时序图。

& Nbsp;图2通常为一半的完整输入和输出时序从上图可以看出,rx_valid_out的有效时间晚于rx_valid_in的大约8个时钟沿;而无效时间晚于rx_valid_out大约0到16个时钟沿(取决于时钟精度差异)。

因此,半满时输出数据需要8个时钟延迟。

2.3弹性缓冲区机制弹性缓冲区本质上是一个异步FIFO,可在同时读写时对其进行控制。

普通的半满FIFO的深度为16。

它必须首先写入8个有效数据并将其保持在半满状态。

因此,在正常情况下,FIFO始终处于或接近半满状态。

当读写时钟快或慢时,FIFO中有8个有效数据。

& nbsp;图3通常以相同的速率进行半满读取和写入。

当读取时钟快于写入时钟时,读取的数据多于写入的数据。

正常的半满模式可能会导致FIFO中的数据数少于8,甚至可能被读取。

空气。

如下图所示,当出现SKP窗口时,FIFO中的有效数据为4,比正常状态小4。

因此,此时,弹性缓冲区应添加4个SKP,以保持FIFO半满以调整时钟。

此时,读取指针向前跳转4个间隔,并且当读取指针读取跳转间隔时,SKP添加完成。

& nbsp;图4通常,半满模式的读取速度要快于写入速度。

当读取时钟为sl时