CXP协议的传输层介绍 8b/10b编码

2024-01-08 04:30

本文主要是介绍CXP协议的传输层介绍 8b/10b编码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

8b/10b编码与K码

upconnection 和downconnection均使用8b/10b编码,因此我们先简单回顾一下8b/10b吧

8B/10B编码被广泛应用到高速串行总线,如IEEE1394b、SATA、PCI-Express、Infini-band、FiberChannel、XAUI、RapidIO、USB 3.0、JESD204B、CXP等几乎所有高速串行协议。8B/10B编码将待发送的8位数据转换成10位代码组,其目的是保证直流平衡,避免出现长时间的0或者1,避免有效信号被滤除。

8bit原始数据可以分成两部分:低位的5bit EDCBA(设其十进制数值为X)和高位的3bit HGF(设其十进制数值为Y),可以记为D.X.Y或K.X.Y,其中D.X.Y表示有效数据,K.X.Y表示控制字符。

另外,8B/10B编码中还用到12个控制字符,他们可以作为传输中帧起始、帧结束、传输空闲等状态标识,与数据字符的记法类似,控制字符一般记为K.X.Y。8bit数据有256种,加上12种控制字符,总共有268种。10bit数据有1024种,可以从中选择出一部分表示8bit数据,所选的码型中0和1的个数应尽量相等。8B/10B编码中将K28.1、K28.5和K28.7等作为K码的控制字符,称为“comma”。在任意数据组合中,comma只作为控制字符出现,而在数据负荷部分不会出现,因此可以用comma字符指示帧的开始和结束标志,或始终修正和数据流对齐的控制字符。

DC均衡 DC-balanced

DC banlance表示0和1的个数接近,出于2个目的:1、避免长1长0,这样信号从频谱上看是比较干净的,利于信号的传输;2、保证接收端可以通过数据正确恢复时钟(clock recovery)

不一致性 Disparity

使用 “不一致性(Disparity)”来描述编码中"1"的位数和"0"的位数的差值(1个个数减去0的个数),8b/10b编码仅有"+2"(  "0"比"1"多两个)、"0"( "0"与"1"个数相等)以及"-2"("1"比"0"多两个)这三种状况,这是因为编码由3b/4b 与5b/6b编码组成,他们各自的dispararity都只会有1,0,-1的数值,累加之后就只会有+2,0,-2 三种情形。

运行不一致性 Running Disparity

上述不一致性的说法针对的是一个静态的单10bit编码,会有+2,0,-2三种情形,为了保证DC均衡,我们要保证长时间的累计编码不一致性要接近于0,为了保证这个特性,每个十进制码会对应RD+和RD- 两组编码,RD-对应+2 or 0,RD+ 对应 -2 or 0,Next RD值依赖于Current RD以及当前6B码或者4B码的Disparity。根据Current RD的值,决定5B/4B和 3B/4B编码映射方式,编码映射表如下图所示:

8b/10b编码在CXP 传输层的应用举例

CXP的数据传输全部使用8b/10b编码,每4个10bit编码成为1个word,除了低速数据传输中的trigger触发数据包需要占用6个字符。每个word中对应的4个字符分别成为P0/1/2/3,传输时P0先完成传输,接收端需要先接收对齐控制码来找到正确的边界,然后解析数据。

下表是CXP协议中对于控制码的应用规则。

下图是IDLE word对应的传输,IDLE是CXP处于空闲状态时,总线上必须传输的一组字符,对于高速数据传输来说,每隔99个word应当发送一次IDLE,对于低速传输每隔9999个word应当传输一次IDLE。IDLE对应的K码分别为

根据之前的编码对应表格,我们来分析一下K28.5对应0011111010(因为初始的RD必须是-1), k28.1对应1100000110(RD应该等于+1,从而保证DC平衡)。

那么具体如何实施8b/10b 编码呢?

1、参考原始专利自主编写;

2、参考 open cores https://opencores.org/projects/8b10b_encdec;VHDL

3、参考 https://github.com/fransschreuder/8b10b_VHDL;VHDL

4、参考 http://asics.chuckbenz.com/#My_open_source_8b10b_encoderdecoder ; Verilog

还有一个问题,具体实施中,如何确定byte的boundry呢?即如何对齐呢?

1、利用K28.5做对齐,在接收端的alignement 对齐逻辑中,反复 滑动bit,直到找到K28.5的10bit pattern;

这篇关于CXP协议的传输层介绍 8b/10b编码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582318

相关文章

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp