APP下载

基于SATA3.0的存储系统优化设计

2021-01-22李晋涛任勇峰杨志文李辉景

电子技术应用 2021年1期
关键词:传输层原语状态机

李晋涛,任勇峰,2,杨志文,李辉景

(1.中北大学 电子测试技术国家重点实验室,山西 太原 030051;2.中北大学 仪器科学与动态测试教育部重点实验室,山西 太原 030051)

0 引言

SATA3.0(SerialATA Revision3.0)采用差分信号传输系统,该系统对共模噪声有很强的抵抗力,因此SATA可以采用更低的电压去抑制噪声。在数据传输这一方面,SATA3.0的传输速度在SATA2.0的基础上翻倍,理论上可以达到6 Gb/s。另一方面,SATA总线使用了嵌入式时钟频率信号,具备了比以往更强的纠错能力。在传输过程中能对相应的指令进行检查,即使出现错误的指令,也可以进行及时的修正,因此广泛地应用于实际工程中。但是,基于测试系统产生的数据愈加地趋向于大体积、高速率,多数存储系统采用存储阵列的方式进行存储。然而,随着存储量的增加以及传输环境的复杂,SATA总线会出现个别通道传输中断的现象,虽然只是偶尔现象,但却能造成不可挽回的损失。

针对以上问题,该设计基于FPGA控制的SATA3.0总线,从硬件和代码方面优化了存储系统并进行验证。实测存储速率不低于800 MB/s,并且数据传输稳定,在大容量存储应用领域具有很好的参考和使用价值。

1 系统总体设计

图1 系统总体框图

基于SATA3.0的存储电路能够实现对大量数据的快速、稳定的存储,该系统的总体设计方案如图1所示。系统由四部分组成,即数据接收模块、FPGA控制模块、数据存储模块和数据分析模块。数据接收模块采用了4路SRIO数据接口,接收外部数据,单路传输速率为3.125 Gb/s,总体理论传输速率为12.5 Gb/s。控制模块采用FPGA,主要负责逻辑控制,即通过控制SRIO协议、SATA协议以及UDP协议来完成数据的接收、存储和调用。数据存储模块采用4片500 GB的固态硬盘,以单次记录的方式,先擦除再写入,断电停止记录。数据分析模块采用UDP协议,通过千兆以太网接口进行交互[1]。对试验数据进行分析时,只需要将硬盘内存储的数据读取到计算机上即可。

2 硬件电路设计

此模块采用Xilinx的Kintex-7系列PFGA作为主控芯片,该芯片采用RocketIO技术进行串行数据传输,即串行收发器GTX接口,单路最高传输速率可达到12.5 Gb/s[2],串行收发器配备有可配置的阻抗、摆幅以及耦合等级。SATA传输采用全双工的方式,2、3引脚作为发送端将指令或者数据发送至硬盘,5、6引脚作为接收端接收硬盘返回的信息。相比于以往的并行传输方式,串行传输采用差分走线,具有很强的抗噪声能力,不需要考虑多排传输线之间的干扰,只需要提高时钟频率便可以提高传输速率,串行传输一次传输一个比特(bit)包含有源同步时钟。而时钟是通过PMA PLL将一个高质量的参考时钟倍频出高速串行时钟,用来驱动GTX收发器工作,本设计采用的时钟芯片为CDCM61002[3],该芯片内置板载锁相环,可以提供稳定的差分时钟作为参考时钟,并且具有功耗低、高性能、低相位噪声等优点。在时钟配置方面,该芯片可配置出专有的SATA时钟、PCI Express以及GigE等。根据芯片手册,此处选用25 MHz的晶振作为时钟输入,同时将PR0、PR1、OD2配置为低电平,OD1和OD0配置为高电平,即实现设计需要的SATA参考时钟150 MHz。同时,将OS1配置为低电平、OS0配置为高电平,从而控制时钟输出方式为LVDS。硬件电路图如图2所示。

图2 SATA硬件原理图

3 系统软件设计

3.1 SATA3.0结构分析

SATA3.0接口主要包括四个层次:应用层、传输层、链路层以及物理层,总体框架如图3所示。

图3 SATA协议结构图

(1)物理层主要是由差分对TX和RX来实现串行全双工传输,主要功能是主机端与设备端的链路初始化[4]。为了提高SATA接口的主机端和设备快速建立通信的能力,SATA协议在物理层引入了OOB信号,通过原语交互来完成链路初始化和传输速度的协商。

(2)链路层主要负责的是FIS帧收发,通过CRC校验和加扰码解扰码的方式来提高数据传输的准确性[5]。当链路层发送数据时,SATA协议将0x52325032作为初始值[6],根据 CRC32校验方式,将最多 2 048个 DWORDS有效数据依次校验,生成一个最终的校验和,然后将校验和加在所发送的有效数据后,并进行加扰,最后进行8B/10B编码后发送到物理层,在接收到设备端的数据时,先对数据进行8B/10B解码以及解扰,然后将帧头原语SOF、CRC校验以及帧尾原语EOF去除,再次计算接收到的有效数据的CRC校验和[7],并与接收到的CRC校验和做对比,然后向传输层报告当前传输状态。CRC32的生成多项式如式(1)所示:

(3)传输层主要负责将相关的数据或命令构造成相应的FIS帧。其中,帧类型主要有数据帧、寄存器帧以及控制帧这三大类。当传输层接收到来自链路层的帧时,会将该帧解析出帧类型以及帧内容,并将其中的数据写入寄存器中。当检测到应用层发出的数据传输操作请求后,传输层作为响应,会从寄存器中读取数据,并按照相应的帧格式组成帧发送至链路层[8]。

