电话:17151150431

微信:18500365692

信号处理 高速存储
基于FPGA实现的NVMe硬盘阵列控制器
产品概述
NVME固态硬盘是当前主流的一种数据存储产品。NVME硬盘的一般使用方式是将其安装于通用计算机中,比如安装在家用的笔记本电脑、台式电脑中,通过计算机系统中的芯片电路和通用操作系统软件对其进行驱动和数据读写控制。
然而,有大量的诸如专用设备、科学仪器等等也需要对海量数据进行高速存储。毫无疑问,NVME硬盘也可以在这些领域中用于数据存储。但是如果在专用设备中,仍然使用通用计算机实现对NVME硬盘的控制,那么由于通用计算机系统固有的体系构架,结构形态等特性,必然会对专用设备的数据接口形式、设备体积、结构可靠性、功耗等方面造成束缚。
FPGA芯片是一种在数字逻辑硬件层面可以编程的芯片,小到一个简单的计时器逻辑,大到一个完整的CPU逻辑,都可以用FPGA编程实现。本产品便是基于FPGA芯片,替代整套通用计算机系统,通过逻辑编程和软件编程,以片上系统SOC的构架实现一套对6块NVME硬盘进行阵列控制的系统。再通过FPGA为用户提供行业内常用的高速数据接口,或者是用户定制的数据接口,这样就能以小巧的结构形态,让用户非常方便地实现专用设备中的高速数据流存储。
本产品应用领域广泛,可以用于实现超高速实时数据流的存储和回放,主要应用于科学仪器、雷达、电子战、卫星通信等领域。典型应用包括实现对ADC采样数据流的实时记录、DAC重构数据流的供给、光纤或RapidIO等高速数据接口的数据记录等场景。

下图是基于本控制器IP实现的两款款电路模块。
技术参数
主要技术特性如下。

  • 芯片平台:1片XILINX XCKU115 + 1片XILINX XC7Z100。
  • 高速缓存:24GB DDR4 SDRAM。
  • 固态存储:6条NVME M.2固态盘(总容量可达48TB)。
  • 阵列模式:支持RAID0/RAID5/RAID6/RAID10动态切换。
  • 存储冗余:RAID5/RAID6模式支持任意1~2块盘丢失,RAID1模式支持3块盘丢失。
  • 存储速率:连续写入或读出速率8GBps
  • 数据接口:2条 8x RapidIO或Aurora。
  • 控制接口:千兆网;RS232;USB。
  • 控制协议:基于RapidIO/Aurora/TCP IP的自定义协议。
  • 文件系统:针对高速实时记录而设计的自定义文件系统。
  • 系统监测:提供各类电压/温度/IO状态/存储状态/历史统计等各类信息。
  • 主控软件:提供运行于Windows系统的主控软件以及API。
  • 技术服务:充足的技术资料和技术支持,确保用户快速集成和使用。
技术原理
该FPGA芯片逻辑系统的构架如下图所示。
本产品所选用的FPGA XCKU115,具备大约130万个寄存器,以及64路高速串行收发器,同时由于其内部集成有6个 PCIE 3.0 硬核控制器,可用于实现6路NVME协议的链路层逻辑,也就是对应可以实现对6块硬盘的控制。

在硬件设计上,我们为这款FPGA配置了6组独立的内存通道,每个通道驱动4GB容量 2666M速率的DDR4 SDRAM存储器,因此全系统具备24GB内存空间。对应的,每个NVME硬盘使用一组4GB内存作为数据读写的缓冲器。
XCKU115 FPGA具备16条 4x 宽度的高速链路,其中6条用于驱动NVME硬盘,其余10条引出作为高速存盘数据流或控制数据流的通信通道。

在逻辑设计上,首先是在NVME硬盘的控制层次上,如上所述,每个NVME硬盘控制器使用独立的4GB内存,同时每个NVME控制器使用一个独立的PCIE 3.0硬核IP。得益于FPGA芯片中集成的高速收发器IP以及PCIE 硬核IP,我们可直接利用它们实现NVME协议的物理层和链路层。

我们再使用软核CPU处理器Microblaze实现NVME协议传输层的主要功能,但由于Microblaze主频和对应的性能有限,例如本设计中,Microblaze处理器的运行主频为100MHz,所以Microblaze处理器主要用于协议流程调度,与性能相关的工作仍然通过编写定制逻辑来实现,诸如访问内存的DMA逻辑,构造和解析NVME指令队列的逻辑等等。

