和大家分享一下关于8b/10b编码的知识点,如有什么错误之处或大家有什么额外的见解欢迎大家公众号后台留言!

一、Serdes高速收发器

在传统的源同步传输中,数据和时钟分离,在速率较低(<1000M)时问题不大,关于M?推测单位应该是Mbps。

在传输速率越来越高时,由于传输线的时延和抖动存在(个人理解为时序约束中的routing布线延迟和时钟Jitter--也就是时钟周期差异),导致接收端不能正确的采样数据,时钟边沿无法与数据中心对齐。

为了解决该问题,可以将数据从时钟中恢复(CDR技术,Clock Data Recovery),这样就不会存在延迟不一致的情况,有轻微Jitter也不会影响采样(恢复的时钟随着数据一起抖动)。

But!but!but!将数据和时钟混合,接收端从接收数据中恢复出时钟的话,那么数据接收方要和数据发送方共地。

这样的话就会增加接口线路,且往往很难实现,所以数据传输采用差分传输,抗共模噪声。

那么问题又来了,差分传输的话,由于电压的绝对值较大,变化速率更快(斜率更大),数据接收端的电流会存在过大问题,在接收端使用交流耦合电容进行交流耦合,隔直流通交流(链路交流耦合)。

如下图所示,直流平衡时,数据流中的0和1交替出现,可以认为是交流信号,可以顺利通过耦合电容,DC不平衡时,数据流中出现多个连续的0或者1,可认为这段时间内的信号是直流,通过电容时会产生传输错误,所以就有了8b/10b(64b/66b)编码,高速串行总线采用编码技术的目的是平衡数据流中的0和1,从而实现DC平衡。

二、CDR技术

Clock Data Recovery时钟恢复电路一般是通过PLL电路(鉴相器PD、环路滤波器LF、压控振荡器VCO)实现,其作用是从数据流中准确的恢复出时钟和数据信息。

参考时钟输入到鉴相器(PD),鉴相器比较的是两个相位,一个是参考时钟,一个是数据恢复时钟,两个时钟之间存在两种差异,一种是频率差,另一种是相位差,当恢复时钟相位与参考时钟相位之间存在差异的话会产生一个对应比例的积分值,根据积分值的大小,控制数据时钟提取电路的时钟进行偏移,从而使得数据恢复时钟和参考时钟相位进行对齐,此时认为输出时钟锁定,即所向为认为时钟已经锁定到了所需要的相位或者频点上,就可以作为一个可以使用的时钟。

三、Comma码(K码)

在serdes上的高速串行数据流在接收端需要重新串并转换成多个字节的并行数据,如何有效的识别32bit数据边界?这就需要一个特殊的序列,即为Comma码。在任意数据组合中,Comma码只作为控制字符出现,在数据负荷部分不会出现,所以使用comma码字符只是帧的开始和结束标志,或者修正和数据流对齐的控制字符。

接收器在输入数据流中扫描搜寻特定的比特序列(comma),如果找到序列,解串器调整字符边界以匹配检测到的Comma字符序列。

SATA应用中使用K28.5(Align原语的第一个字节)作为comma字符

K码有多个,比如K28.0、K28.1、K28.5等,K码标志帧开始、帧结束、时钟修正和数据对其等功能,K指的是Comma码,K和小数点之间的数字指的是8位数据的后5位,小数点后面的数字指的是8位数据的前3位【K码格式,好重要的,在PCIe部分这个K码搞了好久才理解】。

以K28.5为例:

28表示8位数据的后五位为27,即5’b1_1100

5表示的8位数据的前三位为5,即3’b101

故K28.5的二进制形式为:8’b1011_1100,即8’hBC

K28.5字符用于识别一帧数据的开始,数据发送时以字为单位传输,在接口处数据是32位,用于字节对齐与数据同步。检测到帧同步信号(K28.5)时,根据所处的位置将同步字符提取出来删掉,剩余部分为有效数据,比如:

接收到的数据是32’h08bc0706,此时帧同步信号为4’h4==4’b0100,即表示K字符位于第三byte,一共4个字节,byte0~3,需要将byte2去掉。

K码表:

其中K28.1,K28.5,K28.7可以作为分隔码,也叫comma码,用于接收端在串行的数据流中找到字节边界。常用的K28.5即0xBC。

祝大家521快乐,到了学校一堆事要做,可能以后不能天天更新了,请理解~~~~

~~~~感谢阅读~~~~谢谢!

