201301148B10B编码介绍

本文介绍了8B10B编码技术的起源、特性和应用领域。该技术由IBM于1983年发明,通过8b/10b编码确保数据传输的直流平衡,并利用特殊代码进行错误检测。广泛应用于高速串行总线,如USB3.0、PCI Express等。

//wikipedia上介绍更详细去那里看就好了

起源:

因应光纤的传输技术而被提出。最初由IBM公司于1983年发明并应用于ESCON(200M互连系统),由Al Widmer和Peter Franaszek在IBM的刊物“研究与开发”上描述。

特性:

1)保证DC 平衡:

采用8b/10b编码方式,可使得发送的“0”、“1”数量保持基本一致。

连续的“1”或“0”不允许超过5位,即每5个连续的“1”或“0”后必须插入一位“0”或“1”,从而保证信号DC平衡,在链路超时不至于发生DC失调。

2)纠错:

     利用一些特殊的代码(在PCI-Express总线中称为K码),可以帮助接收端进行还原的工作,并且可以在早期发现数据位的传输错误,抑制错误继续发生。

原理:

编码原理:将一组连续的8位数据分解成两组数据,一组3位,一组5位,分别经过3B4B编码和5B6B编码后,成为一组4位的代码和一组6位的代码,从而组成一组10位的数据,发送出去。

解码原理:将1组10位的输入数据经过变换得到8位数据位。数据值可以统一的表示为DX.Y或KX.Y,其中D表示为数据代码,K表示为特殊的命令代码,X表示输入的原始数据的低5位EDCBA,Y 表示输入的原始数据的高3位HGF。

应用:

8B10B编码是目前许多高速串行总线采用的编码机制,如USB3.0、1394b、Serial ATA、PCI Express、Infini-band、Fibre Channel(网状通道)、RapidIO等总线或网络中均有应用。

缺点:

25%的开销比较浪费带宽。

<think>我们被要求介绍64b/66b编解码技术。根据用户提供的引用和之前的对话,我们需要整合信息,给出清晰的解释。关键点:1.64b/66b编码是一种将64位数据块转换为66位传输块的编码方案,主要用于高速串行通信。2.它通过添加2位同步头和加扰数据来实现时钟恢复和直流平衡。3.对比8b/10b编码,它减少了开销(从25%降到约3%)。根据引用[1]:SRIO的PCS层使用64b/67b编码(注意是67位,但用户问题主要是64b/66b,所以重点在66b)。引用[2]:64b/66b采用加扰方式使数据接近白噪声,达到直流平衡并提高带宽利用率。引用[3]:提到变速器(Gearbox)的作用,用于处理数据位宽转换。引用[4]:关于FPGA中实现时计数器的使用,特别是循环计数范围。我们重点介绍64b/66b,注意引用中提到的64b/67b是另一种编码(用于SRIO),但原理类似。结构:1.概述:定义和目的2.编码结构:同步头和有效载荷3.核心原理:加扰、同步头的作用4.与8b/10b的对比5.实现考虑(如Gearbox)6.应用场景注意:引用[2]提到64b/66b没有像8b/10b那样使用固定编码表,而是采用加扰技术。我们将按照这个思路组织回答。</think>### 64b/66b编解码技术详解 #### ▮ 技术本质与核心结构 64b/66b是一种**高速串行物理层编码方案**,通过将**64位原始数据块**转换为**66位传输块**实现高效通信。其核心结构包含: 1. **2位同步头(Sync Header)** - `01`:标识**数据块**(Payload Data) - `10`:标识**控制块**(Control Information) *提供时钟恢复所需的电平跳变,保证$ P_{\text{transition}} \geq 0.3 $[^2]* 2. **64位有效载荷** - **数据块**:原始数据经过**加扰(Scrambling)** 处理,转化为伪随机序列 - **控制块**:携带流控/空闲帧等管理信息(如SRIO协议中的64b/67b变体[^1]) ```mermaid graph LR A[64位原始数据] --> B{编码类型} B -->|数据块| C[添加同步头'01'] B -->|控制块| D[添加同步头'10'] C & D --> E[加扰处理] E --> F[66位传输块] ``` #### ▮ 核心技术原理 1. **加扰机制(Scrambling)** - 通过**线性反馈移位寄存器(LFSR)** 实现,多项式如 $ x^{58} + x^{39} + 1 $ - 将长连0/1序列转化为伪随机序列,消除直流分量[^2] - 示例:`scrambled_data = raw_data ^ (LFSR << 6)` 2. **时钟恢复机制** - 同步头强制每66位至少出现**1次电平跳变** - 解决接收端时钟漂移问题,满足: $$ \frac{\text{跳变次数}}{\text{总位数}} \geq 0.3 $$ 3. **变速器(Gearbox)处理** - FPGA中需配合**循环计数器**(0-32计数)协调时钟域[^4] - 解决用户时钟与收发器速率差异: ```verilog // Xilinx GTX示例 always @(posedge clk) begin if (txsequence == 32) txsequence <= 0; // 64b/66b循环计数 else txsequence <= txsequence + 1; end ``` #### ▮ 性能优势(对比8b/10b编码) | 指标 | 64b/66b | 8b/10b | |---------------|-----------------|-----------------| | **开销率** | 3% (66/64-1) | 25% (10/8-1) | | **带宽利用率**| 97% | 80% | | **直流平衡** | 加扰实现 | 编码规则强制 | | **适用速率** | ≥10Gbps | ≤5Gbps | #### ▮ 典型应用场景 1. **高速以太网**:10G/25G/100G BASE-R(IEEE 802.3) 2. **互连协议**:PCIe 3.0+,Serial RapidIO(SRIO)[^1] 3. **光纤通信**:OTN(光传输网络) 4. **FPGA高速收发器**:Xilinx GTX/GTH,Intel Stratix 10 TX > 在SRIO协议中演变为**64b/67b编码**,通过额外1位提升控制信息容量[^1] #### ▮ FPGA实现关键模块 ```verilog // 发送端核心逻辑 module tx_64b66b ( input [63:0] data_in, input [6:0] txsequence, // 循环计数器[^4] output [65:0] tx_out ); wire [63:0] scrambled; scrambler scb(.data_in(data_in), .scrambled(scrambled)); assign tx_out = (txsequence==0) ? {2'b10, scrambled} // 控制块 : {2'b01, scrambled}; // 数据块 endmodule // 接收端同步检测 module rx_sync ( input [65:0] rx_stream, output reg block_lock ); always @(*) begin block_lock = (rx_stream[65:64]==2'b01 || rx_stream[65:64]==2'b10); end endmodule ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值