在NVME硬盘控制层之上,是实现对6块硬盘进行统一管理的阵列管理层,即RAID层。考虑到RAID逻辑中涉及一些数学算法,我们在本设计中使用高层次综合语言(HLS)实现RAID功能。该RAID模块同时实现了RAID0, RAID1, RAID5, RAID6共计4种模式,并且可以通过指令寄存器设置,实现模式之间的动态切换。

如前面提到的,RAID0模式可获得最大存储容量,例如使用6块4TB硬盘的话,全部24TB空间均可用于数据存储。但由于没有冗余备份,一旦某块硬盘丢失或损坏,那么原始数据就不能保全恢复了。
RAID1模式将6块硬盘分为3组,每组2块硬盘,其中1块存储数据,另一块存储备份,即总共使用3块硬盘存储数据,另外3块硬盘存储备份数据,因此允许多达3块硬盘损坏的情况下保全数据。但对于3个分组,每个分组中至少需要存留1块有效硬盘。如果使用6块4TB硬盘,那么系统实际有效存储容量只有一半,即为12TB,而非24TB。
RAID5模式使用5块硬盘存储数据,1块硬盘存储冗余校验。系统允许6块硬盘中任意1块硬盘丢失或损坏,其余5块硬盘可恢复出原始数据。如果使用6块4TB硬盘,那么系统实际有效存储容量为5块硬盘容量,即为20TB,而非24TB。
RAID6模式使用4块硬盘存储数据,2块硬盘存储冗余校验。系统允许6块硬盘中任意2块硬盘丢失或损坏,其余4块硬盘可恢复出原始数据。如果使用6块4TB硬盘,那么系统实际有效存储容量为4块硬盘容量,即为16TB,而非24TB。
在RAID层设计之上,是系统应用层。该层次逻辑主要负责收发用户指令,维护文件系统,维护数据接口,对全系统工作流程进行调度和处理。本设计中,应用层使用2个Microblaze处理器作为核心,调度包括RAID控制器和6个硬盘控制器在内的一系列逻辑进行有序工作,最终实现全系统的逻辑功能。

如果使用RAID1\5\6模式,当在数据记录过程中出现硬盘损坏,并且硬盘损坏的数量不超过RAID模式支持的冗余量时,本产品可以自动识别硬盘状态,丢弃损坏的硬盘并使用剩余硬盘继续进行数据记录。

同样地,数据记录完成后,如果有硬盘损坏、或者缺失,那么只要缺损的硬盘数量不超过RAID模式支持的冗余量,本产品也可以恢复原始数据。
应用层的2个Microblaze双核处理器,运行轻量级的开源操作系统RTOS,在AMD VITIS集成环境下使用C语言进行开发。连同NVME层使用的6个Microblaze,本设计总共使用了8个Microblaze处理器。

本系统对硬盘空间的管理,使用了自研设计的文件系统。该文件系统提供文件新建、删除、命名等一系列常见功能,并针对高速实时数据流的存储应用做了特别的优化设计,在数据存盘过程中,只需要CPU轻度参与即可完成数据到硬盘扇区的引导,充分保证强实时数据流的读写。

系统控制可以使用网口、串口或者PCIE接口,各种接口在底层通信上使用相同的数据结构。主机与FPGA之间以264字节为一帧互作通信,完成文件管理指令与应答、状态监测询问与应答、存储读写过程调度与应答、数据导出控制等各项工作。

系统控制协议公开,用户可以自行编写主控软件。本产品也附带提供基于C#语言和Windows .net框架编写的示例软件。
系统在Vivado2023.2设计软件中,以Block Design模式做最终集成,整套逻辑在XCKU115 FPGA上综合实现之后,寄存器和查找表资源使用率在70%左右,存储器资源使用率在80%左右。其中单个NVME硬盘控制器的大概消耗7万个寄存器,5万个查找表,以及170个块RAM。
我们为这套存储系统设计了配套的测试程序,通过构造数据内容和数据速率均可控的高速数据源,模拟各种工况下数据的写入过程,同时模拟数据回读过程并对数据内容进行校验,充分测试验证了系统功能的正确性。

对于硬件系统,也做了长时间的疲劳测试、高低温适应性测试。再经过多个项目的实际应用,这套系统已得到了充分的验证。

本产品的讲解视频链接如下,欢迎观看!