ansi编码转换_8b/1b编码是个什么东东

使用串行比并行总线可以节省更多的布线空间,芯片、电缆等的尺寸可以做得更小,同时传输速率更高。但是,在很多数字系统如CPU、DSP、FPGA等内部,进行数据处理的最小单位都是Byte,即8个bit,如何把一个或多个Byte的数据通过串行总线可靠地传输出去是需要对数据做些特殊处理的。

并串转换与串并转换

最简单的把并行数据转换成串行信号传输的方法如下图所示。比如发送端的数据宽度是8bit,时钟速率是100MHz,我们可以通过Mux(复用器)芯片把8bit的数据时分复用到1bit的数据线上,相应的数据速率提高到800Mbit/s(在有些LVDS的视频信号传输中比较常用的是把并行的7bit数据时分复用到1bit数据线上)。信号到达接收端以后,再通过DeMux(解复用器)芯片把串行的信号分成8路低速的数据。

15fcc776128ca035cd9fa5a30d7a7186.png

这种并串转换方法由于不涉及的信号编解码,结构简单,效率较高,但是需要收发端进行精确的时钟同步以控制信号的复用和解复用操作,因此需要专门的时钟传输通道,而且串行信号上一旦出现比较大的抖动就会造成串并转换的错误。

因此,这种简单的并串转换方式一般用于比较关注传输效率的芯片间的短距离互连或者一些光端机信号的传输中。另外由于信号没有经过任何编码,信号中可能会出现比较长的连续的0或者连续的1,因此信号必须采用直流耦合方式,收发端一旦存在比较大的共模或地噪声,会严重影响信号质量,因此这种并串转换方式用于电信号传输时或者传输速率不太高(通常<1Gb/s),或者传输距离不太远( 通常<50cm)。

8b/10b数据编码

为了提高串行数据传输的可靠性,现在很多更高速率的数字接口采用的是对数据进行编码后再做并串转换的方式。编码的方式有很多,如8b/9b编码、8b/10b编码、64b/66b编码、128b/130b编码等,下面我们以最流行的ANSI 8b/10b编码为例进行一下介绍。

在ANSI 8b/10b编码方式中,8比特的数据先通过相应的编码规则转换成10比特的数据,然后再进行并串转换;接收端收到信号后先把串行数据进行串并转换得到10比特的数据,然后再通过10比特到8比特的解码得到原始传输的8比特数据。因此,如果发送端并行侧的数据速率是8bit100Mb/s,通过8b/10b编码和并串转换后的串行侧的数据速率就是1bit1Gb/s。8b/10b编码方法最早由IBM发明,后来成为ANSI标准的一部分(ANSI X3.230-1994, clause 11),并在通信和计算机总线上广泛应用。下图是ANSI 8b/10b编码表的一部分,以数据0x00为例,其原始的8bit数据是0b00000000,经过编码后就变成了0b1001110100或者0b0110001011。

f3db9bd2dc375667055203377c1cfc58.png

8b/10b编码的好处:

 有足够多的跳变沿,可以从数据里进行时钟恢复。正常传输的数据里可能会有比较长的连续的0或者连续的1,而进行完8b/10b编码后,其编码规则保证了编码后的数据流里不会出现超过5个的连续的0或1,信号里会出现足够多的跳变沿,因此可以采样嵌入式的时钟方式,即接收端可以从数据流里用PLL电路直接恢复时钟,不需要专门的时钟传输通道。

 直流平衡,可以采用AC耦合方式。经过编码后数据里不会出现连续的0或者1了,但是还是有可能在某个时间段内0或者1的数量偏多一些。从上面的编码表中我们可以看到同一个Byte对应有正、负两组10bit的编码,一个编码里1的数量多一些,另一个编码里0的数量多一些。数据在对当前的Byte进行8b/10b编码传输时,会根据前面历史传输的数据中正负bit的数量来选择使用哪一组编码,从而可以保证总线上正负bit的数量在任何时刻基本都是平衡的,也就是直流点不会发生大的变化。直流点平衡以后,在信号传输的路径上我们就可以采用AC耦合方式(最常用的方法是在发送端或接收端串接隔直电容),这样信号对于收发端的地电平变化和共模噪声的抵抗能力进一步增强,可以传输更远的距离。采用AC耦合方式的另一个好处是收发端在做互连时不用太考虑直流偏置点的互相影响,互连变得非常简单,对于热插拔的支持能力也更好。

 有利于信号校验。很多高速信号在做传输时为了保证传输的可靠性要对接收到的信号进行检查以确认收到的信号是否正确。在8b/10bit编码表里,原始的8bit数据总共有256个组合,即使考虑到每个Byte有正负两个10bit编码也只需要用到512个10bit的组合。而10bit的数据总共可以有1024个组合,因此有大约一半的10bit组合是无效的数据,接收端一旦收到这样的无效组合就可以判决数据无效。另外,前面我们介绍过数据在传输过程中是要保证直流平衡的,一旦接收端收到的数据中发现违反直流平衡的规则,也可以判决数据无效。因此采用8b/10b编码以后数据本身就可以提供一定的信号校验功能。不过需要注意的是,这种校验不是足够可靠,因为理论上还是可能存在有几个bit在传输中发生了错误但是结果仍然符合8b/10b编码和规则和直流平衡原则。因此,很多使用8b/10b编码的总线都还会在上层协议上再做相应的CRC校验(循环冗余校验)。

 可以插入控制字符。在10bit数据可以表示的1024个组合中,除了512个组合用于对应原始的8bit数据以及一些不太好的组合(比如0b1100000000这样信号里有太长的连续0或者1而且明显0、1的数量不平衡)以外,还有一些很特殊的组合。这些特殊的组合可以用来在数据传输过程中做为控制字符插入(如下图所示)。这些控制字符不对应特定的8bit数据,但是在有些总线应用里可以代表一些特殊的含义。比如K28.5码型,其特殊的码型组合可以帮助接收端更容易判别接收到的连续的10bit数据流的符号边界,所以在一些总线的初始化阶段或数据包的包头都会进行发送。还有一些特殊的符号用于进行链路训练、标记不同的数据包类型、进行收发端的时钟速率匹配等。

