SerDes宏和其配置
SRIO通过允许一个可扩展的非专有接口,为我们提供了许多好处。这个接口就是SerDes。通过使用SerDes宏,可以与外设交流,并且外设都可以扩充带宽。同一个外设可以用在V1.2版本的
RapidIO 接口协议的四个频率下:1.25、2.5、3.125和5Gbps。这样就可以在整个系统中有一个协议就足够了,可以选择性地选取带宽。这种做法消除了使用用户自带协议的情况,减短了研发周期。由于SerDes是串行的,所以程序空间不限于一个板子上,它的应用空间是整个板子。(
Because this interface is serial, the application space is not limited to a single board. It will propagate into backplane applications as well.)这些在ASIC(
Application Specific Integrated Circuit 特定用途集成电路)或DSP上集成的宏可以减少板子上分立元件的数量,并且消除对
总线驱动芯片的需求。TI SerDes宏附有一些有用的特点。1)可以唯一地管理系统优化,以针对个别客户的需求。例如,控制寄存器内的SerDes允许你调整TX的差分输出电压,这样就可以减少TX的摆动,进而省电。
2)数据边缘率(data edge rates)可以类似地调整,以减少电磁干扰的影响。
3)不使用的连接可以不通电,减少功耗。SerDes宏是一个独立的宏,包含
RX(接收寄存器),
TX(传输寄存器),
PLL(锁相环),
时钟恢复模块,
串行至并行模块(S2P),
并行至串行模块(P2S)。内部锁相环可以为用户提供参考时钟,所有锁相环的
环路滤波器都在片上。同样,差分RX和TX缓存也包含片上(on chip)终端电阻。唯一需要片外提供的是
直流阻塞电容器。
使能锁相环(Enabling the PLL)
物理层SerDes有一个内置的锁相环,用于时钟恢复电路。该锁相环是为一个
低速参考时钟做倍频的,这个低速参考时钟与串口数据没有任何时序关系,同时与CPU时钟是异步的。
高速倍频时钟只在SerDes内部使用,不会分到周围的外设当中,
也不是设备核的一个边缘信号(nor is it a boundary signal to the core of the device)。拥有一个高质量的参考时钟非常重要,同样,将时钟和锁相环与噪声隔离也非常重要。SerDes宏是通过这些寄存器进行配置的:
SRIO_SERDES_CFGPLL,
SRIO_SERDES_CFGRX[3-0],
SRIO_SERDES_CFGTX[3-0],和
SRIO_SERDES_RSVD。为了使能内部锁相环,
SRIO_SERDES_CFGPLL的
ENPLL位必须
置1,置1之后等待
1秒让
稳定器使系统稳定,此后,如果
RIOCLK存在并且
RIOCLK稳定,锁相环将使用不超过200个
参考时钟周期,来锁定所需的频率。为了确定锁相环是否已经稳定,可以看
SRIO_SERDES_STS寄存器的
lock位,
1是已经稳定,
0是未稳定。
使能接收器(Enabling the Receiver)
为了使能一个接收器来
解串(deserialization),
SERDES_CFGRXn_CNTL 寄存器的
ENRX位必须置1。当
ENRX位是0的时候,所有接收器中的数字电路将被禁用,时钟也会被锁定。除了相关的
信号丢失检测器和
IEEE1149.6边界扫描比较器,接收器的其它模块所有电流被完全切断。
信号丢失断电(Loss of signal powerdown)是通过
SERDES_CFGRXn_CNTL寄存器的
Los位来控制的,如果将
Los位使能,就开始监视接收到的
差分信号,一旦检测到信号损失,
时钟恢复算法将会被冻结,以防止恢复时钟的相位和频率被
低电平噪声信号改动。对
SERDES_CFGRXn_CNTL寄存器的
CDR(clock/data recovery)位中列出的
时钟恢复算法进行操作,对接收到的消息进行
采样,这样
数据样本在数据传输中途就会被拿到。【这里说的是一阶恢复算法】
二阶时钟恢复算法(second order algorithm)可以选择性地禁用,并且时钟恢复算法都可以用来配置优化寄存器的
动态性能。这两种算法的原理基本相同,
它首先确定采样时钟的放置是否合适,如果没有放置合适,那么应该提前还是滞后,这都是它们首先要确定的问题。当检测到两个
连续样品不一样,那么着两个样品之间的
相样品也会被检测。每次检测结果中,都会被提取8个
数据样本和9个
相样本,利用这些样本综合评估是否需要提前或者滞后。这8个数据样本构成了部分评估窗口,如果这8个数据样本的多数提前或者滞后,就采样时钟进行相应的提前或滞后操作。一阶算法在每次综合评估后调整一次相位,二阶算法根据这一时钟多数票和前一时钟多数票的净差额,来不断调整相位,从而调整相位的变化率。示意图如下图所示。
把
SERDES_CFGRXn_CNTL寄存器的
Align域设置成01,该操作成功之后,数据会与包含在
8b10b规则中的K28逗号标准对齐。
那么什么是8b10b规则呢?为什么要使用8B10B编码呢?是因为8B10B编码的特性之一就是保证直流平衡,即编码后二进制数据流中“0”和“1”的数量基本保持一致,因为我们知道当高速串行流的逻辑1和逻辑0有多个位没有产生变化时(即所谓的长连0和长连1),信号的转换就会因为电压位阶的关系而造成信号错误,直流平衡最大好处就是可以克服这个问题。8B10B编码是怎么做到DC平衡的呢?转换的时候,连续的“0”或者“1”数量不超过5位,即每5个连续的“0”或者“1”后必须插入一位“1”或者“0”,从而保证信号DC平衡。这样可以保证串行数据可以在接收端被正确复原,同时利用一些特殊代码(K码)也可以帮助接收端进行复原工作,且可以在早期发现数据位传输错误,抑制错误继续发生。下图是8b10b编码示意图。如图所示,8bit(HGFEDCBA,H是MSB,A是LSB)原始数据会被分成两部分,低5bit进行5B6B编码,高3bit则进行3B4B编码,这已成约定俗成的标准,所以8bit数据(0到255)也被表示为Dx.y的形式,其中x就是低5bit对应的十进制数值,而y就是高3bit对应的十进制数值。例如8bit数“101 10101”,即十进制数181,这时候按照上述划分原则x=10101(21),y=101(5),所示这个数被表示为D21.5。这叫Code Notation。对于不能使用8b10b编码对齐的系统,
单点对准慢跑能力(single bit alignment jog capability)提供了一种手段控制
ASIC(特定用途集成电路)核中直接由逻辑实现的receiver(接收器)的符号重组特点,该逻辑可以设计支持任何
对齐检测协议。
SERDES_CFGRXn_CNTL寄存器的
EQ位允许配置和使能所有接收通道内都有的
自适应均衡器(adaptive equalizer),这些自适应均衡器能够通过衰减信号中的
低频分量,来补偿
通道插入损失(channel insertion loss),这样就会降低内部信号的干扰。在零频以上,增益每
倍频程增加6dB,直到达到
高频增益,当EQ位使能时,接收器的
均衡逻辑分析
数据模式和
传输次数,以确定均衡器的
低频增益是否应该增加或减少。对于
完全自适应设置,即将
EQ位设置成0001,如果低频增益达到最小值,零频就会被减少;同样,如果低频增益达到最大值,零频就会增加。这样的
决定逻辑是通过以一种
相对长时间分析(relatively long analysis interval)为基础的
投票算法实现的。
慢时间常数( slow time constant )降低了
错误决定的可能性,同时补偿了
通道相对稳定的响应。以下是EQ位中相应设置对应的解释,大家可以在文末的参考文献中详细了解。1)无自适应均衡
均衡器在增益达到最大值的时候提供了一个
平稳响应。如果接收器的剧烈抖动是由于两条
线之间的互相干扰而不是
频率损失,这种EQ设置模式是推荐的。2)完全自适应均衡
低频增益和
零频位置都取决于分析接收到的数据中的
数据模式和
数据过渡位置。该设置推荐应用于大多数工程。3)部分自适应均衡
低频增益取决于分析接收到的数据中的
数据模式和
数据过渡位置,零频固定在8个零频中的一个位置。
对于任何一个给定的应用,最好的设置是一个关于信号的损耗特性,信号的谱密度和信号的数据速率的函数,这意味着不可能只通过分析数据速率而得到最好的设置,尽管一般来说,数据速率越低,零频的位置就要越低。使能传输器(Enabling the Transmitter)
为了使能一个
传输器来
串行化,
SERDES_CFGTXn_CNTL寄存器的
ENTX位必须要置,1,如果ENTX位是0,传输器内所有电路都被禁用,时钟都会被关闭,除了传
输时钟输出(TXBCLK[n]),传输时钟输出会一如既往的继续正常工作。如果ENTX位是0,传输器内的所有电流源都会
掉电(就是没电),除了
电流模式逻辑驱动(current mode logic (CML) driver),如果
边缘扫描开启,电流逻辑驱动就会继续工作。
SerDes配置示例
Example 2-1 SerDes Configuration
switch (linkRateGbps)
{
case srio_lane_rate_5p000Gbps:
case srio_lane_rate_3p125Gbps:
rxConfig = 0x00440495;
txConfig = 0x00180795;
break;
case srio_lane_rate_2p500Gbps:
rxConfig = 0x004404A5;
txConfig = 0x001807A5;
break;
case srio_lane_rate_1p250Gbps:
rxConfig = 0x004404B5;
txConfig = 0x001807B5;
break;
default:
return -1;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
TI板子上的SerDes上的4个SerDes线可以配置给不同的port宽度。
当设置成1X模式的时候,一个port使用一个传输器和接收器线,工作在普通线频率之下。
当设置为2X模式的时候,一个port使用两条线,工作在2倍的普通线频率之下。
4X也是同样的道理。
但是怎样设置普通线频率的问题没有得到解决,希望在之后的学习之中可以看到。参考文献 http://www.tij.co.jp/jp/lit/an/sprabc1/sprabc1.pdf
http://www.ti.com/cn/litv/pdf/sprugw1b
http://bbs.ednchina.com/BLOG_ARTICLE_3015507.HTM