在上一节中介绍了PCS 8b10b encoder/decoder:的原理,接下来这一节,介绍FPGA实现:
本质是一张编码表,查找表:
XIilinx ug476 Appendix C(其中注意bit顺序编码前是高位在前
HGF EDCBA |
编码后是低位在前
abcdei fghj |
) D码表、K码表,但是特殊情况没有标明,下面是特殊情况:
5b/6b是根据3b/4b的计算结果的极性(postive/negtive)来选择postive或者negtive的6b输出,那么6b的输出一般有两种情况:pos和neg;但是,当Dx.y的y为7,即8bit数据的高3bit为111时,会有两种码元,一种是A7,一种是P7,A7和P7各自都有pos和neg两种极性输出,也就是总共4种输出;
A7和P7的存在,可能是因为特殊情况会导致K码的漏检,任何编码都是不能保证完全没有漏洞的,不同的编码有不同的容错概率,这些具体原因包括编码表中二进制码的来源规则和相同Dx时4b输出最多两种情况,请参考相关数学文献;
verilog实现(还有更简单的方法,不像demo这样把3b/4b和8b/10b分开计算,直接把8b/10b查找表代码实现,效果