(4)应用层主要负责解析各个寄存器以及执行寄存器中的命令。根据命令的要求,应用层会接收来自主机端传输的数据,并将数据写入SATA硬盘中,或者将硬盘中的数据读取出来传送给主机端。存储或者读取的方式可以是PIO或DMA,为了提高数据交互速率,本文采用DMA方式[9]。在数据进行缓冲时,分别采用一个读FIFO和一个写FIFO来完成。写FIFO负责缓存传输层解析出来的数据帧,而读FIFO负责把来自总线的数据保存下来[10]。在这一系列动作完成之后,应用层将构造数据帧的指令发给传输层。

3.2 OOB状态机优化

SATA物理链路的建立主要是通过OOB(Out of Band,OOB)信号来实现的[11]。FPGA和硬盘上电以后,FPGA端首先发出重置信号COMREST,硬盘在检测到FPGA发出的COMRESET后,会发出初始化信号COMINIT作为回应,并且硬盘可以在任意时间通过发送COMINIT来发起会话。收到硬盘回应以后,FPGA会进行校准并发出COMWAKE信号。硬盘在RX差分对上接收到COMWAKE信号后会校准发送器,并且会将COMWAKE信号连续传输六次,接着连续发送ALIGN原语与主机端进行传送速度的协商。FPGA接收到COMWAKE信号,锁存硬盘发来的原语然后在54.6 μs内回传 ALIGN,并且在 COMWAKE信号收到之后连续地发送D10.2原语。返回ALIGN信号给硬盘的速率应与接收时保持一致,如在880 μs内未检测到硬盘返回ALlGN,则进入复位状态重新连接。硬盘在检测到ALIGN原语后,会以SYNC同步信号作为回应,表示准备开始正常的传输操作。当FPGA接收到三个来自硬盘的非ALIGN原语后,linkup信号由低电平变为高电平,链接建立完成,进入正常操作。

图4 链路优化前

如图4所示,以往的数据传输过程中,可能会遇到物理链路连接断开的现象[12],此时linkup信号由高变低,数据传输中断,OOB状态机停留在当前linkready状态。从硬盘回放的数据可以看出,递增数已经不再连续,虽然这种问题出现的概率比较小,但却能造成无法挽回的后果。为了提高系统链路的稳定性以及抗干扰能力,使得系统建立起来以后数据更加稳定地传输,避免在系统工作中出现中断,需要对OOB状态机增加一个通路标志循环监测状态。当出现链路断开时,在物理层立即重新建立物理链路,及时地恢复数据传输。图5是改进后的OOB状态机。

图5 优化后的OOB状态机

linkup状态之前的状态与原来相同,是物理通路的建立过程。linkup状态下认为发送的已经是正常的数据帧,在此状态下可以检测帧头SOF原语和EOF原语判断是否有正常数据帧的交互。当检测到帧头SOF原语后进入下一状态。linkcheck是链路检测状态,也是物理层正常工作时需要保持的状态。在正常工作状态下,链路需要保持稳定,这就需要实时检测当前链路的工作状态,此状态下需要检测的标志位有rxelecidle、linkup等。可以看到链路断开以后,linkup信号由高变低,此时OOB状态机立即进入 0状态,即复位状态;txcominit拉高,说明链路开始初始化;经过短时间的链路重建linkup信号拉高,说明链路重新恢复连接,rxelecidle信号持续拉低,说明数据已经开始继续传输。图6是ILA抓取的一条通路重新建立的采样图。

4 系统整体测试

首先,使用外部发图机以800 MB/s的速率循环发送递增数,递增数以四个字节的帧计数,再加上EB 90作为帧结尾[13],每帧包含 256个字节。接收数据时,FPGA以156.25 MHz的时钟接收数据,然后写入64位的FIFO。由于SRIO采用8B/10B编码,4路SRIO接口理论接收速率可达到 156.25 M×64÷10=1 000 MB/s。紧接着,例化一个 64位转 128位的 FIFO,读时钟为 150 MHz,此时 FIFO的读速率为 150 M×128÷10=1 920 MB/s完全大于接收速率。之后FPGA将打包后的128位的数据拆分成四路32位的数据,通过SATA控制器,将32位的数据转为串行的差分数据,通过SATA串口同时存储到四块硬盘中。图7为上位机读取到的递增数,图8为递增数校验结果。

在高温60℃和低温-40℃条件下,以800 MB/s的写入速率每次写入硬盘600 GB的数据进行测试,经过100次测试及数据分析,发现数据传输稳定,递增数连续且没有出现传输中断的情况。

5 结论

图6 链路优化后

图7 接收数据回放

图8 递增数校验

本文优化了一种基于FPGA控制的存储系统,系统以SATA3.0作为传输总线,固态硬盘阵列作为存储介质,对存储逻辑进行了设计,并对硬件电路和OOB状态机进行了优化。最终实现了一种高速率,高稳定性的存储系统,解决了大容量存储系统的传输稳定性问题。经过大量的读写测试,表明该系统可以对高速数据进行可靠的存储,满足多数遥测试验的需求,具有很好的应用价值。

猜你喜欢

传输层原语状态机
基于Python语言的网络传输层UDP协议攻击性行为研究
ZnO电子传输层在有机无机杂化钙钛矿太阳能电池中的应用
基于有限状态机的交会对接飞行任务规划方法
物联网无线通信传输层动态通道保障机制
密码消息原语通信协议介绍及安全分析
基于物联网GIS的消防智能巡检系统设计与实现
浅谈旅游翻译中文化差异的处理
双口RAM读写正确性自动测试的有限状态机控制器设计方法
基于原语自动生成的安全协议组合设计策略及应用研究
基于反熔丝FPGA的有限状态机加固设计