编码技术: PRBS, 8B/10B
刚进SI这个行业的时候(现在也还是小菜鸡XD),很多技术名词其实常常搞不清楚。就像之前辈交代说: 明天客户想确认这条高速线到conector的眼图,帮我跑个quick eye的模拟。 结果一打开前辈整理的Spec,看到data rate, V-high, V-low, rise time 都还可以理解,看到PRBS 11? 8B/10B?当下Nick Young的脸浮现在眼前。直到后来工作一阵子后,才知道这是测试高速线的编码技术名称。
Nick Young, 俗称黑人问号
首先要先分清楚码型与编码这两个名词
PRBS码型:
PRBS(Pseudo Random Binary Sequence)字面翻译是伪随机二进制序列(伪随机码)。随机指在周期内是码型是随机的,也就是乱中有序,这个序就会根据阶数来产生不同位元的码型。用途是用来测试高速讯号的误码率,像是USB PCIE…等,当然也会延伸不同的测试码型PRBS 7, PRBS 9, PRBS 11…PRBS 31,其中数字表示的阶数。那是什么意思呢? 为什要用PRBS来做为测试码型?
主要原因是PRBS码型与真实讯号传输的状况很相近,在真实讯号传输也是属于随机的发生,没有理由和规律。且这种码型的频域特征很贴近”白噪音”[1]。意思是说在一个比较宽频域中功率密度均匀的分布,每个频点的能量都一样,不是指溪流声的那种,不要搞错了XD
至于阶数可以简单理解成码型序列的长度,阶数越高序列长度越长,在频域表现出更多的频点的能量分布。至于产生的架构可以参考一博科技的文章,写得很浅显易懂,里面用PRBS 3的架构来说明[3]
不同阶数的PRBS码频域分布[2]
8B/10B编码
常见的编码有4B/5B, 8B/10B, 64B/66B, 128B/130B等编码方式,这些都是属于NRZ编码其中常见的方式。 NRZ? Nick Young? 不懂可以先参考网际星空里面提到编码调变技术的文章PAM4 and MIPI,写得很详细[4]
回归正题,每个编码都有适应的信号协议。其中编码的数字代表些什么? 以8B/10B编码来说,就是把8 bit的数据扩增至10 bit,增加了20%的非实际数据传输。这时候就会想说这样传输的效率不就下降了吗?没事干嘛增加2 bit没用的数据? 这就跟人生一样,常常有时候做白工才是最有效率的(欸欸欸,偏题了XD)
其主要目的是用来直流平衡,原因是高速讯号线上的通常都会摆耦合电容隔离低频的杂讯,频率越低阻抗越大(Zc=1/2pi*f*C)。但有时候要传输的讯号是连续0或1不就会被当作低频杂讯被衰减隔离掉,但事实上那是要传输的讯号不应该被衰减的。利用这种编码方式就可以降低频讯号提升到高频,降低直流低频的损耗。其实有还有另一格作用是保证讯号有足够的翻转密度,让Clock Data Recovery有更多的边沿变换,对减小抖动和数据采样有帮助,至于CDR有机会再跟大家介绍。至于编码的详细机制可以参考[6]
高速线上的耦合电容[5]
直接用频谱看使用8B/10B编码的效果最简单粗暴了,没用之前讯号再低频的能量很多(红色),用了之后改善了低频能量的分布(蓝),低频信号明显减小,相当于通过一个高通滤波器,起到emphasis的作用,减缓ISI的干扰,让眼睛更明亮。仔细想想发明这个编码的人还真神啊XD
f频谱图[7]
结论PRBS是产生的码型,而8B/10B是编码方式。最后的理解可以用一句话来结尾。”用PRBS的码来编出NRZ 8B/10B的讯号做高速讯号的测试”
参考文献:
[1] https://zh.wikipedia.org/zh-tw/%E7%99%BD%E9%9B%9C%E8%A8%8A
[2] PRBS码, https://zhuanlan.zhihu.com/p/597585635
[3] PRBS码是什么? PRBS生成原理, https://zhuanlan.zhihu.com/p/29658418
[4] PAM4 and MIPI, 网际星空PAM4 and MIPI
[5] USB 3.0硬件设计, https://www.twblogs.net/a/5d06fcdfbd9eee1e5c80ebbd
[6] 8B/10B编码, https://www.twblogs.net/a/5d06fcdfbd9eee1e5c80ebbd
[7] 答题 | 高速信号编码之8B/10B