8b10b编码源码 matlab,8b/10b编码技术系列(一):Serdes、CDR、K码相关推荐

  1. 让我们来搞清楚8b/10b编码到底是怎么回事吧

    前言:很多知识我们往往只是了解了皮毛,不知道它为什么产生,更不清楚它深层的应用,很多人半瓶水晃荡,而这正是我最厌恶的,对于8B/10B编码这个知识点我就来扯开它的神秘面纱. 8b/10b的由来: 8B ...

  2. 高速串行总线系列(1)8B/10B编码技术

    目录 8B/10B编码 5B/6B 编码表 3B/4B 编码表 控制字符编码表 8B/10B编码的利用率 参考文献 8B/10B编码 为什么要使用8B/10B编码? 8b/10b编码的特性之一是保证D ...

  3. 高速串行通信常用的编码方式-8b/10b编码/解码

    绪论 8b/10b编码/解码是高速串行通信,如PCle SATA(串行ATA),以及Fiber Channel中常用的编解码方式.在发送端,编码电路将串行输入的8比特一组的数据转变成10比特一组的数据 ...

  4. 8b/10b编码技术系列(一):Serdes、CDR、K码

    和大家分享一下关于8b/10b编码的知识点,如有什么错误之处或大家有什么额外的见解欢迎大家公众号后台留言! 一.Serdes高速收发器 在传统的源同步传输中,数据和时钟分离,在速率较低(<100 ...

  5. serdes系列总结——8B/10B编码、66B/64B编码、扰码

    serdes系列总结--8B/10B编码.66B/64B编码.扰码 8B/10B编码 K码 66B/64B编码 扰码 8B/10B编码.扰码对数字信号的比特级进行随机处理,减少连0和连1的出现,从而减 ...

  6. #PCIE# 8b/10b 编码

    前言 8B/10B,也叫做8字节/10字节或8B10B.8B/10B方式最初由IBM公司于1983年发明并应用于ESCON(200M互连系统),由Al Widmer和Peter Franaszek在I ...

  7. 8b/10b编码是什么?

    8b/10b的由来: 8B/10b编码也叫做8字节/10字节,是目前高速串行通信中经常用到的一种编码方式,该编码方式最初是由IBM公司在1983年发明并应用于ESCON[200M互联系统],由AI w ...

  8. 【FPGA】8B/10B编码--转自wiki百科

    8B/10B,也叫做8字节/10字节或8B10B.8B/10B方式最初由IBM公司于1983年发明并应用于ESCON(200M互连系统),由Al Widmer和Peter Franaszek在IBM的 ...

  9. 高速收发器之8B/10B编码

    前面文章说过,在高速链路中导致接收端眼图闭合的原因,很大部分并不是由于高频的损耗太大了,而是由于高低频的损耗差异过大,导致码间干扰严重,因此不能张开眼睛.针对这种情况,前面有讲过可以通过CTLE和FF ...

最新文章

  1. Android RelativeLayout和LinearLayout性能分析
  2. CodeForces - 1030C Vasya and Golden Ticket(思维)
  3. 反汇编RETN 0x0c的理解
  4. linux多线程_Java+Linux,深入内核源码讲解多线程之进程
  5. C语言怎么计算数据类型范围?
  6. Recbole自定义训练集、验证集和测试集推荐
  7. JDK1.7 深入理解 LinkedHashMap
  8. Annotation 使用备忘2
  9. win2008怎么配置php环境,Win2008 PHP 配置环境搭建 教程_PHP教程
  10. ubuntu14.10 LTS安装完成后鼠标闪烁问题
  11. docker安装redis并挂载配置文件
  12. 赛门铁克并购 Blue Coat 的益处显现
  13. logstash 时间获取失败(yyyy-mm-dd失效)
  14. eclipse指定jsp的默认打开方式
  15. java基础知识和JDBC
  16. 如何让自己打计算机打字快起来,电脑快速打字的技巧
  17. 【系统集成项目管理】之信息系统集成(二)
  18. 【JavaWeb】客户关系管理系统
  19. ConcurrentHashMap源码走读
  20. 如何使你的项目有国际范

热门文章

  1. 【Mac软件推荐】10个你不能没有的Mac菜单栏应用程序
  2. Java中如果被除数是零时的异常处理
  3. 超级玛丽3号max即将停售70版本,到底保障如何,值不值得购买呢
  4. 买保险选大公司还是小公司?
  5. Java位语句_卫语句 - 宿小帅的个人空间 - OSCHINA - 中文开源技术交流社区
  6. Tokenview.io推出ETH 2.0信标链浏览器
  7. 大数据与机器学习-大数据预测
  8. 单片机输出信号与电机驱动信号之间要用光电耦合器隔离
  9. win7系统笔记本做无线路由器
  10. Linux shell:脚本编写快速入门