Serdes基础知识汇总

从知乎https://zhuanlan.zhihu.com/p/423321485转载

在开始了解高速接口的时候,必然会涉及到SerDes。serdes的知识点实际上非常多,并且很多文章论述的侧重点不一样,有的测重整体,有的着眼细节,我则综合提取,以帮助跟我一样的初学者能够初步建立对SerDes清晰的认识。

1. 简介

SerDes是Serializer/Deserializer的缩写,即串行器和解串器,顾名思义是一种将并行数据转换成串行数据发送,将接收的串行数据转换成并行数据的”器件“。对于FPGA工程师来说“串并转换”再熟悉过不过了,只不过SerDes是一种需要数模硬件实现的,用于高速传输的“高级”串并转换器件。至于接口从最初从串口到并口,再回归到串口的历史发展,可以阅读相关的文献,借此可以了解一下系统同步、源同步的技术瓶颈。目前,商用基于SerDes架构的通信协议最高可实现单通道56Gbps(好像已经可达112Gbps)的速率,在未来高带宽、低成本的应用领域会越来越广泛。

SerDes主要具有以下优点:

减少布线冲突(串行,并且无单独的时钟线,时钟嵌入在数据流中,从而也解决了限制数据传输速率的信号时钟偏移问题);
抗噪声、抗干扰能力强(差分传输);
降低开关噪声;
扩展能力强;
更低的功耗和封装成本;

题外话:看了文献之后,才知道PCIE、JESD204B都是基于SerDes的协议,用OSI网络分层模型来类比的话,SerDes更接近于物理层,并强调了电气属性,而PCIE和JESD204B相当于涵盖数据链路层、网络层和传输层,所以SerDes通常又被称之为物理层(PHY)器件。实际上和很多人没分清RS232和URAT之间的关系一样。

2. 整体架构

SerDes有四种架构:1)并行时钟SerDes;2)嵌入式时钟SerDes;3)8b/10b编码SerDes;4)位交错SerDes。(注:至于这4种所谓的架构有什么区别,实现有什么特点,我还没找到专门的文献来说明)。

常见的SerDes架构是一种基于8b/10b编码并且时钟嵌入进数据流中的架构(是不是就是上面2、3的组合?),主要由物理介质相关子层( PMD)、物理媒介附加子层(PMA)和物理编码子层( PCS )所组成。如下图所示:

底色为浅绿色的子模块为PCS层,负责数据流的编码/解码,是标准的可综合CMOS数字逻辑,可以硬逻辑实现,也可以使用FPGA软逻辑实现。

底色为浅褐色子模块是PMA层,是数模混合CML/CMOS电路,负责负责串化/解串化,是理解SerDes区别于并行接口的关键。

PMD是负责串行信号传输的电气块(未画出)。

PLL模块(PLL Block)负责产生SerDes各个模块所需要的时钟信号,并管理这些时钟之间的相位关系。

一个SerDes通常还要具调试能力,例如伪随机码流产生和比对,各种环回测试,控制状态寄存器以及访问接口,LOS检测,眼图测试等,所以还需要相应的功能测试模块。

整个流程可以简述为:

发送(TX)
FPGA软逻辑(fabric)送过来的并行信号,通过接口FIFO(Interface FIFO),送给8b/10b编码器(8b/10b encoder)或扰码器(scambler),以避免数据含有过长连“0”或者连“1”,之后送给串行器(Serializer)进行并->串转换。串行数据经过均衡器(equalizer)调理,由驱动器(driver)发送出去。

接收(RX)
外部串行信号由线性均衡器(Linear Equalizer)或DFE (Decision Feedback Equalizer,判决反馈均衡)结构均衡器调理,去除一部分确定性抖动(Deterministic jitter)。CDR从数据中恢复出采样时钟,经解串器变为对齐的并行信号。8b/10b解码器(8b/10b decoder)或解扰器(de-scambler)完成解码或者解扰。如果是异步时钟系统(plesio-synchronous system),在用户FIFO之前还应该有弹性FIFO来补偿频差。

注:我发现系统性的把SerDes细节讲清楚的文献并不多,并且有些SerDes接口芯片并不完全是上面这种架构,在实际过程中,各个厂家可能会根据性能做不同的算法优化,具体的模块可能用到不同的技术,所以不要片面的理解上述架构是Serdes的唯一架构。

3. 发送端模块说明

