前面的文章介绍过PCIe的Gen1和Gen2模式下,物理层使用的是8b/10b的编码。这种编码方式能够实现直流均衡,并且能将数据流中的连0连1控制在5个以内(最多5个连续的1或者0),从而可以降低物理层CDR设计的复杂度。但是8b/10b编码的缺点也很明显:浪费了20%的带宽资源,以PCIe Gen2为例,5GT/s的速率却只有4Gbps的带宽。
注:PCIe的真实带宽还受到TLP包中的非数据内容,DLLP和Ordered Sets,甚至Root端的驱动和应用程序的影响。具体可以参考之前的文章:http://blog.chinaaet.com/justlxy/p/5100062236
本文将简要地介绍PCIe Gen3及以上版本中所使用的128b/130b编码技术。128b/130b编码是以太网中使用的64b/66b的演进版本,关于64b/66b,可以参考:http://blog.chinaaet.com/justlxy/p/5100064750
128b/130b相比于8b/10b,在带宽利用率上有了显著地提升,从80%到98.46%。在评估总线性能的时候,甚至可以忽略不计。与以太网中使用的64b/66b类似,128b/130b编码是在128 bit的Payload前面加上了2 bit的同步头,如下图所示:
该同步头(Sync)为01b时,表示其后面跟的是Ordered Set;为10b是,则表示其后面跟的为非Ordered Set数据。需要注意的是,Byte Striping逻辑会将同步头在每一个Lane上重复(如果有的话,即非x1模式),以便于接收端识别同步头。我们将这2bit的同步头和