8b10b编解码仿真

一、基本概念

  8B/10B编码(8-bit to 10-bit encoding)是一种将8位数据(包括数据字符和控制字符)转换为10位符号(Symbol)的编码技术,由IBM工程师Al Widmer和Peter Franaszek于1983年提出。其核心思想是通过引入冗余位(2位/8位,编码效率80%),实现直流平衡、时钟同步,广泛应用于高速数据传输场景。
  直流平衡(DC Balance)的意思是确保传输信号中“0”和“1”的数量尽可能相等,避免直流偏置(DC Offset)导致的信号失真和传输损耗。还有通过冗余位调整符号的“偏置值”(Disparity),使连续传输的符号整体保持0和1的平衡。
  还有通过8B/10B编码可以避免长串连续的0或1(如全0或全1),保证接收端能从数据流中提取稳定的时钟信号。

二、编码原理

  8B/10B将8位输入分为两部分:
 高5位(5B):从8位中取高5位,编码为6位符号(5B/6B编码)。
 低3位(3B):剩余低3位,编码为4位符号(3B/4B编码)。
  最终将6位和4位合并为10位符号。
  8B/10B编码后的符号分为两种:
(1) 数据符号(D码): 8bit数据(0x00~0xFF)可映射到10bit符号中的512个,正负各256个。如下图部分符号示例,参考Xilinx的ug196_Virtex-5 FPGA RocketIO GTP Transceiver用户手册。
在这里插入图片描述

(2) 控制符号(K码):编码特殊控制字符(如K28.5用于帧同步)。如下图示例。
在这里插入图片描述

  为什么10bit符号会有正负之分?这里涉及到偏置值概念,也称为运行不一致性(Running Disparity,RD)。
  偏置值表示当前符号中“1”与“0”的数量差。
• 若码字有6个1和4个0,偏置值为+2;
• 若码字有4个1和6个0,偏置值为-2;
  编码器维护一个全局偏置状态,根据前一个符号的偏置值,选择当前符号的两种可能编码中偏置相反的版本,以保持整体平衡。
例:若前一个符号偏置为+1,当前符号优先选择偏置为-1的编码,使总偏置趋近于0。

三、应用场景

  8B/10B编码是高速串行通信的经典方案,常见于:

  • 光纤通道(Fibre Channel)
  • 千兆以太网(Gigabit Ethernet)
  • PCI Express(PCIe)1.0/2.0
  • Serial ATA(SATA)
  • InfiniBand
  • USB 3.0(部分变体,如64B/66B为改进版)

四、K码符号

  上表中8B/10B编码中的K码有12个,原表中没有列出哪个是高位,哪个是低位,所以这里指示一下高低位。
在这里插入图片描述

K28_0 = 8'h1C; // (10b-)10'h0BC, (10b+)10'h343
K28_1 = 8'h3C; // (10b-)10'h27C, (10b+)10'h183
K28_2 = 8'h5C; // (10b-)10'h2BC, (10b+)10'h143
K28_3 = 8'h7C; // (10b-)10'h33C, (10b+)10'h0C3
K28_4 = 8'h9C; // (10b-)10'h13C, (10b+)10'h2C3
K28_5 = 8'hBC; // (10b-)10'h17C, (10b+)10'h283
K28_6 = 8'hDC; // (10b-)10'h1BC, (10b+)10'h243
K28_7 = 8'hFC; // (10b-)10'h07C, (10b+)10'h383
K23_7 = 8'hF7; // (10b-)10'h057, (10b+)10'h3A8
K27_7 = 8'hFB; // (10b-)10'h05B, (10b+)10'h3A4
K29_7 = 8'hFD; // (10b-)10'h05D, (10b+)10'h3A2
K30_7 = 8'hFE; // (10b-)10'h05E, (10b+)10'h3A1

  K码所对应的8bit数据只有配置K码指示信号时才按K码编码,否则没有K码指示信号则只是普通D码数据。

五、8B/10B编解码仿真

  仿真工程可以去如下地址下载https://download.csdn.net/download/cjie221/90714799
  仿真框图如下,用计数器产生0~255的数据,用k_valid为1来指示K码数据。经encoder_8B10B测试单元编码生成10bit符号,再经decoder_8B10B测试单元解码恢复原始8bit数据和k_out指示信号。
在这里插入图片描述
  仿真波形如下,encoder_8B10B和decoder_8B10B模块数据输出都比输入数据延时2拍。
在这里插入图片描述

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

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

相关文章

23龙信服务器wp

