个人微信二维码
本文所要说的信号编码是指将信号原来的01序列按照一定的规则重新排列的过程。
那么信号为什么要进行编码呢?
最主要的原因就是信号本身是高频交流信号,但是原始的信号序列可能出现多个连续的0或1,那么此时就表现出了一定的低频分量;
第一、如果链路中串有电容器件,前边的文章中讲过,电容对低频分量有一定的衰减;
第二、信号中出现比较多的连续的0或1会使信号的码间干扰更恶劣,眼图更差;
因此,信号协议采取了一定的编码以保持0和1的平衡;
下面我们看一下,几种常见的编码;
RZ:return to zero,即归零码,电平每次跳变后,都要占用一个bit位进行归零(此bit位不是有效传输数据),此编码只有50%的效率;
NRZ:non-return to zero,非归零码,信号每次跳变后,电平不进行归零,序列中发送的bit1,电平则由0跳变到1,序列中发送的bit0,电平则由1跳变到0,此编码有100%的效率,但是不能保证链路中的DC平衡;
NRZI:non-return to zero inverted,非归零反转码,当序列中发送的是bit1,电平发生跳变,由高到低,或由低到高都可以,当序列中发送的是bit0,信号不发生跳变,此编码不能保证链路中的DC平衡;
MLT-3:multi-level transit-3,多电平传输码,有+1、0、-1三种电平,当序列中发送的是bit1,电平则发生跳变,如果序列中发送的是bit0,则不跳变,跳变时,如果前一个bit是+1或者-1,则下一个bit变为0,如果前一个bit是0,则下一个bit与最近的一个非0bit相反,这种编码由于有三种电平跳变,直流平衡要好于前两种;
Manchester编码:当序列发送的是bit0时,电平由低电平跳变到高电平,当序列发送的是bit1时,信号由高电平跳变到低电平,这种编码里电平的跳变都是强制的,因此每bit就多出了1bit位进行电平调整,所以这种编码虽然保证了每bit信号都发生跳变,但是效率只有50%;
4b/5b:这种编码是将原来4个bit的序列变为5bit,也就是原来一共有2的4次方(16)种可能的数据,现在有2的五次方(32)种,在这32位种选取16个bit0和bit1数量相当的组合,如00111/10110等,与原来的4bit序列一一对应,剩下的可以挑选用作控制,4b/5b映射表如下:
这样做的好处是在32组序列中可以将其中01数量比较均衡的组合选出16组,从而保持DC平衡;
上表就是由原序列的4bit和编码后的5bit序列进行的一一映射,除了01的平衡,没有别的规律了,直接查表就行;
8b/10b:和4b/5b编码类似,这种编码是将8bit的数据用10bit表示,要注意,先将原来的8bit数据拆分成高3bit和低5bit,再将高3bit映射为4bit,将低5bit映射为6bit,映射表如下:
高3bit映射表
低5bit映射表
从表中可以看到,有些序列是分RD+和RD-的,如果,0的数量多,则该序列记为RD+,如果1的数量多,则该序列记为RD-,当前一序列为RD+时,下一序列则用RD-,反之亦然,保持直流平衡;
例如,原序列为000 00000,那么编码后,高3bit映射为1011(RD-),那么低5bit映射为011000(RD+),以此保证连续0和1的数量
这种编码种最大连1和连0的数量为5,这种编码的直流平衡得到了保障,但是效率只有80%,比较高速的信号逐渐不采用这种编码了;
另外,需要注意一种数据的表示形式:D.31.2,D就是数据,31则表示该8bit数据的低5位,2表示高3位,所以D.31.2就是010 11111;
下表是D码的编码表,以及由8bit转为10bit的映射:
K码表示控制码,如K28.5,则表示控制码,101 11100
K码映射表如下:
下篇文章继续介绍64/66b、128/130b、PRBS等编码;
推荐阅读
公众号分享了一些资料,包括一些信号标准协议,仿真软件,分别在公众后台回复:
“信号协议”获取信号协议网盘链接;
“软件”获取仿真软件网盘链接;
另外,烦请大家帮忙关注,帮忙转发