3.1 8b/10b编码器
8b/10b编码是由IBM于1983年发明的,旨在解决系统互联以及GB以太网传输的问题。 是指将8b的数据通过某种编码规则扩展成10b,保证数据流中的“0”和“1”数量基本一致,通过降低效率来增加传输的数据恢复的可靠性。8b/10b 主要具有以下优点:

保证直流(DC)平衡(重点)

直流平衡是什么意思呢?如上图所示,由于我们的串行链路中会有交流耦合电容,信号频率越高,阻抗越低,反之频率越低,阻抗越高。因此上面的情况,当码型是高频的时候,基本上可以不损耗的传输过去,但是当码型为连续“0”或者“1”的情况时,电容的损耗就很大,导致幅度不断降低,带来的严重后果是无法识别到底是“1”还是“0”。因此编码就是为了尽量把低频的码型优化成较高频的码型,从而保证低损耗的传输过去。

8b/10b编码方式总输出位数是10个位,其中“0”与“1”出现的次数总共也仅在三种场合存在,分别为“5个位0与5个位1”、“4个位0与6个位1”、“6个位0与4个位1”。有一个8b/10b编码的技术专用语“不均等性(Disparity)”,其涵义就是指10个位中位0与位1出现次数的差。换句话说,8b/10b编码的“Disparity”就仅有“+2”(4个位0与6个位1)、“+0”(5个位0与5个位1)以及“-2”(6个位0与4个位1)三种状况。

有利于提取时钟
时钟恢复是依赖于“电平跳变沿“(后面会介绍),所以平衡”0“和”1“,可以简化了时钟恢复,降低了接收机成本。

方便错误检查
8B/10B编码采用冗余方式,将8位的数据和一些特殊字符按照特定的规则编码成10位的数据,根据这些规则,能检测出传输过程中单个和多个比特误码。

有关8b/10b编码的编码算法可以进一步查阅相关文献。在SerDes中长常用编码方式除了8b/10b编码外,还有64b/66b编码等;

3.2 扰码

扰码是一种将数据重新排列或者进行编码以使其随机化的方法,但是必须能够解扰恢复。我们希望打乱长的连“0”和长的连“1”序列,将数据随机化。扰码产生是通过循环移位寄存器来实现的,而扰码生成多项式决定循环移位寄存器的结构。那么对信号加干扰有什么好处?

解决EMI问题
当数据重复传输时,能量就会集中在某一频率上,产生EMI噪声;数据经过加扰后,能把集中的能量分散开,几乎变成白噪声。

有利于提取时钟
同时又扩展了基带信号频谱,起到加密的效果
总结到这里,看网友有提问,也提醒了我。问题是:在SerDes中先进行8b/10b编码之后再进行扰码,感觉两个的作用类似,只是扰码进一步增加“0”和“1”的随机性,还有没有其他更重要的作用?先加扰再编码有没有问题?初学者总有很多疑问。
3.3 串行器/解串器
串行器Serializer把并行信号转化为串行信号。Deserializer把串行信号转化为并行信号。一般地,并行信号为8 /10bit或者16/20bit宽度,串行信号为1bit宽度(也可以分阶段串行化,如8bit->4bit->2bit->equalizer->1bit以降低equalizer的工作频率)。

Serializer/Deserializer的实现采用双沿(DDR)的工作方式,利用面积换速度的策略,降低了电路中高频率电路的比例,从而降低了电路的噪声。

接收方向除了Deserializer之外,一般带有还有对齐功能逻辑(Aligner)。相对SerDes发送端,SerDes接收端起始工作的时刻是任意的,接收器正确接收的第一个 bit可能是发送数据的任意bit位置。因此需要对齐逻辑来判断从什么bit位置开始(哪里开始算是第一个数据),以组成正确的并行数据。对齐逻辑通过在串行数据流中搜索特征码字(Alignment Code)来决定串并转换的起始位置,这就需要用到了8b/10b的控制字符集,也就是我们常说的“K”字符,常见的什么K28.5、K28.0、K28.3、K28.4等,在JESD204B中他们又称/K/、/R/、/A/、/Q/字符。

3.4 前向反馈均衡(feed-forward equalization/equalizer)

SerDes信号从发送芯片到达接收芯片所经过的路径称为信道(channel),包括芯片封装、pcb走线、过孔、电缆、连接器等元件。从频域看,信道可以简化为一个低通滤波器(LPF)模型,如果SerDes的速率大于信道的截止频率,就会一定程度上损伤信号(高频被滤掉了,数字信号边沿会变得平滑)。均衡器的作用就是补偿信道对信号的损伤。

