serdes 8b10b 编码的的公式推导过程
时间: 2023-11-25 09:04:35 浏览: 64
8b、10b编码
3星 · 编辑精心推荐
SerDes(Serializer-Deserializer)是一种用于在高速串行通信中传输并行数据的技术。与并行通信相比,它具有更高的带宽和更少的线缆,因而在高速数据通信中得到了广泛应用。其中,8b/10b 编码是 SerDes 技术中最常用的编码方式之一,它可以将 8 个并行数据位编码为 10 个串行数据位,并提供了一定的异步时钟恢复能力,从而可以实现高速数据的可靠传输。
8b/10b 编码采用了一种特殊的编码方式,即将 8 个数据位拆分成 5 位数据和 3 位控制位。其中,5 位数据位可以表示 32 种不同的状态,而 3 位控制位则用于控制编码的过程。具体的编码方式可以采用查找表或状态机实现,下面以查找表为例,推导 8b/10b 编码的公式。
首先,我们需要构建一个 5 位数据位和 3 位控制位的编码表,其中每个输入状态对应一个输出码字。编码表的构建可以采用如下方式:
1. 先构建一个 256 x 10 的表格,其中 256 表示输入状态的个数,10 表示输出码字的位数。
2. 对于每个输入状态,分别计算对应的 10 位输出码字。
3. 将计算得到的输出码字填入表格中对应的位置。
具体的计算方式可以根据编码规则来确定,这里只给出一个简单的示例编码表,如下所示:
| 输入状态 | 输出码字 |
| :------: | :------: |
| 00000 | 1110001110 |
| 00001 | 0100010000 |
| 00010 | 1010101110 |
| 00011 | 1100110010 |
| ... | ... |
接下来,我们可以根据编码表来推导 8b/10b 编码的公式。具体的过程如下:
1. 对于输入的 8 位数据,分别将其拆分为 5 位数据和 3 位控制位。
2. 根据 5 位数据从编码表中查找对应的输出码字,并将其输出。
3. 对于控制位,根据当前输入状态和前一个输出状态计算出控制位的值,并将其输出。
4. 将 10 位输出码字作为串行输出数据。
综上所述,8b/10b 编码的公式可以表示为:
Output = Encode(Data[0:4]) + Control(Data[0:4], Data[5:7], Output[0:9])
其中,Encode(Data[0:4]) 表示将 5 位数据位编码为 10 位输出码字;Control(Data[0:4], Data[5:7], Output[0:9]) 表示根据当前输入状态和前一个输出状态计算控制位的值。
阅读全文