基于FPGA控制的IDE磁盘阵列设计
随着雷达技术的不断发展,如何高速稳定地存储回波数据已经成为一个亟待解决的问题。当前高速存储设备主要应用在服务器上,不仅价格高昂,而且功能可扩展性不强。因此,本文使用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设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 基于FPGA的快速并行FFT及其在空间太阳望远镜图像锁定系统中的应用(06-21)
- 3DES算法的FPGA高速实现(06-21)
- 用FPGA实现FFT算法(06-21)
- FPGA的DSP性能揭秘(06-16)