发送端的均衡器采用FFE(Feed forward equalizers)结构,从频域上看,FFE是一个高通滤波器(容易理解,信道损伤是一个低通滤波器,会抑制高频,那么均衡就补偿高频)。从时域上看,又叫加重器(emphasis)。加重分为去加重(de-emphasis)和预加重(pre-emphasis)。De-emphasis 降低差分信号的摆幅(swing)。Pre-emphasis增加差分信号的摆幅。由于目前芯片都需要追求降低功耗,所以大部分使用de-emphasis的方式,加重越强,信号的平均幅度会越小。

4. 接收端模块说明

4.2 接收均衡器
4.2.1 线形均衡器(Linear Equalizer)

接收端均衡器的目标和发送均衡器是一致的。对于低速(<5Gbps)SerDes,通常采用连续时间域、线性均衡器实现如尖峰放大器(peaking amplifier), 均衡器对高频分量的增益大于对低频分量的增益。

4.2.2 裁决反馈均衡器(Decision Feedback Equalizer-DFE)
对于高速(>5Gbps)SerDes,由于信号的抖动(如ISI相关的确定性抖动)可能会超过或接近一个符号间隔(UI,Unit Interval),单单使用线性均衡器不再适用。线性均衡器对噪声和信号一起放大,并没有改善SNR或者说BER。对于高速SerDes,采用一种称作DFE的非线性均衡器。DFE通过跟踪过去多个UI的数据(history bits)来预测当前bit的采样门限,从而预测码间干扰。DFE只对信号放大,不对噪声放大,可以有效改善SNR。

不论是发送端还是接收端的均衡器,本质上都是高通滤波器,因为数字信号采样都希望边沿越抖越好,边沿变缓之后就会产生码间干扰。

如下图所示,系统传输一个“11011”的码流,如果没有均衡器,信号受到信道损伤,信号展宽,出现码间干扰,导致中间的“0”,无法被检测到。

DFE设计的关键是确定DFE系数,如果DFE的系数接近信道的脉冲相应,就可以到的比较理想的结果。但是信道是一个时变的媒介,比如温度电压工艺的慢变化等因素会改变信道的特性。因此DFE的系数需要自适应算法,自动扑获和跟随信道的变化。这也是实际应用中DFE功能开启的时候,做环境试验的结果很多时候会出问题,因为DFE在信道特性变化的时候,自适应的速度没有跟上。DFE系数自适应算法非常学术,每个厂商的算法都是保密的,不对外公布。
4.3 时钟数据恢复(CDR)
最开始接触SerDes的是,说“没有单独的时钟线,时钟嵌入在数据流中的”,脑海里第一反应就是在数据中插入一定规则的编码代表时钟的高电平或者低电平,回头一想,那时钟频率不就远低于数据的采集频率了吗?实际上,所谓的“时钟嵌在数据中”的意思,是时钟嵌在数据的跳变沿里。不难理解,极端情况下,假设一串数据流是"1"和"0"交替发送,那这不就是一个时钟了吗。

CDR( Clock and Data Recovery)即时钟和数据的恢复,是SerDes设计中非常重要的环节。CDR常用的技术有基于数字锁相环(PLL)和基于相位插值器两种。当数据经过时,CDR就会捕获数据边沿跳变的频率,如果数据长时间没有跳变,CDR就无法得到精确的训练,CDR采样时刻就会漂移,可能采到比真实数据更多的“0”或“1”。这就是为什么我们在发送的时候采用8b/10b编码或扰码来避免重复出现“0”或“1”,原因之一也在此。所以CDR有一个指标叫做最长连“0”或连“1”长度容忍(Max Run Length或者Consecutive Identical Digits)能力。

恢复了时钟之后,需要恢复数据。第一步首先要将恢复出来的时钟与数据的边缘进行对齐,然后再将数据给读出来。在硬件原理上,使用PLL电路以及触发器即可。

以上是总结的有关SerDes的基础知识,希望能帮助像我一样的初学者建立初步的认识。SerDes每一个模式深入下去都有很多硬件、信号完整性(包括眼图的评价机制)的知识,想做到非常清晰的认识有一定的难度。目前,对于FPGA工程师来说,SerDes作为phy芯片或者集成在IP核中,先掌握应用,需要的时候再深入

