深圳幻海软件技术有限公司 欢迎您!

8b10b的理解

2023-07-18

8b10编码的作用是为了保持直流平衡。简单说就是发送的串行数据流中,不能出现持续的1或这0,且1和0的个数最好相等。那么在选择编码映射方案时,为什么不选择8b9b了。如果选择8b9b,为了保持直流平衡,只能在9b中选择4个0、5个1,对应的是5个0、4个1,共C94=126种方案,显然无法满足。那么

8b10编码的作用是为了保持直流平衡。简单说就是发送的串行数据流中,不能出现持续的1或这0,且1和0的个数最好相等。

那么在选择编码映射方案时,为什么不选择8b9b了。如果选择8b9b,为了保持直流平衡,只能在9b中选择4个0、5个1,对应的是5个0、4个1,共C94 =126种方案,显然无法满足。
那么只能选择8b10b了。在10b中,5个0 5个1共有C105 =252种,比28 =256仅仅少了4个,所以8b不能完全映射到01个数完全相等的10b。如果8b能完全映射到01个数完全相等的10b,那么就不用引入运行不一致性了。比如可以8b12b,C126=924>28,就完全不用引入运行不一致的概念了。但这样做,开销显然有点大,有效数据才66%,不合适。
既然8b->10b后不能够让0和1个数完全相等,那么就只能将有些8b映射到4个0 6个1了。C105 +C104 =462,大于28=256,并且还余下了不少,余下的我们10b选择了12个作为了控制码,即K码。此时就不得不引入运行不一致性了。
对于256个D码和12个K码,我们将其映射到10b,并且是一个8位的D码或K码,有两个10位的数据和其对应,这两个10位的对应码互为反码。这样,我们一开始定义运行不一致性,每当来一个数据,根据当前的RUNDP,决定选取哪一种编码,从而保证整个数据流中0和1个数基本一致。