中规中矩的一套服务器,比较简单 1.服务器系统的版本号是___。(格式:1.1.1111) 2.网站数据库的版本号是___。(格式:1.1.1111) 3.宝塔面板的“超时”时间是___分钟。(格式:…

Redis 存储原理与数据模型(三)

目录 存储结构 存储转换 数据组织 hash 冲突 负载因子 扩容 缩容 渐进式rehash Redis 线程模型 单线程命令处理机制 为什么Redis 命令的单线程快 机制 优化 柔性数组 Redis reactor_io 多线程网络模型 存储结构 key-value键值对通过 hash 的方式存储到数组中value 主要…

langchain4j中使用milvus向量数据库做RAG增加索引

安装milvus向量数据库 官方网址 https://milvus.io/zh 使用docker安装milvus mkdir -p /data/docker/milvus cd /data/docker/milvus wget https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh#在docker中启动milvus sh standalone_emb…

UE5.3 C++ 房屋管理系统(一)

一.框架思路 1.如何加载。房屋管理,既然管理。就存在动态加载,和静态加载的考虑。如果是静态加载,就是在编辑器情况下放置,但这样方便了摆放,但管理就需要在开始是将所有的房屋找到加到管理者里。你无法决定拖入场景的…

4.1【LLaMA-Factory 实战】医疗领域大模型:从数据到部署的全流程实践

【LLaMA-Factory实战】医疗领域大模型:从数据到部署的全流程实践 一、引言 在医疗AI领域,构建专业的疾病诊断助手需要解决数据稀缺、知识专业性强、安全合规等多重挑战。本文基于LLaMA-Factory框架,详细介绍如何从0到1打造一个垂直领域的医…

解决LangChain4j报错HTTP/1.1 header parser received no bytes

问题描述 当使用langchain4j-open-ai调用自己部署的大模型服务时报错: public static void main(String[] args) {OpenAiChatModel model OpenAiChatModel.builder().apiKey("none").modelName("qwen2.5-instruct").baseUrl("http://19…

阿里云codeup以及本地gitclone+http

cmd命令行乱码问题、解决 chcp 65001 git代码提交 git add . git commit -m init git push origin master

2025.05.07-淘天算法岗-第二题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 完美拼图挑战 问题描述 A先生是一位拼图爱好者,他有两种形状的拼图块: a a a

Spring Boot中Redis序列化配置详解

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在使用Spring Boot集成Redis时,序列化方式的选择直接影响数据存储的效率和系统兼容性。默认的JDK序列化存在可读性差、存储空间大等问题&am…

紫禁城多语言海外投资理财返利源码带前端uniapp纯工程文件

测试环境:Linux系统CentOS7.6、宝塔、PHP7.2、MySQL5.6,根目录public,伪静态thinkphp,开启ssl证书 语言:中文简体、英文、越南语、马来语、日语、巴西语、印尼语、泰语 前端是uniapp的源码,我已经把nmp给你…

搭建大数据学习的平台

一、基础环境准备 1. 硬件配置 物理机:建议 16GB 内存以上,500GB 硬盘,多核 CPU虚拟机:至少 3 台(1 主 2 从),每台 4GB 内存,50GB 硬盘 2. 操作系统 Ubuntu 20.04 LTS 或 CentOS…

Linux 软硬连接详解

目录 一、软链接(Symbolic Link) ‌定义与特性 ‌实现方法‌使用 ln -s 命令: 二、硬链接(Hard Link) 1、是什么 2、工作机制 3、实现方式 一、软链接(Symbolic Link) ‌定义与特性 定义…

每日c/c++题 备战蓝桥杯(洛谷P1115 最大子段和)

洛谷P1115 最大子段和 题解 题目描述 最大子段和是一道经典的动态规划问题。题目要求:给定一个包含n个整数的序列,找出其中和最大的连续子序列,并输出该最大和。若所有数均为负数,则取最大的那个数。 输入格式: 第…

前端取经路——框架修行:React与Vue的双修之路

大家好,我是老十三,一名前端开发工程师。在前端的江湖中,React与Vue如同两大武林门派,各有千秋。今天,我将带你进入这两大框架的奥秘世界,共同探索组件生命周期、状态管理、性能优化等核心难题的解决之道。无论你是哪派弟子,掌握双修之术,才能在前端之路上游刃有余。准…

PyTorch API 1 - 概述、数学运算、nn、实用工具、函数、张量

文章目录 torch张量创建操作索引、切片、连接与变异操作 加速器生成器随机采样原地随机采样准随机采样 序列化并行计算局部禁用梯度计算数学运算常量逐点运算归约操作比较运算频谱操作其他操作BLAS 和 LAPACK 运算遍历操作遍历操作遍历操作遍历操作遍历操作遍历操作遍历操作遍历…

java命令行打包class为jar并运行

1.创建无包名类: 2.添加依赖jackson 3.引用依赖包 4.命令编译class文件 生成命令: javac -d out -classpath lib/jackson-core-2.13.3.jar:lib/jackson-annotations-2.13.3.jar:lib/jackson-databind-2.13.3.jar src/UdpServer.java 编译生成class文件如下 <

ABC 转 STL 全攻略:格式解析、方法实操与问题解决

在 3D 建模与设计领域&#xff0c;不同格式文件间的转换是一项基础且重要的操作。ABC&#xff08;Alembic&#xff09;和 STL&#xff08;Standard Triangle Language&#xff09;是其中常见的两种格式。ABC 格式因其高效存储和传输 3D 数据的特性&#xff0c;常被用于影视特效…

编写一个处理txt的loader插件,适用于wbepack

处理txt的webpack的loader插件 编写一个处理txt的loader插件&#xff0c;适用于wbepack 编写一个处理txt的loader插件&#xff0c;适用于wbepack 实现一个处理txt的插件&#xff0c;给文本每行前后添加**** module.exports function txtLoader(content) {// 确保 Loader 是异…

DeepSeek的100个应用场景

在春节前夕&#xff0c;浙江杭州的AI企业DeepSeek推出了其开源模型DeepSeek-R1&#xff0c;以仅相当于Open AI最新模型1/30的训练成本&#xff0c;在数学、编程等关键领域展现出媲美GPT-o1的出色性能。发布仅数日&#xff0c;DeepSeek-R1便迅速攀升至中美两国苹果应用商店免费榜…

ev_loop_fork函数

libev监视器介绍&#xff1a;libev监视器用法-CSDN博客 libev loop对象介绍&#xff1a;loop对象-CSDN博客 libev ev_loop_fork函数介绍:ev_loop_fork函数-CSDN博客 libev API吐血整理&#xff1a;https://download.csdn.net/download/qq_39466755/90794251?spm1001.2014.3…