"); //-->
摘 要: 设计了一种基于FPGA控制的高速数据存储系统。该系统采用FPGA实现了对四个符合ATA-6规范的、RAID 0配置的IDE磁盘阵列的管理,并配合四个SDRAM实现对数据的高速稳定存储。该磁盘阵列同时挂四个IDE硬盘,平均数据流达到200MB/s,峰值传输速率达到800MB/s,也可以扩展更多硬盘,构成大容量的磁盘阵列。
关键词: FPGA;IDE协议;SDRAM;磁盘阵列;PCI 9054
随着雷达技术的不断发展,如何高速稳定地存储回波数据已经成为一个亟待解决的问题。当前高速存储设备主要应用在服务器上,不仅价格高昂,而且功能可扩展性不强。因此,本文使用FPGA实现符合ATA-6规范的IDE接口,配合SDRAM组成了高速数据存储系统。通过FPGA把四块IDE硬盘配置成RAID 0阵列,实现对数据的高速存储。实测时整个系统运行稳定,平均存储速率200MB/s,配合板载的128MB内存,突发存储速率可以达到800MB/s。采集过程中,可以通过软件实时观测回波数据的IQ分解和脉冲压缩。
作为采集数据系统主要考虑的是存储容量、存储速率和可操作性。由于目前比较通用的FAT32或NTFS格式的采集数据系统用FPGA实现较困难,因此,在自行定义的存储格式及其传输协议的基础上设计了一种实用的IDE硬盘阵列及其采集数据系统,并且通过使用PCI传输卡就可以把磁盘阵列中的数据导入计算机,实现格式上的转化。
1 系统设计
为使系统的存储速率最大化,硬盘配置成RAID 0模式。工作时,AD采样后得到的信号首先分流成四路,然后流向四个硬盘,每一路磁盘的工作模式都相同。图1给出其中某一路的存储流程图。
由图1可知,分流后的AD数据首先暂存到FPGA内部的FIFO 0中,由于磁盘存储数据时工作在Ultra DMA模式下,所以每传输一帧数据,FPGA都需要给磁盘一个CRC校验结果,磁盘会对FPGA给出的CRC校验结果进行核对。如果正确,磁盘就会存储本帧数据;若出现错误,磁盘会抛弃本帧数据,并向FPGA报错。因此从FIFO 0读取的数据不能直接流向硬盘,而必须流向一个大容量的高速缓存器件,以便在CRC校验结果出错的情况下重新传输出错帧数据。在本系统中高速缓存器件选用HY57V561620C(L)T(P),其数据吞吐率可以达到200MB/s,容量为32MB。
数据存储完成后,需要通过PCI卡导入到计算机中进行计算和分析。导出数据的流程图和存储数据相似,如图2所示。
2 IDE协议的FPGA实现
2.1 IDE协议简介
IDE(Integrated Drive Electronics)是集成磁盘电路设备, 其正式名称是AT-Attachment。它是Compaq公司为解决老式的ST506/412接口速度慢、开发成本高而开发出的硬盘标准。由于IDE接口的硬盘具有价格低廉、稳定性好、标准化程度高等优点,迅速得到普及[1]。
IDE接口硬盘的几种传输模式有很明显的区别,其经历了三个不同的技术变化,由PIO(Programmed I/O)模式,DMA(Direct Memory Access)模式,直到现在的Ultra DMA 模式。其中PIO模式的传输速率最慢,最老的PIO mode 0传输速率为3.3MB/s,最新的PIO mode 4传输速率为16.7MB/s。本文存储数据时采用了Ultra DMA模式,最高速率100MB/s。在计算机上使用时,PIO传输模式会大量占用中央处理器的资源;而后IDE接口及装置开始有了DMA的支持,DMA模式有Single-DMA和Multi-DMA两种,与PIO模式相比达到了节省处理器资源的效果,但随后被性能更好的Ultra DMA所取代。
2.2 IDE协议的软件实现
FPGA对IDE硬盘的控制通过命令寄存器和控制寄存器实现,如表1所示[2]。其中带“-”的信号(如“
”)表示低电平有效。对磁盘进行任何操作之前首先需要读取特征寄存器,此寄存器指示磁盘是否处于空闲状态。如果磁盘空闲,可以向命令寄存器写入需要执行的命令代码。如果对磁盘进行无数据操作,只需要写入命令字然后等待磁盘执行任务结束即可。如果执行的是读(写)操作,就需要通过扇区数寄存器确定读(写)扇区总数,通过扇区号寄存器和柱面寄存器确定读(写)地址。命令执行完毕后,FPGA需要读状态寄存器。如果ERR位有效,表明执行上一个命令的过程中产生了错误,具体错误类型可以通过读错误寄存器得到。
系统上电后要对硬盘进行复位操作,检测到BSY位和DRQ位都为低电平时硬盘复位结束。然后通过Set Feature和Set Multiple Mode等命令完成对硬盘的配置。如图3,对硬盘的配置以及读(写)命令的发送都是用PIO模式实现的。图4给出PIO模式的时序图,表2给出其时序要求[2]。下面以写磁盘为例介绍磁盘工作在48位寻址时PIO命令的执行:FPGA首先连续写两次磁盘的特征寄存器,因为在PIO模式下此寄存器已经废弃,所以值可以任意。然后连续写两次扇区数寄存器,第一次写入写扇区总数的高8位,第二次写入写扇区总数的低8位。再依次写两次扇区号寄存器、柱面寄存器0、柱面寄存器1,顺序写入起始扇区地址的第24~31位、0~7位、32~39位、8~15位、40~47位、16~23位。至此,硬盘就可以确定写数据的起始地址以及写数据总量。然后FPGA需要写驱动器/磁头寄存器以确定磁盘的寻址方式。一般采用逻辑寻址。最后向命令寄存器中写入命令码34H。参数发送完毕后,FPGA至少等待400ns,然后读可选状态寄存器,一旦检测到BSY为低电平、DRQ为高电平,就说明磁盘已经就绪可以接收数据,此时只需按照PIO时序的要求向数据寄存器写入数据即可。数据写入完成后,FPGA需等待磁盘给出的中断信号INTRQ,此信号有效后FPGA读状态寄存器,整个写扇区的命令执行完毕,磁盘可以继续接收其他命令。
完成硬盘的复位和配置以后,FPGA循环检测有无读写命令。以写硬盘为例介绍,FPGA完成对硬盘的复位和配置后就进入到命令检测状态。一旦检测到写硬盘命令,程序进入到写状态。FPGA首先向硬盘命令寄存器和状态寄存器写入必要的信息,然后等待DMARQ信号有效,进而对DMA通道进行初始化。全部准备工作完成后,FPGA内部FIFO中的数据就可以存储到硬盘中。数据在传输过程中,硬盘随时可能暂停传输,一旦暂停,FPGA就只能等待硬盘再次就绪。前一帧的DMA数据传输完毕后,FPGA需要向硬盘发送CRC结果,如果CRC结果正确硬盘就会接收当前数据;如果错误,硬盘就会向FPGA报错,此时数据就需要重新传输。图5为写硬盘流程图。读硬盘的过程和写过程相似,本文不再详细介绍。
3 上位机软件设计
整个磁盘系统通过VC界面进行管理,操作界面如图6。软件提供了最多四个采集通道,用户可以根据自己的需要进行任意配置。采集数据前,可以设置采集时钟为外时钟或内时钟。触发方式分:自动触发、上升沿触发、下降沿触发、低电平采集、高电平采集。针对雷达的特殊工作方式,系统也可以工作在间断采集模式下。
数据采集过程中,磁盘系统配合PCI 9054卡可以得到当前回波的IQ数据以及脉冲压缩结果。采集结束后,可以根据需要导出任何一部分数据。
本文采用FPGA实现了符合ATA-6规范的IDE协议,将硬盘组成磁盘阵列实现了对数据的高速稳定存储, 平均数据流达到200MB/s,峰值传输速率达到800MB/s。在试验阶段先后使用了希捷、迈拓、西数等厂家的硬盘进行试验。经过测试整个系统的运行比较稳定,长时间采集不会出现数据丢失的情况。如果希望增强系统的抗震性,可以在板卡上挂IDE接口的固态盘,整个系统的性能不会受到影响。
参考文献
[1] Friedhelm Schmidt.SCSI总线和IDE接口协议、应用和编程(第二版)[M].中国电力出版社,2001.
[2] Technical committee.Information Technology-AT Attachment with Packet Interface-6(ATA/ATAPI-6)[S],Revision 3a 14 December,2001.
[3] CARDARILLI G C,LEANDRI A,MARINUCCI P,et al.Desigh of Fault Tolerant Solid State Mass Memory.IEEE TRANSACTION ON RELIABILITY[J],2003,52(4):2-5.
[4] 黄新财,佃松宜,汪道辉.基于FPGA的高速连续数据采集系统的设计[J].微机计算机信息,2005,2(58):2-5.
[5] 候伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计-电子工程师必备知识(修订版)[M].西安:西安电子科技大学出版社,1998.
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。