Serdes基础知识汇总相关推荐

  1. 脑科学与脑电基础知识汇总

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 脑科学与脑电基础知识汇总 该部分汇总了社区分享的部分脑科学.EEG.fNIRS.BCI.人机交互等相关知识. 脑电与情绪 ...

  2. python基础知识资料-Python基础知识汇总

    原标题:Python基础知识汇总 1.Anaconda的安装 百度Anaconda的官网,下载左边的Python3.X版本 然后是设置路径,最后给出Jupyter notebook.具体参考: 猴子: ...

  3. python基础知识资料-学习Python列表的基础知识汇总

    千里之行,始于足下.要练成一双洞悉一切的眼睛,还是得先把基本功扎扎实实地学好.今天,本喵带大家仔细温习一下Python的列表.温故而知新,不亦说乎. 当然,温习的同时也要发散思考,因为有些看似无关紧要 ...

  4. 计算机网络把许多什么连接在一起,计算机网络技术基础知识汇总习题

    计算机网络技术基础知识汇总习题 1.21世纪要实现信息化,就必须依靠完善的网络,这里的网络是指,向用户提供不同服务的 电信网络,有线电视网络和计算机网络三种网络.(电信网络,有线电视网络,计算机网络) ...

  5. 计算机公共基础知识论文,计算机等级考试二级公共基础知识汇总.doc

    计算机等级考试二级公共基础知识汇总.doc 计算机等级考试二级公共基础知识 第1章 数据结构与算法 1.1 算法 1.1.1 算法的基本概念 算法是指对解题方案的准确而完整的描述.简单地说,就是解决问 ...

  6. 网络基础知识汇总学习

    一.网线(双绞线)连接线的制作 双绞线制作有 568A 和 568B 两个标准,日常以 568B 标准较常用. 568B 标准按颜色排序为: 1- 橙白. 2- 橙.3- 绿白.4- 蓝. 5- 蓝白 ...

  7. S7-200SMART PLC基础知识汇总

    S7-200SMART PLC基础知识汇总 输入输出: I:数字量输入(DI) Q:数字量输出(DO) AI:模拟量输入 AQ:模拟量输出 内部数据存储区: V:变量存储区,可以按位.字节.字或双字来 ...

  8. 4.电子计算机的分类,公基计算机基础知识汇总40

    公基计算机基础知识汇总40 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 3. 运算精度高电子计算机具有以往计算机无法比拟的计算精度, ...

  9. 【若泽大数据001】Linux基础知识汇总

    [若泽大数据001]Linux基础知识汇总 前情提要: Linux平台搭建 [若泽大数据001]Linux基础知识汇总 1.查看当前光标所在的目录的命令是什么? 2.切换到当前用户的家目录,哪三种方式 ...

最新文章

  1. eclipse下tomcat配置
  2. 前端传中文文件名_前端工程师需要掌握哪些知识,web前端开发规范总结
  3. Vue中实现检测当前是否为IE模式(极速模式还是兼容模式)
  4. 从零开始数据科学与机器学习算法-集成算法-10
  5. 教你移除IE 7.0浏览器的默认搜索框
  6. 夺命雷公狗ThinkPHP项目之----企业网站2之数据库的快速设计
  7. LeetCode 319. 灯泡开关(找规律)
  8. android 京东白条支付,京东网银钱包安卓版上线:整合京东白条和小金库
  9. 孤傲授权系统网站源码
  10. hihoCoder1690 (动态规划)
  11. 谈一下ACM的入门书籍及方法
  12. java 释放对象_java基础:对象的销毁
  13. 天视通电脑版APP怎么添加录像机_手机怎么远程连接海康录像机,手把手教你、、、...
  14. bilibili ,B站视频预览缩略图实现分析
  15. win11电脑内存占用过高的解决办法
  16. 关于劳务派遣有哪些优缺点
  17. Pycharm 快捷键 整理
  18. R语言绘制沈阳地铁线路图
  19. Python 频数直方图
  20. Oracle BLOB类型的数据如何查看和下载?

热门文章

  1. mysql建表语句主键索引_MySQL添加主键、索引
  2. 货拉拉NLP算法实习生面经
  3. 高德API 经纬度转换地市区县(含读取文件)
  4. OpenCV 形态学操作应用——提取水平与垂直线
  5. Java消息队列三道面试题详解
  6. 微信小程序中wxml的标签说明
  7. 根据出行月份(1~12)和仓位(头等舱1,经济舱2)输出实际机票价格。
  8. 一个机械研究生在计算机与机械之间的徘徊与思考-(下)之填坑
  9. bzoj5185 [Usaco2018 Jan]Lifeguards(dp+单调队列优化)
  10. 怎么把线稿提取出来_如何提取线稿为你所用?不会的来!