图1:StratixIVGX器件Transceiver数据路径框图
可以看到每个transceiver通道包括发送和接收通道,其中发送通道包含了发送通道PCS以及发送通道的PMA;同样接收又进一步分为接收PCS和PMA。
根据我们前面的介绍,我们知道,CMU通道中没有中间的PCS模块,需要我们自己通过代码来实现。
我们首先来看发送路径,对于发送路径相对比较简单,主要实现8b10b编码即可,如图2所示
图2:CMU发送路径PCS模块逻辑实现框图
如图2所示,紫色方框就整个Transmitter模块了,包括pcs和pma。那么对于pcs来说就是实现8b10b编码,我们可以调用altera的8b10b IP来实现,使用k28.5这个码来作为对齐K码。需要提醒大家的是,从Quartus II14.0开始已经不提供8b10b这个IP了,但是以前版本生成的IP还是可以继续使用。另外,使用这个IP需要altera的授权。
接下来,就是比较复杂的接收路径,如图3所示,在接收路径上,我们主要需要实现8b10b解码,字节对齐,ratematcher FIFO以及自同步功能模块。
图3:CMU接收路径上PCS逻辑实现框图
和发送路径一样,8b10b解码可使用同样的IP。ratemacher FIFO其实就是一个普通的FIFO用于,只是该FIFO的读只有在FIFO达到半满的时候才开启,FIFO读写使用相同的时钟,两侧数据速率相等。而对齐模块其实就是一个普通的移位寄存器,根据子同步器给出的bitlist信号来确定是否进行移位。8b10b解码器是将10bit的并行数据解码成8bit并行的数据,并需要给出是否出现解码错误的指示给自同步器。
相对来说,自同步器模块逻辑设计更关键一些。只要aligner输出的10-bit数据没有与8b10b解码器对齐,就会产生很多错误码组合,那么此时,就会置位8b10b解码错误,该错误标识输出给自同步器模块,而自同步器模块根据这个标识来产生两个输出标志,即对齐标志和移位标志。其中所谓的移位标志用于对齐模块移位控制,而对齐标志用于产生我们在普通GXB接收通道看到rx_ctrldetect控制信号,用于指示当前是数据还是K码。