FPGA实现光纤通信(3)——光纤8b/10b编码数据回环
前言
光纤通信属于高速串行通信,具有较高的数据传输速率,通常用于服务器以及通信设备之间用于高速数据交换,对于xilinx 7系列的FPGA,内部具有集成的高速接口用于实现光纤通信。本次就来实现8b/10b编码数据回环。
测试环境:vivado版本:2020.02
FPGA芯片:XC7K70T
测试说明:进行光纤8B/10B编码数据回环测试
8B/10B编码简介
8b/10b编码是由 IBM 公司的 Widmer 和 Franaszek 于 1993 年提出并于 1994 年申请专利。其在以太网光纤通信,PCIe,SATA,USB3.0 等高速串行接口 领域得到了广泛的应用。8b/10b 编码是高速串行通信中常用到的一种编码方式, 是将 8bit 的数据转换成 10bit 数据从而保证直流平衡以及密集的电平转换。将 8bit 的数据转换成 10bit 数据会带来 2bit 的带宽开销,那为什么要引入8b/10b编码机制呢?
我们知道,在高速串行通信中,通常都是采用交流耦合的方式,简单来说交流耦合方式就是在数据发送端串联一个电阻。下面为理想电容的阻抗公式:
其中Zc表示阻抗,C表示电容的大小,f表示频率。在这个公式中电容,频率和阻抗成反比。当当硬件确定的情况下(电容值不变),频率和阻抗成反比。频率 越高,阻抗越低;频率越低,阻抗越高。我们中学就学过电容是通交流,隔直流的,所以使用电容进行交流耦合,可以降低高频码元的传输误码率,基本上可以实现零误码率,当传输的码元不变即接近直流时,阻抗就会变大,传输的损失较大,有可能导致无法识别在传输过程中的码型究竟是0还是1。在高速串行通信中要引入8b/10b编码机制,就是为了将低频的码型优化为高频的码型,从而保证数据低损耗的传输。
8b/10b编码原理
8b/10b编码就是将 8bit 的数据组合成 10bit 的数据,数据的组合里包括了256个数据字符编码以及12个控制字符编码。其中数据字符编码被记为Dx.y,控制字符编码被记为Kx.y,控制字符编码可以作为传输过程中的帧起始,帧结束,传输空闲等状态标识。数据组合并不是把8bit数据直接映射到10bit数据里,如果直接映射的话,对编码效率会有影响,也会增加对芯片面积的占用,而是把8bit数据分成两个子分组:3个最高有效位和5个最低有效位。编码按顺序排列,从最高有效位到最低有效位分别记为H、G、F和E、D、C、B、A 。3bit的子分组编码成4bit,记为j、h、g、f;5bit的子分组编码成6bit,记为i、e、d、c、b、a,其映射关系如下图所示。