凡亿教育-思思
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | 7.仿真设计---常用编码方式
7.仿真设计---常用编码方式

一个layout工程师学习信号完整性之路

最近在进行信号完整性仿真的仿真时,被人问到的码型是什么样子,一下子就有点懵了。发现自己的盲区有多了一块,码型是什么东西?所以上网收集整合了一些资料,发现这些东西都是平常自己用到的,只不过没有在意。下面简单介绍一下NRZI、RZ、8B10B编码,除了这些还有许多编码方式,大家可以了解下:

 

一、NRZI 不归零编码

Non-Return-to-zero Inverted Code 和 NRZ 的区别就是 NRZI 用信号的翻转代表一个逻辑,信号保持不变代表另外一个逻辑。USB 传输的编码就是 NRZI 格式,在 USB 中,电平翻转代表逻辑 0,电平不变代表逻辑1。NRZ 和 NRZI 都没有自同步特性,但是可以用一些特殊的技巧解决。比如,先发送一个同步头,内容是 0101010 的方波,让接受者通过这个同步头计算出发送者的频率,然后再用这个频率来采样之后的数据信号。在 USB 中,每个 USB 数据包,最开始都有个同步域(SYNC),这个域固定为 0000 0001,这个域通过 NRZI 编码之后,就是一串方波(复习下前面:NRZI 遇 0 翻转遇 1 不变),接受者可以用这个 SYNC 域来同步之后的数据信号。此外,因为在 USB 的 NRZI 编码下,逻辑 0 会造成电平翻转,所以接受者在接受数据的同时,根据接收到的翻转信号不断调整同步频率,保证数据传输正确。这样还是会有一个问题,就是虽然接受者可以主动和发送者的频率匹配,但是两者之间总会有误差。假如数据信号是 1000 个逻辑 1,经过 USB 的 NRZI 编码之后,就是很长一段没有变化的电平,在这种情况下,即使接受者的频率和发送者相差千分之一,就会造成把数据采样成 1001 个或者 999 个 1了。USB 对这个问题的解决办法,就是强制插0,也就是传说中的 bit-stuffing,如果要传输的数据中有 7 个连续的 1,发送前就会在第 6 个 1 后面强制插入一个 0,让发送的信号强制出现翻转,从而强制接受者进行频率调整。接受者只要删除 6 个连续 1 之后的 0,就可以恢复原始的数据了。NRZ编码既是将逻辑1编码作为一个DC电平,逻辑0做为另一个DC电平。它与RZ码的区别就是它不用归零,也就是说,一个周期可以全部用来传输数据,这样传输的带宽就可以完全利用。一般常见的带有时钟线的传输协议都是使用NRZ编码或者差分的NRZ编码。因此,使用NRZ编码若想传输高速同步数据,基本上都要带有时钟线,因为本身NRZ编码无法传递时钟信号。但在低速异步传输下可以不存在时钟线,但在通信前,双方设备要约定好通信波特率,例如UART。

image.png

二、RZ编码 归零编码

RZ编码:Return-to -zero Code 归零编码

正电平代表逻辑1,负电平代表逻辑0,每传输完一位数据,信号返回到零电平

从下图就可以看出来,因为每位传输之后都要归零,所以接受者只要在信号归零后采样即可,这样就不在需要单独的时钟信号。实际上, RZ 编码就是相当于把时钟信号用归零编码在了数据之内。这样的信号也叫做自同步(self-clocking)信号。

image.png

三、8b/10b编码

USB 3.0采用的是8b/10b编码方式。8b/10b编码方式优点:1)保持DC直流平衡 2)保证有足够的转换密度,避免接收端时钟漂移或同步丢失而引起数据丢失 3)编码采用冗余方式,将8位的数据和一些特殊字符按照特定的规则编码成10位的数据,根据这些规则,能检测出传输过程中单个和多个比特误码。4)8B/10B编码规定了一些特殊字符,可用作帧同步字符和其他的分隔符或控制字符, 有助于比特流的码组定位和信息识别。极性偏差:running disparity RD参数表示不平衡度在不平衡时用2个10 bit字符表示一个8位字符,其中一个称为RD- ,表示“1” 的个数比“0” 的个数多2个,另一个称为RD+ ,表示“0” 的个数比“1” 的个数多2个。为什么要采用8B10B:由于我们的串行链路中会有交流耦合电容,我们知道理想电容的阻抗公式是Zc=1/2πf*C,因此信号频率越高,阻抗越低,反之频率越低,阻抗越高。因此上面的情况,当码型是高频的时候,基本上可以不损耗的传输过去,但是当码型为连续“0”或者“1”的情况时,电容的损耗就很大,导致幅度不断降低,带来的严重后果是无法识别到底是“1”还是“0”。因此编码就是为了尽量把低频的码型优化成较高频的码型,从而保证低损耗的传输过去。不均等性(disparity)和极性偏差(running disparity,RD),不均等性是指编码后的码型数据是“1”多还是“0”多,如果是“1”多,则极性偏差RD为-RD,如果是“0”多则为+RD。

image.pngimage.png

以上资料主要是本人在仿真流程中和网络搜索整理而成

如有雷同或错误,希望各位大神留言指正,感谢!!!

image.png


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论