5e5c42ed8060fd84bef5abe228ad335c.png

综上所述,要把并行的信号通过串行总线传输,一般需要对数据进行并串转换。为了进一步减少传输线的数量和提高传输距离,很多高速数据总线采用嵌入式时钟和8b/10b的数据编码方式。8b/10b编码由于直流平衡、支持AC耦合、可嵌入时钟信息、抗共模干扰能力强、编解码结构相对简单等优点,在很多高速的数字总线如FiberChannel、PCI-E、SATA、USB3.0、DisplayPort、XAUI、RapidIO等接口上得到广泛应用。下图是一路串行的2.5Gbps的8b/10b编码后的数据流以及相应的解码结果,从中我们可以明显看到从里面解出的K28.5等控制码以及相应的数据信息。

4a576c50910514a699593fb45e1bfa95.png

8b/10b编码的缺点

需要注意的是,采用8b/10b编码方式也是有缺点的,最大的缺点就是8bit到10bit的编码会造成额外的20%的编码开销。比如对于一个采用8b/10b编码的5Gbps的串行总线来说,其有效的数据传输速率只有4Gbps,也就是说仅为了进行4Gbps的信号传输就需要把总线的数据速率提高到5Gbps。相应地,如果要进行8Gbps的有效数据传输就需要把总线的数据速率提高到10Gbps,而10Gbps相对与8Gbps的数据速率来说,对于硬件人员的设计经验、接插件、板材都有比较高的要求,所以很多10G左右或更高速率的总线都不再使用8b/10b编码方式。比如PCI-E1.0和PCI-E2.0的总线速率分别为2.5Gbps和5Gbps,都是采用8b/10b编码,而PCI-E3.0的总线就舍弃了8b/10b的编码方式,数据速率为8Gbps,是通过效率更高的128b/130b的编码结合更复杂的扰码的方法来实现直流平衡和嵌入式时钟的。另一个例子是FibreChannel总线,1xFC、2xFC、4xFC、8xFC的数据速率分别为1.0625Gbps、2.125Gbps、4.25Gbps、8.5Gbps,都是采用8b/10b编码,而16xFC、32xFC的数据速率分别为14.025Gbps和28.05Gbps,采用的是效率更高的64b/66b编码方式。

来源:网络整理,如涉及版权问题,请及时联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用CSDN云服务搭建一个WordPress 个人站点(详细教程)

目录 前言 站点效果图 搭建服务的一些准备工作 第一步。进入到云服务我的账号模块&#xff0c;创建一个项目&#xff0c; 第二步&#xff0c;先免费领取一台云主机&#xff0c; 第三步&#xff0c;进入云主机控制台 搭建站点操作步骤 第一步&#xff0c;登录云主机 第二…

使用CSDN云服务搭建一个WordPress 个人站点(视频教程)

目录 前言 视频教程 文字版教程 云主机体验地址 官方文档 前言 六一儿童节体验了一下CSDN云主机相关的服务&#xff0c;感觉最近官方最近变化很大&#xff0c;业务范围很广&#xff0c;这里简单体验了一下云主机&#xff0c;给大家分享一点心得&#xff0c;希望对大家有所启…

石板切割问题c语言_岩知识 | 岩板切板有讲究,工艺问题要注意

岩板的火继续烧着&#xff0c;岩板的深加工厂在不断地增加着&#xff0c;岩板的深加工产品正在走向各个建筑项目&#xff0c;逐渐在受到很多项目的宠爱。岩板作为与天然石材完全不同的产品&#xff0c;其优越的理化性能在许多方面胜过天然石材&#xff0c;但也有其严重的不足。…

JavaScript测验题回顾-刷题笔记001

目录 1.我们可以在下列哪个 HTML 元素中放置 Javascript 代码&#xff1f;​编辑 2.写 "Hello World" 的正确 Javascript 语法是&#xff1f; 3.插入 Javacript 的正确位置是&#xff1f; 4.引用名为 "xxx.js" 的外部脚本的正确语法是&#xff1f; 5.如…

java 方法委托托管_Java Web托管选项流程图

java 方法委托托管我经常被问到的一个问题是在何处以及如何托管Java Web应用程序。 在带有嵌入式服务器的Eclipse中创建它很好&#xff0c;但是如何将它带给人们呢&#xff1f; 长期以来&#xff0c;对于发烧友的程序员一直没有答案。 只有昂贵和超大型的选择。 事情最近发生了…

react重新渲染菜单_React实现递归组件

前言今天来实现一个 React 的递归组件。具体的效果图如下:图片说明假设后端返回的数据如下&#xff1a;[{ id: 1, parent_id: 0, name: 广东省, children: [{ id: 2, parent_id: 1, name: 广州市, …

JavaScript测验——给代码添加注释---第一关

校验规则 创建一个//样式的注释, 被注释的文本至少要包含 5 个字符。 创建一个/* */样式的注释, 被注释的文本至少要包含 5 个字符。

举重设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

JavaScript测验——声明变量---第2关

校验规则 注意: 变量名称可以由数字、字母、美元符号$ 或者 下划线_组成&#xff0c;但是不能包含空格或者以数字为开头。 闯关: 使用var 关键字来创建一个名为salePrice的变量。

palapaweb怎样开启服务_为什么说微服务,要从前后端分离开始?一文带你揭秘深入微服务...

前言既要低头赶路&#xff0c;又要抬头望天&#xff0c;科技是为人服务的&#xff0c;任何技术背后都有更深层次的考量。之前的文章中咱们聊了很多微服务的相关内容&#xff0c;简而言之&#xff0c;微服务的本质&#xff0c;就是一种可以加速分工、促进合作的新协作机制。知其…

list集合

List集合 List集合的概述 有序集合&#xff08;也称之为序列&#xff09;&#xff0c;用户可以精确的控制列表中的每个元素的插入位置。用户可以通过整数索引访问元素&#xff0c;并搜索列表中的元素 与 Set 集合不同&#xff0c;列表通常允许重复的元素 List 集合的特点 有…

JavaScript测验——使用赋值运算符---第3关

校验规则 以上代码数值8被赋给变量myVar中&#xff0c;然后再次将变量myVar解析为8并将其赋给myNum变量。 闯关&#xff1a; 把数值6赋给变量 x。 然后把变量x中的内容赋给变量y。

antd table排序 vue_商品品牌业务之Vue编写前端页面

今天是刘小爱自学Java的第145天。感谢你的观看&#xff0c;谢谢你。学习计划安排如下&#xff1a;打算从前端页面到后台服务器代码完整地写一遍&#xff0c;但显然我高估了自己的实力&#xff0c;几个小时的时间根本不够用。并且因为教程和vue现在最新的组件用法不一样&#xf…

JavaScript测验——使用赋值运算符初始化变量---第4关

通常在声明变量的时候会给变量初始化一个初始值。 例如: var myVar 0; 以上代码创建一个名为myVar的变量并指定一个初始值0。

Zabbix-3.0.0 安装Graphtree

导读Zabbix中&#xff0c;想要集中展示图像&#xff0c;唯一的选择是screen&#xff0c;后来zatree解决了screen的问题&#xff0c;但性能不够好。Graphtree 由OneOaaS开发并开源出来&#xff0c;用来解决Zabbix的图形展示问题&#xff0c;性能较好。一、Graphtree功能概述集中…

装饰器设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

JavaScript测验——未初始化的变量---第5关

校验规则 当你用一个值是undefined的变量来做字符串拼接操作的时候&#xff0c;它会输出字符串"undefined"。 闯关: 定义 3 个变量a、b、c&#xff0c;并且分别给他们赋值&#xff1a;3、9、"I am pretty"&#xff0c;这样它们值就不会是undefined了。

修改telnet提示并非_俊翔:修改ECU数据解除奔驰GL350尿素限制

为达到排放要求&#xff0c;很多乘用柴油车都要加尿素(Adblue)&#xff0c;以降低废气排放。在轿车维修当中&#xff0c;最常见的有奔驰GL350、路虎揽胜出现尿素锁定。仪表上提示加尿素&#xff0c;并且限制启动次数。每当把发动机熄火再启动一次&#xff0c;次数就会减少&…

JavaScript测验——变量名大小写---第6关

校验规则 例如&#xff1a; var userName; var userLoginFlag;闯关: 修改已声明的变量&#xff0c;让它们的命名符合驼峰命名法的规范。 这个需要注意的是在声明和赋值时都应该使用驼峰命名法。