64B/66B编码

一、前言

8B/10B编码主要作用的优化直流平衡,从8bit中插2个bit进去,这样的话最终效果能够使长0或者长1的位数不超过5位,达到很好的效果。但是由于8B/10B编码的带宽利用率非常低,10G的带宽只有8G在传输有效数据,2G的带宽全部浪费掉了。所以需要一种带宽利用率高的编码。

64B/66B的带宽利用率为64/66=96.9%,所以64B/66B能避免过高的带宽浪费。

以下引自:64B/66B编码技术-CSDN博客

64B/66B编码技术是IEEE802.3工作组为10G以太网提出的,目的是减少编码开销,降低硬件的复杂性,并作为8B/10B编码的另一种选择,以支持新的程序和数据。它并不是真正的编码,而是一种基于扰码机制编解码方式,这种编码方式,是IEEE推荐的10G通信的标准编码方式。

当前,64B/66B编码主要应用于FiberChannel 10GFC和16GFC、10G以太网、100G以太网、10G EPON、InfiniBand、Thunderbolt和Xilinx的Aurora协议。

二、64B/66B编码原理

64b/66b编码主要是将64b的数据或者控制数据编码成66b数据,编码过程是在64b的数据或控制信息前面加入2bit数据,这2bit所代表的含义如下:

00:编码错误 

01:64bit为纯数据 

10: 64bit为控制数据或者数据与控制数据的混合

00:编码错误

在编码过程中,如果传输正常只会出现01 和 10

编码过程如下:

