zynq+nvme存储方案设计

HeroKern HeroKern     2023-03-09     558

关键词:

1.概述
很久没有写文章了,有空余时间还是分享一点技术干货。今天写一下zynq+nvme高速存储设计思想,zynq处理器是将ARM和FPGA集成在一起的处理器,区别于以前ARM+FPGA的板间架构,采用AXI内部总线实现ARM和FPGA内部的通讯,支持低速AXI-GP接口(类型Local Bus),高速AXI-HP接口,ARM端简称PS,FPGA端简称PL。如果数据过PS端,那么数据会经过HP接口,软件上的数据解析和拷贝,这样存储速率大约为130MB/s,速率比较慢,所以就引入了本文方案,控制走PS,数据PL实现分流操作。
2.方案设计
存储方案使用处理器为xilinx公司的xz7045芯片,SSD选用m.2接口的固态硬盘,SSD盘支持pcie接口和nvme协议,SSD盘挂载到PL,数据输入挂载到PL,PL的PCIe IP支持接口2.0,PS运行Linux操作系统。本次存储方案采用linux文件系统进行管理,使用文件系统接口,通过读写文件就能实现数据的下盘和导出操作。FPGA将数据缓存在DDR中,PS直接控制数据从FPGA直接写入到SSD,从而实现高速存储,存储方案如图 1所示。

a)fpga收到GTX数据后,先通过三路FIFO(1K),通过轮询FIFO的方法将数据缓存到ddr。fpga在DDR中分配了8个8M大小block,8个缓存块做循环队列使用,fpga收到数据后依次往block中填写数据,当block ID超出队列大小时,又从队列头ID1开始存放数据,这里不存在缓存被耗尽还没有下盘情况,如果有那就是方案不合理。
b)当有一个block存放满时,PL将该ID值和数据大小写入到对应寄存器。Linux驱动查询到寄存器有数据时,通过地址映射表得到地址信息,然后将需要写数据的地址挂入下盘队列中,然后通过异步IO方式通知应用层需要写数据。
c)Linux应用程序根据数据类型打开对应的文件,然后向从队列中取出地址信息,然后向该地址写入指定数据大小
d)文件系统收到指令后将需要写的文件拆分成对应nvme指令,通过nvme驱动填写nvme sq队列。
e)Nvme驱动将sq指令填充完成后,将通过ssd的bar寄存器写SQ门铃寄存器Tail通知ssd nvme控制器取数据。
f)Ssd以DMA方式从SQ队列中将SQ指令取到nvme控制器,并且执行,指定完成后更新SQ门铃寄存器Head。
g)SSD nvme控制器解析SQ指令得到PRP地址,以DMA方式将PL DDR中的数据写入SSD盘,这里比较特殊,当PCIE Host接收到映射表中的地址的DMA请求,应当按照地址映射表将地址请求转换到对应的DDR缓存ID上的请求。只有数据才需要地址转换。
h)执行完成SQ命令后将执行结果状态以DMA方式写入到CQ指令到CQ队列,并且更新CQ的门铃寄存器Tail,同时发送中断通知Host有新的CQ指令到来。
i)Host收到CQ中断后从CQ队列头部取出CQ指令,并且执行CQ指令,CQ指令执行完成后通过BAR寄存器更新CQ门铃寄存器的Head。执行CQ指令将会上报应用态本次数据交互是否正常。

3.FPGA设计
FPGA设计包括,DDR乒乓设计,PCIE接口转BRAM,高速GTX接口等。vivado设计框图如下所示。

这里展现的是局部框图,这里有个细节需要注意,标红部分是PCIE接口数据进来,然后分流为两部分,一部分进入BRAM,另外一部分进入HP接口。熟悉NVME协议的人应该知道为啥要这么设计了,NVME的协议部分是走HP到PS端,让linux的nvme驱动负责解析,包括SQ,CQ都从PS端取,但是PRP地址列表我们放在PL端,因为PRP地址列表基本是固定的,地址在约定的8M块走BRAM部分数据为真实数据,这样大数据就不会走PS导致降速。这里有几个细节需要注意,PCIE TLP包交互式以4K大小,NVME的SQ交互大小为512KB(这里需要通过命令SQ去查询SSD盘的参数,队列深度和队列个数,最大交互单元为多少,这里不设计NVME协议,SQ和CQ可以网上查阅资料),那么就会头128个TLP发起访问,而HP接口Brust模式为128字节(这里可能记错了),这里提到的参数是方便抓信号使用。
4.软件设计
软件设计分为四个部分,PCIE驱动,NVME驱动,自定义驱动和应用程序。PCIe驱动负责解析PCIe接口,NVME驱动解析NVME协议,自定义驱动用于管理NVME驱动和与应用程序交互,应用程序负责文件信息管理,与上位机交互等操作。
软件设计有几个细节需要注意,文件信息可以放到SSD中,对速度不影响,异常掉电软件需要好好处理,数据不是完整的8M块也需要处理。异常掉电和数据不是完整8M块可以放到一起处理,异常掉电尽量让FPGA去检测。HP接口数据是直接到DDR,需要注意Cache一致性问题,因为存在HP接口Cache一致性,当从网络卸载数据时还存在网络MAC的DMA Cache一致性问题,这里涉及东西比较多,后期文章讲解。下图是自定义驱动的框架。

5.PCIE中断分析
PCIE中断分为硬中断和软中断,在zynq中中断处理比较特殊,因为PCIe的RC和协议解析是在不同处理上,中间只能通过GPIO和HP接口进行交互。
PCIe硬件中断如下所示

zynq中PCIe的软中断比较特殊,并不能完全按照MSI中断方式取处理。

PCIe真正软中断处理方式如下所示。

6.总结
按照本文方式处理,zc706处理器存储速率能够达到1.2GB/s。本方案设计比较简单,可移植性好,并且成本低,运行稳定,开发高效。技术支持联系vx:yolov8

zynq+nvme存储方案设计

...了本文方案,控制走PS,数据PL实现分流操作。2.方案设计存储方案使用处理器为xilinx公司的xz7045芯片,SSD选用m.2接口的固态硬盘,SSD盘支持pcie接口和nvme协议,SSD盘挂载到PL,数据输入挂载到PL,PL的PCIeI... 查看详情

zynq多host高速存储方案设计

        前面文章讲解了《zynq高速存储方案》,那种方案是针对单个pciehost设计的方案,当项目需求记录速度很高,并且没有国产化要求时,可以考虑使用ZynqUltraScale+系列的ZU11EG芯片,该芯片成本低࿰... 查看详情

zynq多host高速存储方案设计

        前面文章讲解了《zynq高速存储方案》,那种方案是针对单个pciehost设计的方案,当项目需求记录速度很高,并且没有国产化要求时,可以考虑使用ZynqUltraScale+系列的ZU11EG芯片,该芯片成本低࿰... 查看详情

nvme闪存存储系统设计挑战

...的不断提升,价格不断下降,应用的不断增多,推动闪存存储系统替代传统磁盘系统。和传统磁盘系统相比,由于存储介质发生了变化,存储系统设计思考的问题会发生重大变化。这种变化直接体现在存储系统软件架构的改变,... 查看详情

zynq设计指南

...硬件系统部分的一个集成开发环境,例如可创建处理器,存储器,外设,扩展接口和总线。VivadoIDE和设计套件中的其他工具有交互,并且包含集成和打包IP的工具,这种设计为工程的可重用性提供了可能。SDK是基于广受欢迎的Ecli... 查看详情

pcie+switch高速存储方案设计

        上篇文章分享了《zynq高速存储方案》,zynq存储方案实现了1.2GB/s的存储速率,这篇文章分享pcie+switch常规方案,这种方案在存储领域很常见,目前作者实现switch方案存储速度有5GB/s和6.5GB/s,以及... 查看详情

pcie+switch高速存储方案设计

        上篇文章分享了《zynq高速存储方案》,zynq存储方案实现了1.2GB/s的存储速率,这篇文章分享pcie+switch常规方案,这种方案在存储领域很常见,目前作者实现switch方案存储速度有5GB/s和6.5GB/s,以及... 查看详情

报告:nvme存储系统机遇与挑战

很荣幸能够参加存储联盟主办,同有科技承办的“闪存预见新高峰”技术沙龙活动。在这个会议上和大家一起分享了NVMe存储系统遇到的机遇与挑战,从介质本身的特点、IO处理堆栈遇到的问题出发,给出了一些NVMe存储的设计思... 查看详情

nvme是啥的缩写

...议和命令集。NVMe经过专门设计,可充分利用基于闪存的存储设备所固有的内部并行度和低延迟优势。在速度提升和延迟降低方面,NVMe有望成为闪存介质和下一代存储级内存(SCM)介质的演进方向。Nvme是一种高性能、NUMA(非统一内... 查看详情

nvme和ngff的区别是啥?

...同NGFF有两种接口:Socket2和Socket3。前者支持SSD、WWAN等非存储设备,接口采用SATA和PCI-e2,Socket3专为高性能存储而设计,支持PCI-EX4接口,该接口更小,带宽高达4GB/s,Ngff(也称为m.2)包含世达线路。nvme是M.2接口。参考技术ANGFF有... 查看详情

zynq原理图中添加rtl设计模块

前言已有的RTL模块怎么添加到原理图中?流程(1)添加文件到设计中。(2)右键文件添加到blockdesign中。 (3)连线即可。 以上。 查看详情

什么是nvme协议?

1NVMe协议的定义及特点在过去的2016年,几乎全球所有的存储大厂都推出了基于NVMe协议的固态硬盘产品,一时间NVMe协议几乎成为了行业最为热门的词汇。那么,NVMe协议到底是什么?它和传统的AHCI协议又有哪些异同?下面,我们... 查看详情

zynq板卡学习资料:基于zynqxc7z100fmc接口通用计算平台367

...器的嵌入式处理PS 端32bit 1GB 容量 DDR3 存储PS端RS232接口PS端USB接口PS端1路 10-100-1000 Mbps Ethernet (RGMII?) 网络接口PS端QSPI flash 存储PS端 SD卡,Emmc存储PL端32bit 1GB 容量DDR3 存储... 查看详情

zynq7000硬件开发之电源供电系统(pdn)设计

...何通过基于Zynq7045芯片开发的板级电源要求解读、电源树设计等。       Zynq7045板级电源主要包括有三部分& 查看详情

大于16mb的qspi存放程序引起的zynq重启风险

...代原来的分立器件。  ZYNQ可以外接QSPIFLASH作为程序的存储介质。  QSPI和SPIflash是串行接口的NORFLASH,在设计支持,容量都比较小,所以协议中只留了3Bytes寻址,也就是最大16MB空间。但是随着工艺和技术的提升,现在32MB、64MB... 查看详情

zynq之fpga学习----eeprom读写测试实验(代码片段)

...sableProgammableReadOnlyMemory,E2PROM)即电可擦除可编程只读存储器,是一种常用的非易失性存储器(掉电数据不丢失)。ZYNQ开发板上使用的是AT24C64,通过IIC协议实现读写操作。IIC通信协议基础知识学习:硬件设计基础----... 查看详情

基于zynq平台的ethercat主站方案实现

作者:陈秋苑谢晓锋陈海焕广州虹科电子科技有限公司摘要:EtherCAT是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发。EtherCAT具有高性能、低成本、容易使用等特点,目前在工业自动化领域有着广泛的应用。Zynq-700... 查看详情

[spdk/nvme存储技术分析]005-dpdk概述

注:之所以要中英文对照翻译下面的文章,是因为SPDK严重依赖于DPDK的实现。IntroductiontoDPDK:ArchitectureandPrinciplesDPDK概论:体系结构与实现原理Linuxnetworkstackperformancehasbecomeincreasinglyrelevantoverthepastfewyears.Thisisperfectlyunderstan 查看详情