基于Virtex-5 RocketI0TM GTP收发器实现串行高速接口的开发应用

网友投稿 264 2022-11-04

基于Virtex-5 RocketI0TM GTP收发器实现串行高速接口的开发应用

为了迎合串行高速接口技术开发的广阔前景,Xilinx公司在推出的Virtex-5 FPGA以及配套的Virtex-5 RocketIOTM GTP收发中开始支持多种协议,如SATA2.0传输协议。SATA (Serial ATA),即串行高级技术附加装置,该协议于2001年发布,是目前主流的主机硬盘互联标准,该标准采用差分信号串行传输数据,进而解决了IDE硬盘由于串扰而导致的传输速率受限问题。2002年,Serial ATA委员会确立的Serial ATA 2.0规范可对外提供3.0Gb/s的传输速率,并支持热插拔NCO,磁盘阵列等功能。2005年,SATA2.0产品正式上市。此外,Virtex-5 Rock-etI0TM GTP收发器还可以完成内部8B/10B转换,但是,Virtex-5 RocketIOTMGTP进行8B/10B转换时,处理的目标数据以字节为单位,即并行数据接收端的最大位宽为16bit,而SATA2.0协议中定义的数据处理单位是双字(DW:Double Words),同时,FPGA中设计的数据处理逻辑也是根据协议的要求而定义为75MHz的时钟域来进行处理,因此,在将数据交给FPGA中的数据处理主体逻辑之前,还必须进行等速率的时钟域和位宽的转换。

为此,本文在对Virtex-5 RocketIOTM GTP进行了解的基础上,针对串行高速接口开发中位宽不匹配的问题,提出了一种位宽转换方法,以解决Virtex-5 RocketI0TM GTP无法直接应用于某些串行高速接口开发的问题,并就SATA2.0接口开发中该问题的解决方案进行详细阐述。

1 SATA2.0协议数据的相关操作结构

无论是在传输还是在操作过程中,都要保证每个Dword的正确性和完整性,否则将导致数据出错或原语流失。

8B/10B编码是将一组连续的8位数据分解成两组数据,一组3位,一组5位,经过编码后分别构成一组4位代码和一组6位代码,从而组成一组10位的数据发送出去。相反,解码是将l组10位的输入数据经过变换得到8位数据位。其8B/10B编解码过程如图2所示。

Xilinx公司推出的Virtex-5 FPGA以及配套的Virtex-5 RocketI0TM GTP收发器只支持16bit接口位宽的数据传输,即该GTP收发器是以word为数据处理单位。由于这与SATA2.0协议的相关规定出现了偏差,因而要求在数据进入设计主体逻辑前后要进行合并以及分解。同时,FPGA中设计的数据处理逻辑是根据协议的要求而定义为75 MHz的时钟域来进行处理的,因此,在将数据交给FPGA中的数据处理主体逻辑之前,也必须进行位宽的转换。

由于GTP附带的2 bit控制字节指示信号rxcharisk可用以表征接收到了K字符,故实际的数据需要从150 MHz (16+2) bit转换为75 MHz(32+4)bit。但由于16 bit和32 bit的并行数据是主体。因此,笔者仍称之为16 bit到32 bit位宽转换和32bit到16 bit位宽转换,它们实际上都包含了指示信号,用来标示该字符是否是控制字符。

2 位宽转换

根据SATA2.0协议的规定和Virrex-5 RocketIOTM GTP的特性,以及SATA2.0接口逻辑中需要提取原语(primitive)进行逻辑控制的要求,16bit和32 bit位宽的相互转换不能简单的进行word合并拆解,而是需要实现图1中wordO和wordl的正确组合,否则将导致原语或数据受损,使控制逻辑无法获得有效的交互原语,数据处理逻辑组帧传输错误,文件损坏的状况发生。这就要求系统能够在提取原语和数据组帧之前,及时进行Dword边界校正,以保证后续处理的正确。

2.1 16bit至32bit位宽转换模块

该模块将GTP接收后的150 MHz 16 bit并行数据转换成数据处理逻辑可以工作的75 MHz 32 bit的并行数据。图3所示为其位宽转换要求示意图。

由于在转换开始时,必须正确地将2个相关的16 bit Word组合成一个32bit DW,但不能将一个DW的低字跟相邻的一个DW的高字组合成一个DW,否则逻辑处理时就会出错。图4所示是16Bit转32 bit的实现逻辑示意图。

对于这个问题,Xilinx提供了非对称的异步FIFO,但这样又会造成较大的延时,同时无法避免图4所示的DW组合转换不当的问题。这样就使得FIF0的控制逻辑比较复杂,而数据的延时又较大,又会致使性能下降,有些得不偿失,也不符合SATA2.0的高速低延迟要求。

为了降低延时,同时简化逻辑,笔者设计了一个滑动窗口位宽转换器,其中滑动窗口的作用就在于寻找到正确的DW边界,避免不当的DW组合转换。150 MHz时钟和75 MHz时钟的相位一致是这种转换稳定进行的保障,而xilinx Virtex-5xc5vlx50t FPGA恰恰通过DCM提供了这样两个稳定时钟,因此,这两个时钟必须接到DCM响应频率的输出。

2.2 32 bit至16 bit位宽转换模块

根据上面16 bit至32 bit位宽转换分析,需要将数据处理逻辑输出的32 bit数据拆分成两个16bit数据交给GTP进行发送。同时在转换的开始时刻,要求先发送一个DW的低字,然后发送其高字,而不能先发送一个DW的高字,否则接收端将无法正确恢复出DW。另外,150 MHz时钟和75MHz时钟的相位一致,同样是这种转换稳定进行的保障,因此,这两个时钟也必须接到DCM响应频率的输出。其32 bit转16 bit的实现逻辑示意图如图5所示。

用2个18 bit的寄存器组寄存经数据重组后的36 bit输入数据时,可根据输入数据的控制字节(rxcharisk)指示位来判别数据的写入和读出。由于150 MHz时钟和75 MHz时钟存在着有效沿不一致的情况,即150 MHz时钟的上升沿可能对应着75 MHz时钟的下降沿,因此,要准确地进行读写控制,就必须对wr_en和rd_en信号进行同步。同步方法是利用75 MHz时钟的有效沿(上升沿)与150 MHz时钟有效沿一致的特性来同步产生wr-en和rd_en信号。而产生wr_en和rd_en信号的依据是在系统复位后,由数据处理逻辑向外发送SYNC信号来表明系统处于空闲(Idle)状态。事实上,SYNC就是一个控制(K)字节,其响应的rxcharisk是4’b0001,通过这个可以正确地将DW写入和读出。DW的发送要求先发送低字,然后发送高字。数据读出控制块会利用rd-en信号使能2 bit的计数器,然后利用计数值将DW的低高字依次选择读出。

4 结束语

本设计可实现Virrex-5 RocketI0TM GTP进行SATA2.0相关开发过程中的位宽匹配转换功能,而且具有处理延迟小、差错率低等优点,并通过了Xilinx ISE综合布线以及Virtex-5 FPGA上的验证,结果证明:本设计能够完全满足SATA2.0相关开发时序及功能上的要求。实际上,逻辑设计人员利用Virrex-5 RocketIOTM GTP进行其他高速串行传输接口的开发时,也可以借鉴此设计思想。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:LNMP应用部署
下一篇:GC参考手册二java中垃圾回收原理解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~