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

相关文章

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell