本产品所选用的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空间均可用于数据存储。但由于没有冗余备份,一旦某块硬盘丢失或损坏,那么原始数据就不能保全恢复了。