①  对于纯数据Pure data

 同步头:01,后面的信息:8*8=64bit数据

 ②  对于纯控制Pure Control (Type = 0x1E

同步头:10,后面的信息:8bit类型表示+7*8控制信息

 ③  对于数据和控制信息的混合

 同步头:10,后面的信息:数据信息和控制信息的混合.主要用来对不是8 Byte的帧进行帧对齐。一共有8种对齐方式。其中,D表示数据编码,每个数据码8bit;Z表示控制码,每个控制码7bit;S表示包的开始,T表示包的结束。S只会出现在8字节中的第0和第4字节,T能够出现在任意的字节。

64B/66B全部编码格式图如下图所示:

一个18 bytes的数据块的传输过程如下图所示

从图中我们可以直观的看到,在数据的传输过程中,我们需要用到两个控制帧,一个是开始部分的控制帧,用来告诉接收方这是某一个数据块的开始,还要有的是一个用来表示结束的控制帧,告诉接收方该数据块到此结束。

三、扰码

64b/66b编码中对于开始帧和结束帧之间的纯数据帧,有可能会出现会出现长连“0”或者长连“1”的情况,所以64b/66b直流平衡的性能很差。但是64b/66b编码采用加扰的方式减小这一影响。

加扰就是一种将数据重新排列或者进行编码以使其最优化的方法,他的作用是对数字信号的比特级进行随机处理,减少连0和连1的出现,从而减少码间干扰和抖动,方便接收端的时钟提取;同时又扩展了基带信号频谱,起到加密的效果在统计结果上,会使得“0”和“1”出现的概率相同。

扰乱虽然改变了原始传送码流,但这种扰乱是有规律的,因而也是可以解除的,在接收端解除这种扰乱的过程称为解扰。完成扰码和解扰的电路相应称为扰码器和解扰器。

64B/66B自同步扰码实现随机化,编码所使用的扰码器为: X58+X39+1

扰码的数学原理使用了多项式,多项式的选择通常是基于扰码的特性,包括生成数据的随机度,以及打乱连0和连1的能力。一个简单的扰码器包含一组排列好的触发器,用于移位数据流。大部分的触发器只需要简单地输出下一个比特流即可,但是在复杂的扰码电路中,触发器需要与数据流中的历史比特进行逻辑运算(与和或运算)。基本的扰码电路如下所示。。

在GT Transceiver 中,Gearbox提供64b/66b、64b/67b编码的功能。

四、对比 

从上图可以看出,8B/10B长连0的最大个数为5,拥有出色的直流平衡和位同步时钟恢复能力,64B/66B主要取决于加扰的方式。对于字同步,8B/10B用K码来进行字同步,而64B/66B使用两位同步头进行同步,控制字符,8B/10B用K码来进行,而64B/66B采用同步头为10控制帧进行控制。

五、总结

64B/66B编码使用扰码的方式,在统计分布上,使得“0”和“1”出现的概率相同,减小连续出现的情况。但是这种方式在微观上并不像8B/10编码对于所有的码型都合适,具体还要看扰码器接收器的能力。但是64B/66B毫无疑问提高的带宽的利用率,这方面在更高速的传输环境下更具有优势。

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

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

相关文章

使用Git将文件夹上传到Github以及使用Git LFS上传大文件

使用Git将文件夹上传到Github以及使用Git LFS上传大文件

【高录用-快速见刊】2024年数字化经济与金融创新国际学术会议(ICDEFI 2024)

会议简介 2024年数字经济与金融创新国际学术会议即将召开。此次会议旨在汇集全球数字经济与金融创新领域的专家学者,共同探讨数字经济的发展趋势以及金融创新的路径。与会者将分享前沿研究成果,讨论数字技术在金融领域的应用与创新,并推动数…

一篇文章了解php7和php8新特性

PHP7新特性 ?? 运算符 php7以前用三目判断变量是否存在或是否为空 $a isset($_GET[a]) ? $_GET[a] : 1;php7新增null 合并运算符??快捷判断 $a $_GET[a] ?? 1;函数返回值类型声明 用:返回值类型的形式定义函数的返回值类型 <?phpdeclare(strict_types1); fun…

算法刷题记录 Day46

算法刷题记录 Day46 Date: 2024.04.13 lc 53. 最大子数组和 class Solution { public:int maxSubArray(vector<int>& nums) {// dp[i]表示以nums[i]结尾的连续子数组的最大和&#xff1b;// dp[i] max(nums[i], dp[i-1]nums[i]);若之前的最大和小于0&#xff0c;…

Unity DOTS1.0(4) Baking 和 Baker

Baking 概念&#xff1a; 把Editor中的GameObject数据转换成entities数据写入到Entity Scens里面,这个过程我们叫做BakingBaking是一种不可逆的操作&#xff0c;把低效代价昂贵的但是灵活的GameObjects转换成性能高效的Entities与Components。 作用&#xff1a; 在传统的模…

MyBatis批量插入的五种方式

MyBatis批量插入的五种方式: 一、准备工作 1、导入pom.xml依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MySQL驱动依赖 --…

【蓝桥杯日常】

美丽的2 #include <iostream> using namespace std; int main() {int cnt0; int tmp;for(int i1;i<2020;i){tmpi;//避免改变i的值while(tmp){if(tmp%102){cnt;break;//有2就跳出循环} tmp/10;}}cout<<cnt;return 0; }基础不牢地动山摇是我这样的。这个题花费的…

韩顺平 | 零基础快速学Python(15) 错误和异常

概述 Python有两种不同的错误&#xff1a;语法错误和异常。 语法错误SyntaxError/句法错误/解析错误&#xff1a;执行前编译器检测到的错误。语法错误也是一种异常&#xff0c;SyntaxError继承Exception。 异常Exception&#xff1a;执行时检测到的错误。 需求&#xff1a;出…

vue3 依赖-组件tablepage-vue3说明文档,列表页快速开发,使用思路及范例(Ⅱ)搜索及数据获取配置项

github求⭐ vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例&#xff08;Ⅰ&#xff09;配置项文档 vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例&#xff08;Ⅱ&#xff09;搜索…

Linux命令-dris命令(显示和清空目录堆栈中的内容)

说明 dris命令 用于显示和清空目录堆栈中的内容。 语法 dris(选项)选项 n&#xff1a;显示从左边算起第n笔的目录&#xff1b; -n&#xff1a;显示从右边算起第n笔的目录&#xff1b; -l&#xff1a;显示目录完整的记录。

Java 8 Date API:深挖`LocalDate.plusWeeks(1)`方法的使用及潜在“陷阱”

这里写目录标题 引言方法介绍潜在“陷阱”与注意事项1. 对于跨越月份和年份边界的情况2. ISO周定义的影响3. 时间区间的理解和使用 正确使用与规避“陷阱”结语 引言 在Java 8中&#xff0c;日期时间API进行了全面改革&#xff0c;引入了新的java.time包&#xff0c;其中的Loca…

什么是享元模式,有哪些具体应用

一、定义 享元模式是一种通过尽可能多地共享数据来最小化内存使用和对象数量&#xff0c;从而提高性能的设计模式。在享元模式中&#xff0c;如果需要相同数据的多个对象&#xff0c;则共享这些对象而不是创建新的对象&#xff0c;从而提高系统的效率。 其实有很多应用场景&am…

数据库(1)

目录 1.什么是事务&#xff1f;事务的基本特性ACID&#xff1f; 2.数据库中并发一致性问题&#xff1f; 3.数据的隔离等级&#xff1f; 4.ACID靠什么保证的呢&#xff1f; 5.SQL优化的实践经验&#xff1f; 1.什么是事务&#xff1f;事务的基本特性ACID&#xff1f; 事务指…

kotlin基础学习教程以及代码案例

基础概念和知识点&#xff1a; Kotlin的基础语法涵盖了许多重要的知识点&#xff0c;以下是其中的一些核心要素&#xff1a; 变量与常量&#xff1a; var 关键字用于声明可变的变量。val 关键字用于声明只读的变量&#xff0c;即常量。const val 用于编译时常量&#xff0c;只…

Alibaba --- 如何写好 Prompt ?

如何写好 Prompt 提示工程&#xff08;Prompt Engineering&#xff09;是一项通过优化提示词&#xff08;Prompt&#xff09;和生成策略&#xff0c;从而获得更好的模型返回结果的工程技术。总体而言&#xff0c;其实现逻辑如下&#xff1a; &#xff08;注&#xff1a;示例图…

Kotlin - 时间 Duration

一、概念 用于表示时间度量&#xff0c;简化了时间单位的换算、计算时间差、操作间隔、比较等场景。 二、使用 2.1 创建 2.1.1 Number -> Duration 扩展函数适用于 Int、Long、Double。Duration 可以是正、负、零、正无穷大或负无穷大。 nanosecondspublic inline val Int…

napi系列学习进阶篇——NAPI异步调用

简介 OpenHarmony Napi 标准系统异步接口实现支持Callback方式和Promise方式。标准系统异步接口实现规范要求&#xff0c;若引擎开启Promise特性支持&#xff0c;则异步方法必须同时支持Callback方式和Promise方式。使用哪种方式由应用开发者决定&#xff0c;通过是否传递Call…

SpringMVC--获取请求参数 / 域对象共享数据

目录 1. SpringMVC 获取请求参数 1.1. 通过ServletAPI获取 1.2. 控制器方法形参获取 1.3. RequestParam 1.4. RequestHeader 1.5. CookieValue 1.6. 通过POJO获取请求参数 1.7. 解决获取请求参数的乱码问题 2. 域对象共享数据 2.1. 三大域对象 2.2. 准备工作 2.3. S…

RedisTemplate对象中方法的使用

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Redis是一个key-va…

第二届数据安全大赛暨首届“数信杯”数据安全大赛数据安全积分争夺赛-东区预赛wp

附件下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1tClZrup28n4fUe5Kpa7mgQ?pwdkbd6 文章目录 数据安全题re_ds001Homooo0 数据分析题数据分析1-1数据分析1-2数据分析1-3数据分析2-1数据分析2-2数据分析2-3数据分析3-1数据分析3-2数据分析3-3数据分析5-1数据…