SERDES应用场景以及对应的复位设计

随着半导体技术,特别是 fpga 的发展,单片芯片的处理能力越来越强。现在单片的处理能力都在 1tbit 以上。而要处理这么多的数据,单靠原来的 lvds, lvpecl 已经无法满足芯片接口吞吐量的要求。所以,如今越来越多的应用都用到高速 serdes。
xilinx 的 serdes 作为业界翘楚,越来越多地被客户接受并广泛应用。而随之而来设计、调试问题,也是让客户感到害怕的问题。特别是客户容易对高速 serdes 犯怵,碰到问题又无从着手,导致进度受阻,压力倍增。
这是我着手总结 serdes 设计调试的初衷。
这次主要讲 serdes 复位设计。
复位的作用
众所周知,现在主流的 fpga 上实现的都是时序逻辑。时序逻辑有一个特点就是前面的状态会影响到后面的状态。所以在这种应用里,初始状态的确定是整个设计里非常重要的一个环节。复位就是用来初始化逻辑状态用的。
对于 serdes,根据不同的应用,其时钟方案是不同的。对此,serdes 的状态,特别是buffer 的状态会受到很大的影响。由于 buffer 的读写时钟有效稳定的时间不同,大致会引起以下 2 种情况:
1. buffer 上下溢出,使得输入输出误码;
2. 多通道应用里,通道间引入偏移,使得各路通道绑定失败。
所以复位设计必须小心,特别需要和时钟方案相匹配,才能给可靠的设计打下良好的基础。
7 系列 gtx 的时钟结构
上面说到,复位应该和时钟方案相匹配,所以在这里简单介绍一下 7 系列 gtx/gth 的时钟结构。
7 系列 serdes 是以 quad 为单位的。在一个 quad 里,有
a) gtx/gth: 一个 quad 里有 4 个 serdes;
b) 2 个参考钟:它们可以连到任意一个 pll 上。而且可以给上下相邻的 quad 提供参考钟;
c) cpll:这是每路 gtx/gth 都有的 pll。这个 c 是指 channel;
d) qpll:每个 quad 内的 serdes 共享的 pll。这个 q 是指 quad。
qpll 和 cpll 可以供到每个 serdes 的发(tx)和收(rx)。在 serdes 里有tx/rxsysclksel[1:0]端口选择使用哪个时钟源。
复位设计的案例
下面,根据不同的时钟方案,会列出一些复位的方法。
首先需要提醒的一点是:对于 7 系列的 serdes, bit 文件下载完(configdone 拉高)后的500ns 时间内的复位是无效的。serdes 需要的复位是脉冲。所以 fpga 配置完成后 500ns 后复位信号才能拉高。
如果在 500ns 之前就拉高,那是无效的。需要在后面在有一个正脉冲才行。
关于这个问题,在 xinlix 官网上有 ar43482 作说明。
另外相对于以前的 serdes,在 7 系列 serdes 里多了 2 个信号:txuserrdy 和 rxuserrdy。
这 2 个信号是用来控制何时进行 pcs 复位的。
serdes 的顺序复位是指 gtxtxreset 或 gtxrxreset 有复位脉冲时,serdes 会进行从 pma一直到 pcs 的复位,最后把 txresetdone 或 rxresetdone 拉高。
pma 和 pcs 复位涵盖的范围见下表
整个复位顺序都是从 pma 到 pcs 的。具体流程可以参考 ug476。
在完成 pma 复位后进入 pcs 复位是,txuserrdy 和 rxuserrdy 就是开关。只有当它们为高时才能进入 pcs 复位,继而完成整个 serdes 的复位。txuserrdy 和 rxuserrdy 的含义是用户钟 txusrclk/txusrclk2 和rxusrclk/rxusrclk2 都稳定了。这个时候可以进行 pcs复位了。
tx 复位案例
一、 txoutclksel = txoutclkpma
这种情形下,txoutclk 的频率是(line rate)/(internal datawidht),它会随着线速度的变化而变化。
对于 7 系列 serdes,内部位宽可以有 16/20 bit (即 2 字节)和 32/40bit(即 4 字节)2中选择。跟逻辑接口的外部位宽有 2、4、8 字节 3 种选择。由于逻辑可以跑到 368mhz以上。所以对于大多数的应用,txusrclk/txusrclk2 是可以同频的。此时,其时钟框图就会如下:
这种复位方案里,有一些要求:
? serdes 工作在顺序复位模式下(工具产生的代码默认模式)
? resetovrd = 1’b0
? gtresetsel = 1’b0
? qpllreset 或 cpllreset 需要脉冲复位
? 至少一个参考钟周期
? qplllkdet 或 cplllkdet 的上升沿上产生 gtxtxreset 脉冲,启动 serdes 进入顺序复位
? 同时,把 qplllkdet/cplllkdet 连到 txuserrdy
? 最好能延时 2~3us 以保证 txoutclk 稳定。
? 在 txresetdone 的第一个上升沿做 txpcsreset 的复位
? 对单路应用不需要这个复位。
? 对于多路需要对齐输出的应用,需要把所有 txresetdone 都拉高后做txpcsreset 复位以减少各路的输出偏移
二、txoutclksel = txoutclkpma,用到 mmcm
这个和上面一个的差别就是需要用到 mmcm。由于 mmcm 的输入是 txoutclk,必须等到 txoutclk 稳定后才能释放复位;而 mmcm 给 serdes 提供 txusrclk 和txusrclk2,所以 txuserrdy 必须在 mmcm 稳定后才能拉高。
同样,对于多通道应用,需要在所有 txresetdone拉高后给一个 txpcsreset 脉冲,这样可以减少发送数据通道间的偏移。
三、txoutclksel = txpllrefclk_div1/2
这种应用和第一种不同之处在于txoutclk的时钟来源不同,这里是来自于参考钟。所以它会在 qpll 锁定之前就稳定下来。当然我们还是可以借用第一种复位方法。只是qplllkdet/cplllkdet 送到 txuserrdy 时不需要延时去等待内部时钟稳定。
四、txoutclksel = txpllrefclk_div1/2,用到 mmcm同样,这种应用可以参考第二种。
当然由于 mmcm 的输入时钟是参考钟,所以它的复位释放也不需要等待 pll 锁定。所以我们也可以用下面的复位方法
当然由于 mmcm 复位要求,qpllreset/cpllreset 的脉宽需要大于 3 个参考钟周期。
五、txbuffer bypass 情形
对于 cpri 等有延时精度要求的应用,需要把 txbuffer 旁路。这时需要在上面的复位之外还要有相位对齐电路的复位。
要能进行相位对齐,对时钟有一定要求:
1. 同源同频。这里只是做相位对齐,频率必须相同;
2. 时钟稳定。只有时钟稳定后才能进行相位对齐操作。
所以相对于前面使能 txbuffer 的应用的复位,在 txresetdone 拉高后,做一次相位对齐操作就可以了。
这里需要注意的一点是,txdlysreset 的脉宽必须小于 50ns。
整个复位的波形图如下
和前面不同的是,这里用 txphaligndone 作为后续逻辑的复位信号。这是因为这个信号拉高了,表示 serdes 的初始化已经完成,可以工作了。而前面的几种应用,txresetdone 的拉高是 serdes 能够正常发送数据的标志。
rx 复位设计
这里只包括用到 rxoutclk 时的复位。如果是用 txoutclk 作为 rxusrclk/rxusrclk2时钟源的情形,可以参考 tx 复位设计部分。
rx 的结构比 tx 要复杂。相对应的复位也会复杂一些。主要原因是 rxoutclk 的源头可能是 cdr 送出的恢复钟。也就是说,需要 cdr 稳定工作后才能有稳定的 rxoutclk 输出。所以后续的复位需要与此相配。
cdr 在有信号送入时,会跟踪上输入信号的频率、相位;当没有信号送入时,它会慢慢锁到本地时钟上,直到又有信号送入。这个不是跃变的过程,而是慢慢变化的。这里不会引入恢复时钟的跳变。
一、rxoutclksel = rxoutclkpma
这种情形下,rxoutclk 的源头就是 cdr 的恢复钟。
由于初始化复位时,我们还是用 qplllkdet/cplllkdet 作为 rxuserrdy 的输入,这样在 pll 锁定后可以完成 pma/pcs 的初始化。
但是在工作起来后,cdr 会锁到输入信号上。在跟踪过程中,恢复钟(也就是rxbuffer 的写时钟)会有个渐变的过程。这个可能会导致 rxbuffer 溢出。所以用rxbufstatus[2]送到 rxbufreset。这样在 rxbuffer 溢出时复位 rxbuffer。
对于多通道应用,也是需要在所有 rxresetdone 都拉高时复位 rxbuffreset 一下,这样可以减少各路的偏移。当然,任意一路有前面说到的溢出,也需要复位所有的rxbuffer。
二、rxoutclksel = rxoutclkpma,且用到 mmcm
这个情形下,我们需要注意的就是 mmcm/pll 输入时钟源于 cdr 恢复时钟并给rxpcs 提供用户时钟。所以需要
1. mmcm 必须在 pll 锁定后延时一段时间释放复位,这其中的时间就是 cdr 锁定的时间。
2. mmcm 的 lock 信 号 控 制 rxuserrdy , 以 保 证 rxpcs 的 复 位 是 在rxusrclk/rxusrclk2 都稳定后释放的。
这种应用里,如果外部输入信号丢失,比如拔掉再插上光纤,那需要对接收侧做整体复位以保证接收的可靠。这时整个时钟都会重新复位一遍。
三、rxoutclksel = rxpllrefclk_div1/2
这种情形,rxusrclk/rxusrclk2 的源头都是参考钟,所以和 txoutclksel = txpllrefclkdiv1/2 的情形是一样的。在现实中会合并用 txoutclk 来驱动 txusrclk 和rxusrclk。
所以复位的方法参考 tx。
四、rxoutclksel = rxpllrefclk_div1/2, 且用到 mmcm
这 种 情 形 , rxusrclk/rxusrclk2 的 源 头 都 是 参 考 钟 , 所 以 和 txoutclksel = txpllrefclkdiv1/2 + mmcm 的情形是一样的。在现实中会合并用 txoutclk 通过mmcm 来驱动 txusrclk 和 rxusrclk。
所以复位的方法参考 tx。这里画出 2 中复位连接图:
五、rxbuffer bypass
rxubffer bypass 模式下,由相位对齐电路实现 rxclk 和 rxusrclk 的相位对齐。此时 rxusrclk 的源头必须来自 rxoutclkpma, 而 rx_xclk_sel = rxusr。
在大多数情况下,rx 工作在 single lane 模式下。所以 rxphasealingment 只要工作在 auto 模式下就可以了。
对于 gtx,rxphasealignment 的复位连接和波形如下:
rxphaligndone 作为 rx 逻辑的复位信号。
对于 gth,rxphasealignment 的复位连接和波形如下:
rxsyncdone 作为 rx 逻辑的复位信号。
同样的要求:
1. rxdlysreset 的脉宽不能超过 50ns。
2. 相位对齐操作必须在 rxresetdone 拉高后进行。
总结
对于时序系统,复位的设计会极大影响到系统的工作结果。对于 7 系列的 serdes,其重要性是不言而喻的。这里列举的是一些应用场景以及对应的复位设计。希望对大家有帮助。

中芯国际2020年Q1财报出炉 营收创新高且资本支出上调
Cosmic Circuits荣获TSMC AMS IP年度合作伙伴奖
日本公司开发了一种可以按下的全息按钮的浮动象形图技术
Wrike在其用户大会上宣布了其平台的重大更新
苹果“iPhone 电池门”集体诉讼 ,索赔6000万欧元
SERDES应用场景以及对应的复位设计
工业互联网的三大要素是什么_工业互联网的作用
Intel正实现从14nm向10nm的过渡
造纸通用仪表选型详解
土壤养分速测仪在农业施肥中有什么作用?
功率因数
万能试验机品质与产品竞争力的提升
电气二次回路基础知识
不断变化的元件有什么利与弊
谷歌欲自主开发处理器?用于其智能手机和笔记本电脑
BTC用户将可以在ERC20平台上进行代币交易了
使用太阳能供电的采集设备需要注意什么
低压开关柜的基本知识:低压开关柜的系统组成
AISD系列智能安全配电装置为银行安全用电保驾护航
合理运用健身房中的智能魔镜,智能健身不再遥远