CN112256601B - 数据存取控制方法、嵌入式存储系统及嵌入式设备 - Google Patents
数据存取控制方法、嵌入式存储系统及嵌入式设备 Download PDFInfo
- Publication number
- CN112256601B CN112256601B CN202011119660.3A CN202011119660A CN112256601B CN 112256601 B CN112256601 B CN 112256601B CN 202011119660 A CN202011119660 A CN 202011119660A CN 112256601 B CN112256601 B CN 112256601B
- Authority
- CN
- China
- Prior art keywords
- data
- controller
- command
- operation command
- host controller
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0038—System on Chip
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/16—Memory access
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开了一种嵌入式存储系统和数据存取控制方法。其中数据存取控制方法包括:基于FPGA的NVMe主机控制器获取并将设备操作命令写入设备操作命令提交队列;通过基于FPGA的PCIe控制器,通知NVMe固态存储设备的设备控制器执行设备操作命令;设备控制器通过PCIe控制器从提交队列获取并执行设备操作命令;设备控制器通过PCIe控制器将命令执行结果写入设备操作命令完成队列;主机控制器通过硬件查询方式实时检测设备操作命令完成队列项;若检测到完成队列项,则处理完成队列项包括的命令执行结果。采用本发明的技术方案,使得通过硬件查询方式实时检测并处理命令处理结果;因此,可以有效简化数据存储过程,且提高数据存取速度。
Description
技术领域
本发明实施例涉及数据存储技术领域,尤其涉及一种数据存取控制方法,一种嵌入式存储系统,以及一种嵌入式设备。
背景技术
嵌入式系统(Embedded system),是一种完全嵌入受控器件内部,为特定应用而设计的专用计算机系统。基于嵌入式系统的设备称为嵌入式设备。存储器系统是嵌入式设备的重要组成部分,为嵌入式设备提供外部数据存取功能,简称为嵌入式存储系统。
目前,嵌入式存储系统主要采用基于现场可编程门阵列(Field ProgrammableGate Array,FPGA)FPGA实现的串行高级技术附件(Serial Advanced TechnologyAttachment,SATA)接口的固态存储设备(Solid Stroage Device,SSD)的实现方式。该实现方式使用FPGA实现SATA协议的主机控制器,并通过SATA协议的主机控制器对SATA接口的SSD进行数据存取控制。
然而,由于SATA协议为了兼容机械硬盘和固态硬盘,协议本身比较复杂且效率不高,因此上述实现方式的缺点是单个SATA SSD读写速度较慢,有着6Gbps的极限读写限制,无法满足专业领域对于极低延时、极致读写速度的要求,从而制约了嵌入式存储系统的高速化发展。同时,由于SATA SSD的体积较大,也因此制约了嵌入式存储系统的小型化发展。随着用户对于读写速度、设备体积的极致追求,研究一种读写性能更高、设备体积更小的嵌入式存储系统成为本领域技术人员迫切需要解决的问题。
发明内容
本发明实施例提供了一种数据存取控制方法,一种嵌入式存储系统,以及一种嵌入式设备,以解决现有技术存在的数据存取速度较慢、设备体积较大的问题。
第一方面,本发明实施例提供了一种数据存取控制方法,包括:基于可编程逻辑门阵列FPGA实现的主机控制器获取待执行的设备操作命令,所述主机控制器是基于非易失性存储器的传输规范NVMe的主机控制器;所述主机控制器将所述设备操作命令写入设备操作命令提交队列;所述主机控制器通过基于所述FPGA实现的高速串行计算机扩展总线标准PCIe控制器,通知NVMe固态存储设备的设备控制器执行所述设备操作命令;所述设备控制器通过所述PCIe控制器从所述提交队列获取所述设备操作命令;所述设备控制器执行所述设备操作命令;所述设备控制器通过所述PCIe控制器将命令执行结果写入设备操作命令完成队列;所述主机控制器通过硬件查询方式实时检测设备操作命令完成队列项;若检测到所述完成队列项,则处理所述完成队列项包括的命令执行结果。
结合第一方面,在第一方面第一种可能的实现方式中,所述提交队列是基于所述FPGA实现的提交队列;所述主机控制器通知固态存储设备的设备控制器执行所述设备操作命令,包括:所述主机控制器通过所述PCIe控制器,将所述设备操作命令在所述提交队列中的存储地址写入提交队列门铃寄存器;所述设备控制器通过所述提交队列门铃寄存器获取执行所述设备操作命令的通知。
结合第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,所述完成队列是基于所述FPGA实现的完成队列,所述提交队列和所述完成队列分别独立映射编址,所述设备控制器并行处理所述提交队列包括的多个设备操作命令。
结合第一方面、第一方面第一种可能的实现方式或第一方面第二种可能的实现方式,在第一方面第三种可能的实现方式中,所述处理所述命令执行结果,包括:若所述命令执行结果是成功,则根据所述设备操作命令更新所述提交队列。
结合第一方面、第一方面第一种可能的实现方式、第一方面第二种可能的实现方式或第一方面第三种可能的实现方式,在第一方面第四种可能的实现方式中,所述设备控制器通过所述PCIe控制器从所述提交队列获取所述设备操作命令,包括:所述PCIe控制器从所述提交队列中读取所述设备操作命令;将所述设备操作命令转换为AXI4格式的总线操作;执行所述AXI4格式的总线操作,使所述设备控制器获得所述设备操作命令。
结合第一方面、第一方面第一种可能的实现方式、第一方面第二种可能的实现方式、第一方面第三种可能的实现方式或第一方面第四种可能的实现方式,在第一方面第五种可能的实现方式中,所述设备操作命令包括写数据命令;所述方法还包括:应用程序向基于所述FPGA实现的数据写入控制模块发送帧起始脉冲信号和待写入数据帧的起始地址;针对所述待写入数据帧的各个子帧,所述应用程序通过所述数据写入控制模块获取基于所述FPGA实现的数据写入缓冲区的状态,并根据所述状态判断所述数据写入缓冲区的可用空间是否满足所述子帧的存储需求;若是,则所述应用程序将所述子帧的数据有效指示和数据同步写入至所述数据写入缓冲区;所述基于可编程逻辑门阵列FPGA实现的主机控制器获取待执行的设备操作命令,包括:在所述主机控制器确定所述数据写入缓冲区的数据量达到第一预设阈值时,根据所述起始地址生成所述写数据命令;所述设备控制器执行所述设备操作命令,包括:所述设备控制器通过所述PCIe控制器获取所述数据写入缓冲区中的数据;将所述数据写入缓冲区中的数据写入所述固态存储设备;所述方法还包括:在将所述待写入数据帧写入至所述固态存储设备后,所述应用程序向所述数据写入控制模块发送数据帧结束信号;所述数据写入控制模块通过基于所述FPGA实现的应用程序数据控制模块,将所述待写入数据帧的文件信息存储到基于所述FPGA实现的文件系统管理模块的文件索引区。
结合第一方面、第一方面第一种可能的实现方式、第一方面第二种可能的实现方式、第一方面第三种可能的实现方式、第一方面第四种可能的实现方式或第一方面第五种可能的实现方式,在第一方面第六种可能的实现方式中,所述设备操作命令包括读数据命令;所述方法还包括:应用程序向基于所述FPGA实现的数据读出控制模块发送读数据帧命令,所述读数据帧命令包括LBA起始地址和数据读取长度;所述数据读出控制模块将所述读数据帧命令转发至所述主机控制器;所述基于可编程逻辑门阵列FPGA实现的主机控制器获取待执行的设备操作命令,包括:所述主机控制器获取基于所述FPGA实现的数据读出缓冲区的状态;所述主机控制器根据所述数据读出缓冲区的状态、所述LBA起始地址和所述数据读取长度,生成一个或多个所述读数据命令;所述设备控制器执行所述设备操作命令,包括:所述设备控制器从所述固态存储设备读取数据;通过所述PCIe控制器将读取的数据发送至所述数据读出缓冲区;所述处理所述命令执行结果,包括:所述数据读出控制模块向所述应用程序发送帧起始脉冲信号;针对所述数据读出缓冲区中已读取数据的各个子帧,所述数据读出控制模块获取基于所述FPGA实现的应用程序缓冲区的状态,并根据所述应用程序缓冲区的状态判断所述应用程序缓冲区的可用空间是否满足所述子帧的存储需求;若是,则所述数据读出控制模块将所述子帧的数据有效指示和数据同步写入至所述应用程序缓冲区;所述应用程序读取所述应用程序缓冲区中的数据;在将所有所述子帧的数据写入至所述应用程序缓冲区后,所述数据读出控制模块向所述应用程序发送数据帧结束信号。
结合第一方面、第一方面第一种可能的实现方式、第一方面第二种可能的实现方式、第一方面第三种可能的实现方式、第一方面第四种可能的实现方式、第一方面第五种可能的实现方式或第一方面第六种可能的实现方式,在第一方面第七种可能的实现方式中,所述方法还包括:初始化所述PCIe控制器和所述主机控制器。
第二方面,本发明实施例提供了一种嵌入式存储系统,包括:现场可编程门阵列FPGA芯片,至少一个支持非易失性内存主机控制器界面规范NVMe协议的固态存储设备,以及,用于连接所述FPGA芯片和所述固态存储设备的至少一个高速串行计算机扩展总线标准PCIe总线;所述FPGA芯片配置为包括至少一个NVMe主机控制器、及至少一个PCIe控制器;所述固态存储设备包括设备控制器;其中,所述主机控制器,用于获取待执行的设备操作命令,并将获得的所述设备操作命令写入设备操作命令提交队列,并通知所述设备控制器执行所述设备操作命令;所述设备控制器,用于通过所述PCIe控制器从所述提交队列获取所述设备操作命令,并执行获得的所述设备操作命令,并通过所述PCIe控制器将命令执行结果写入设备操作命令完成队列;所述主机控制器,还用于通过硬件查询方式实时检测设备操作命令完成队列项;若检测到所述完成队列项,则处理所述完成队列项包括的命令执行结果。
结合第二方面,在第二方面第一种可能的实现方式中,所述至少一个固态存储设备为两个固态存储设备,所述系统还包括FPGA配置固定存储设备模块;所述FPGA配置固定存储设备模块,用于将所述两个固态存储设备设置为RAID1工作模式。
结合第二方面或第二方面第一种可能的实现方式,在第二方面第二种可能的实现方式中,所述至少一个固态存储设备为至少两个固态存储设备,所述系统还包括FPGA配置固定存储设备模块;所述FPGA配置固定存储设备模块,用于将所述至少两个固态存储设备设置为RAID0工作模式。
第三方面,本发明实施例提供了一种嵌入式设备,包括:上述的嵌入式存储系统。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
第五方面,本发明实施例提供了一种包括指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
相较于现有技术,本发明提供的方案,通过基于FPGA实现的主机控制器获取待执行的设备操作命令,其中主机控制器是基于非易失性存储器的传输规范NVMe的主机控制器,主机控制器将设备操作命令写入设备操作命令提交队列,并通知固态存储设备的设备控制器执行设备操作命令;设备控制器通过PCIe控制器从提交队列获取并执行设备操作命令,并通过PCIe控制器将命令执行结果写入设备操作命令完成队列;主机控制器通过硬件查询方式实时检测设备操作命令完成队列项,在检测到完成队列项后,处理完成队列项包括的命令执行结果;这种处理方式,使得通过NVMe主机控制器和PCIe总线对固态存储设备中的数据进行存取处理,且通过硬件查询方式实时检测并处理命令处理结果;因此,可以有效简化数据存储过程,且提高数据存取速度。同时,本发明提供的方案使得主机控制器和PCIe控制器均基于单颗FPGA芯片实现,且可采用体积较小的M.2接口或BGA封装的NVMe固态存储设备;因此,可以有效节省电路板面积,降低嵌入式存储系统的体积。
附图说明
图1为本发明实施例提供的一种嵌入式存储系统的结构示意图;
图2为本发明实施例提供的一种嵌入式存储系统的具体结构示意图;
图3为本发明实施例提供的一种嵌入式存储系统的另一个具体结构示意图;
图4为本发明实施例提供的一种嵌入式存储系统的内存映射示意图;
图5为本发明实施例提供的一种嵌入式存储系统的又一个具体结构示意图;
图6为本发明实施例提供的一种嵌入式存储系统的又一个具体结构示意图;
图7为本发明实施例提供的一种嵌入式存储系统的主机控制器的流程示意图;
图8为本发明实施例提供的一种嵌入式存储系统的NVMe四层结构和功能模块的对应关系图;
图9为本发明实施例提供的一种嵌入式存储系统的PCIe初始化的流程示意图;
图10为本发明实施例提供的一种嵌入式存储系统的NVMe初始化的流程示意图;
图11为本发明实施例提供的一种嵌入式存储系统的输入输出接口的结构示意图;
图12为本发明实施例提供的一种嵌入式存储系统的数据输入接口的结构示意图;
图13为本发明实施例提供的一种嵌入式存储系统的数据帧的结构示意图;
图14为本发明实施例提供的一种嵌入式存储系统的配置和数据导出的结构示意图;
图15为本发明实施例提供的一种嵌入式存储系统的寄存器配置帧的帧结构示意图;
图16为本发明实施例提供的一种嵌入式存储系统的寄存器配置写的时序图;
图17为本发明实施例提供的一种嵌入式存储系统的寄存器配置读的时序图;
图18为本发明实施例提供的一种嵌入式存储系统的存储读出控制模块的结构示意图;
图19为本发明实施例提供的一种数据存取控制方法的流程示意图;
图20为本发明实施例提供的一种数据存取控制方法的写入数据总线时序图;
图21为本发明实施例提供的一种数据存取控制方法的读出数据总线时序图。
具体实施方式
下面将结合附图,对本发明实施例中的技术方案做说明。
如图1所示,其为本发明实施例的嵌入式存储系统的结构框图,该嵌入式存储系统1至少包括FPGA芯片10、NVMe固态存储设备(NVMe SSD)11和PCIe总线12,其中PCIe总线12用于连接FPGA芯片10和SSD设备11。NVMe主机控制器101和PCIe控制器均在FPGA芯片10中实现,且由FPGA芯片10中集成的PCIe控制器实现根组件(Root Complex,RC)102,RC是主机控制器101和SSD设备11沟通的桥梁。固态存储设备11包括设备控制器(SSD控制器)。
NVME协议是基于PCIe协议的应用层协议,整个协议分为:应用层,协议层和物理层,其中应用层和协议层由主机控制器101实现,物理层使用FPGA中的PCIe控制器实现。PCIe控制器又称为PCIe总线接口(AXI Memory Mapped To PCI Express IP),用于连接NVMe固态存储设备11,此接口为标准接口,可由FPGA厂商提供的IP核实现,比如Xilinx提供了免费的“AXI Memory Mapped To PCI Express IP Core”实现PCIe接口。在本实施例中,该IP核工作在Root Port模式下,实现Root Complex功能。RC具有一个或者多个PCIe端口,可以连接各类PCIe设备。
采用本发明实施例提供的方案,将RC集成到FPGA中,可将RC视为主机控制器的一部分;这种处理方式,使得主机控制器和PCIe控制器均基于单颗FPGA芯片实现,无须外接RC;因此,可以有效节省电路板面积,降低嵌入式存储系统的体积。
如图2所示,在一个示例中,采用单片FPGA控制单片NVMe固态硬盘,这种设置方式适用于对体积或者成本敏感的应用。
如图3所示,在另一个示例中,采用单片FPGA控制多片NVMe固态硬盘,多片NVMe固态硬盘可以工作在RAID0或RAID1模式下,即:嵌入式存储系统1可以实现控制多个固态硬盘,通过软件配置可以实现RAID0或RAID1。NVMe固态硬盘可以采用M.2接口或BGA封装的NVMe固态硬盘,由于该种硬盘体积较小,且多片NVMe固态硬盘可工作在RAID0模式下,RAID0将两个或多个相同型号及容量的硬盘组合起来,当系统提取数据时,可以同时由所有硬盘(同一阵列里)读出数据,速度会比一个硬盘快得多,且磁盘阵列的总容量为各个硬盘容量之和;因此,可以适用于对体积和速度有较高要求。其中,NVMe固态存储设备的数量由FPGA支持的PCIe最大接口数确定。
NVMe协议中定义了多种队列(Queue),队列是一段内存区域,用来存储主机控制器101下发的命令或固态存储设备11返回的命令执行结果。队列包括基址(表示队列在Memory内的首地址),尾指针(新写入的命令或命令执行结果所在的地址)和头指针(即将被处理的命令或命令执行结果)。
嵌入式存储系统1可包括如下队列:1)管理提交队列(Admin Submission Queue,ASQ),用来存储主机控制器发送管理类命令;2)管理完成队列(Admin Completion Queue,ACQ),用来存储固态存储设备返回的管理命令执行结果;3)I/O提交队列(IO SubmissionQueue,IOSQ),用来存储主机控制器发送的数据读写命令;4)I/O完成队列(IO CompletionQueue,IOCQ),用来存储固态存储设备返回的读写命令执行结果;5)提交队列门铃寄存器(SQTailDoorbell),用于主机控制器通知固态存储设备有新的命令需要处理;6)完成队列门铃寄存器(CQHeadDoorbell),用于主机控制器通知固态存储设备命令返回结果的处理结果。
上述队列中的提交队列和完成队列位于主机控制器101侧,可使用FPGA中内嵌块RAM(BlockRAM)实现,也可以使用独立于FPGA芯片10的内存设备(Memory)13实现。其中主机控制器101通过SQ向设备控制器发送操作命令(如配置SSD控制器、读数据、写数据、读取硬件信息等),SSD控制器通过CQ通知主机控制器101命令的执行结果(如成功、错误及错误信息)。当SSD控制器执行完主机控制器101发送的命令后,则将命令执行结果通过PCIe总线写入位于1主机控制器101侧的CQ完成队列中。
由图1可见,内存设备13为嵌入式存储系统1的可选组件,当嵌入式存储系统1不包括内存设备13时,NVMe协议相关的队列均在FPGA芯片10中实现。如图4所示,其为本发明实施例提供的嵌入式存储系统1的内存映射图,每个队列的独立映射编址,同一时刻,每个队列控制模块都可以完全访问队列;这种处理方式,使得主机控制器可以直接对NVMe SSD进行读写操作,无需通过RC对FPGA和Memory之间的地址进行转换操作,且可并行处理不同队列中的队列项;因此,可以有效提升命令的执行速度,从而提升数据存取效率。
如图5所示,其为本发明实施例的嵌入式存储系统的具体结构框图,该嵌入式存储系统不仅包括主机控制器101,PCIe控制器102,以及,支持NVMe协议的固态硬盘11,还包括输入输出接口模块103,存储读出控制模块104,文件系统管理模块105,辅助接口模块106,以及,FPGA配置固定存储设备(FPGA配置Flash)模块7。嵌入式存储系统1可将主机控制器101、外部数据输入输出接口103以及文件系统105全部集成到单片的FPGA芯片10中,即模块1至6在FPGA中实现,由此可进一步减少外围芯片和PCB板面积,使得嵌入式存储系统具有小型化、高速、低功耗等优点。
请参见图6,其为硬件中断检测的结构图。由图6可见,位于NVMe SSD硬盘中的SSD控制器是硬盘的读写控制器;位于主机控制器101中的PCIe通讯控制模块,用于实现NVMe协议的底层数据通讯转换成AXI4格式的总线操作;位于主机控制器101中的提交队列SQ模块和完成队列CQ模块,使用FPGA芯片10中内嵌的块RAM构建的双端口操作RAM实现;位于主机控制器101中的硬件中断检测模块,用于实时检测AXI4总线上的CQ项数据包,并将检测结果发送到SQ队列状态控制模块;位于主机控制器101中的SQ队列状态控制模块,用于实时检测AXI4总线上的SQ项数据包,并根据硬件中断检测模块返回的SQ命令执行情况,对SQ的状态进行控制,并将状态结果输出至读写控制模块,SQ状态包括:空、满,几乎满(仅可以写入一条SQ项),几乎空(SQ中仅有一条SQ项未被SSD控制器执行);异常处理模块,用于接收硬件中断检测模块发送的命令执行结果,如果发生错误,则将错误信息传递给主控制器101的错误处理模块。
请参考图7,其为NVMe主机控制器101的工作流程图。NVMe主机控制器的主要工作流程分为两部分,系统初始化和用户命令操作。系统初始化包括PCIe初始化和NVMe初始化,用户命令包含三种命令:设备识别、写入数据和读出数据。下面结合图7,分别对本发明实施例中主机控制器101响应上述三种命令的执行过程作简要说明。图7中,用户又称为用户应用程序,是向嵌入式存储系统1发送设备操作命令的主体。
主机控制器101收到用户应用程序发送的“设备识别命令”后,进入到“处理设备识别命令”状态,通知NVMe SSD控制器处理该命令;当SSD控制器收到IDENTIFY命令后,则将描述SSD特性信息(如存储容量、当前工作温度,已写入的数据量等)的数据发送给主机控制器;最后,主机控制器101根据返回的信息,向用户应用程序返回所连接SSD的容量信息、健康信息等,主机控制器101恢复至“空闲”状态。
主机控制器101收到用户应用程序发送的“数据写入命令”后,等待用户应用程序向数据写入缓冲区中写入数据;当用户应用程序写入的数据足够一次写操作(如规定主机控制器最小操作的数据量是4KB)后,主机控制器101向SSD发送写入数据命令(WRITE命令);当SSD收到WRITE命令后,主动从主机控制器101的内存空间(如数据写入缓冲区)读取待写入的数据,将其写入到SSD存储单元中,完成写入操作后,向主机控制器101发送命令执行状态;当主机控制器101收到SSD发送的命令状态后,根据状态的返回值确定命令执行的状态,如果命令执行成功,则恢复至“空闲”状态,等待执行下一次命令,如果发生错误,则将错误信息反馈给用户应用程序。
主机控制器101收到用户应用程序发送的“数据读出命令”后,首先查询数据输出缓冲区的状态,当缓冲区空闲空间能够存储一次读命令返回的数据时,发送READ命令向SSD;SSD收到READ命令后,从存储单元中读取数据后,将其写入到主机控制器101的数据读出缓冲区中,同时向主机控制器发送命令执行状态;主机控制器101收到SSD发送的命令状态后,根据状态的返回值确定命令执行的状态,如果命令执行成功,则将读出的数据发送给用户应用程序读出总线,如果发生错误,则将错误信息反馈给用户。
请参考图8,其为NVMe四层结构和功能模块的对应关系。本发明实施例提供的嵌入式存储系统采用NVMe四层结构,包括:1)应用层,又称为用户命令操作层,该层包括用户应用程序和NVMe主机控制器;2)NVMe协议层;3)PCIe传输层;4)PCIe物理层。NVME协议是基于PCIe协议的应用层协议,其中应用层和协议层由主机控制器101实现,物理层使用FPGA中的PCIe控制器实现。
由图7可见,嵌入式存储系统1上电后,FPGA工作在PCI Express的RootPort模式下,嵌入式存储系统1首先需要进行PCIe初始化操作和NVMe初始化操作。
在一个示例中,可通过图9所示处理过程对PCIe链路进行初始化,完成物理链路和PCIe配置空间的配置,PCIe初始化过程可包括如下步骤:1)等待PCIe物理层链路训练;2)使能BusMaster功能;3)配置设备BAR地址;4)禁止MSI-X中断;5)使能RP Bridge-Enable;6)读取设备BAR控制,直至为配置值。
在另一个示例中,可通过图10所示处理过程对内存空间的NVMe寄存器进行配置。NVMe主机控制器初始化NVMe固态存储设备,可以是NVMe主机控制器对内存空间的NVMe寄存器进行配置,该内存空间作为控制缓冲区,而非数据缓冲区,是由PCIe协议规定的。具体实施时,配置过程可包括如下步骤:1)等待NVMe SSD复位完成;2)配置管理队列属性和内存基址;3)配置中断掩码寄存器;4)配置仲裁方式,内存页大小等;5)使能NVMe SSD CC,EN;6)等待控制其状态CSTS.RDY=1。
在对PCIe链路进行初始化,完成物理链路和PCIe配置空间的配置,以及,NVMe主机控制器对内存空间的NVMe寄存器进行配置之后,NVMe主机控制器和NVMe SSD完成了初始化工作,嵌入式存储系统进入工作状态,即图7所示的“空闲”状态。
如图11所示,输入输出接口模块103可包括数据输入接口1031,格式归一化处理模块1032,数据写入缓冲区1033,配置和数据导出模块1035,数据导出模块1036,数据读出缓冲区1037,寄存器配置模块1038,寄存器地址译码模块1038。
嵌入式存储系统1支持多种主流的相机数据接口,如CameraLink Full(包含Deca模式)、GigaE Vision、USB3 Vision、3G SDI、光纤等,且支持多种辅助数据接口输入,如北斗卫星定位系统、GPS定位系统、ARINC429航空总线接口、1553B航空总线接口等。
如图12所示,数据输入接口1031首先对外部的图像接口(如Cameralink、3G SDI、光纤等)进行协议解码,然后经过多通道对齐,将数据对齐到一个时钟域,然后写入数据缓冲区,最后数据编码模块根据缓冲区状态产生图像帧有效信号Frame_valid,行有效信号Line_valid和图像像素数据Pixels_data。
数据输入接口模块1031同时接收来自寄存器地址译码模块1039的配置指令,配置指令首先经过命令解析模块,然后由接口驱动模块根据解析后的命令,按照不同的接口协议(Uart、SPI、I2C等)发送配置命令到外部设备。
为了适应不同的数据输入接口1031,需要对所有的数据输入设备的数据格式进行归一化处理,从而使后端的数据写入和读处模块接口保持不变,有利于程序的升级维护,通过格式归一化处理模块1032获得的格式归一后的数据存储至数据写入缓冲区1033。
如图13所示,数据格式归一化格式定义如下。数据帧表示一个逻辑上完整的数据文件,例如一帧图像,一个视频、一个word文件等。由于固态硬盘在物理上是由很多的数据区块(Logical Block Address,简称LBA)组成,写入和读出操作的最小数据量由LBA确定,因此要将一个数据帧以LBA为单位进行分解,一个子帧最小应为一个LBA,最大值根据应用场景确定。
如图14所示,配置和数据导出模块1035,可实现主机控制器101配置命令的下发和固态存储设备所存数据的导出。主机控制器101下发的配置命令首先经过接收解码模块,解析成8比特的数据流,然后经过配置命令解析模块根据配置命令的编码规则解析出寄存器配置操作(寄存器读出或写入操作),发送给寄存器配置模块。寄存器写为无返回值操作,寄存器读需要将读取的寄存器值通过发送接口发送至上位机。如图15-17所示,其分别为寄存器配置帧的帧结构示意图,寄存器配置写的时序图,以及寄存器配置读的时序图。
图11中数据导出模块1036根据数据读出缓冲区1037的状态,将数据打包成归一化后的数据格式,并发送数据导出请求。
图14中发送仲裁模块,用于根据发送优先级对寄存器配置模块1038的发送请求和数据导出模块1036的发送请求进行仲裁。由于寄存器配置模块1038返回至上位机的数据包长度小,因此可优先响应寄存器配置模块1038的发送请求。
图7所示的存储读出控制模块104用于完成数据(如图像数据)的写入固态硬盘和读出固态硬盘的操作。如图18所示,待写入数据由数据写入缓冲区103传入,数据写入控制模块根据存储读出控制模块104中数据写入缓冲区的存储状态执行写入操作:先把数据存入存储读出控制模块104的数据写入缓冲区,然后向NVMe用户数据控制模块发送写请求。
当一个数据帧的数据全部写入后,NVMe用户数据控制模块将该完整帧的存储信息(如文件索引序号,存储首地址、帧长度)发送到文件系统管理模块105进行文件索引(写入文件索引)建立。
数据读出命令由寄存器地址译码模块1039传入,NVMe用户数据控制模块收到读出数据命令后,执行读操作,读出的数据首先存储在存储读出控制模块104的数据读出缓冲区中,然后由数据读出控制模块将该缓冲区中的数据,读出至用户应用程序的数据读出缓冲区1037。
辅助接口解码模块用于将外部辅助接口106输入的数据,按照数据传输协议(Uart、SPI、I2C等)进行解码,然后发送到文件系统管理模块105。
从上述实施例可以看出,本发明实施例提供的方案通过基于FPGA实现的主机控制器获取待执行的设备操作命令,其中主机控制器是基于非易失性存储器的传输规范NVMe的主机控制器,主机控制器将设备操作命令写入设备操作命令提交队列,并通知固态存储设备的设备控制器执行设备操作命令;设备控制器通过基于FPGA实现的PCIe控制器从提交队列获取并执行设备操作命令,并通过PCIe控制器将命令执行结果写入设备操作命令完成队列;主机控制器通过硬件查询方式实时检测设备操作命令完成队列项,在检测到完成队列项后,处理完成队列项包括的命令执行结果;这种处理方式,使得通过NVMe主机控制器和PCIe总线对固态存储设备中的数据进行存取处理,且通过硬件查询方式实时检测并处理命令处理结果;因此,可以有效简化数据存储过程,且提高数据存取速度。同时,本发明提供的方案使得主机控制器和PCIe控制器均基于单颗FPGA芯片实现,且可采用体积较小的M.2接口或BGA封装的NVMe固态存储设备;因此,可以有效节省电路板面积,降低嵌入式存储系统的体积。
在上述的实施例中,提供了一种嵌入式存储系统,与之相对应的,本申请还提供一种数据存取控制方法。该方法是与上述系统的实施例相对应。
下面结合图19,对本发明实施例的数据存取控制方法进行详细描述。
在1901部分,基于可编程逻辑门阵列FPGA实现的主机控制器获取待执行的设备操作命令。
所述主机控制器支持NVMe协议,采用大规模现场可编程门阵列FPGA芯片作为实现平台,用于实现数据的存储和读取。
现场可编程门阵列是在PAL、GAL、CPLD等可编程逻辑器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了全定制电路的不足,又克服了原有可编程逻辑器件门电路数有限的缺点。
非易失性内存主机控制器界面规范(Non-Volatile Memory Host ControllerInterface Specification,NVMe、NVM Express或NVMHCI)是与AHCI类似的、基于设备逻辑界面的总线传输协议规范,主要用于通过PCIe总线与电脑连接的非易失性内存设备(如采用闪存的固态硬盘驱动器)。NVMe规范主要是为基于闪存的存储设备提供一个低延时、内部并发化的原生界面规范,也为CPU、电脑平台及相关应用提供原生存储并发化的支持,令主机硬件和软件可以充分利用固态存储设备的并行化存储能力。相比机械硬盘驱动器时代的AHCI,NVMe/NVMHCI降低了I/O操作等待时间、提升同一时间内的操作数、更大容量的操作队列等。
所述设备操作命令包括但不限于设备识别命令、写数据命令和读数据命令。
在一个示例中,在FPGA芯片中不仅实现了NVMe主机控制器,还实现了图5所示的存储读出控制模块104,该存储读出控制模块104包括图18所示的数据写入控制模块和数据写入缓冲区。数据写入处理过程涉及以用户应用程序为执行主体的向图18所示的数据写入缓冲区写入数据的过程、及以主机控制器为执行主体的将图18所示的数据写入缓冲区数据写入固态存储设备的过程。其中以主机控制器为执行主体的数据写入处理过程可包括图19所示的步骤,其中主机控制器获取的待执行的设备操作命令为写数据命令,获取写数据命令的步骤可采用如下方式实现:在主机控制器确定图18所示的数据写入缓冲区的数据量达到第一预设阈值时,根据写入数据的LBA起始地址生成写数据命令。
下面结合图20,其为写入数据总线接口时序描述图,对以用户应用程序为执行主体的数据写入处理过程进行详细说明。以用户应用程序为执行主体的处理过程可包括如下步骤:1)用户应用程序向基于FPGA实现的数据写入控制模块发送帧起始脉冲信号,向数据写入控制模块请求写入新的数据帧,同时发送数据写入的LBA起始地址;2)数据存取操作是以子帧为单位进行处理的过程,用户应用程序在准备向硬盘写入各个子帧时,首先查询数据写入缓冲区的状态,该状态可以是空、满或缓冲区空间计数,如果缓冲区有足够的空间存储向硬盘写入的当前子帧,则转入第3步,否则继续等待,直到缓冲区状态满足当前写入操作的需求;3)用户应用程序向数据写入缓冲区同步写入当前子帧的数据有效指示和数据;4)如果一帧数据发送完毕,则转入第5步,否则转入第2步;5)用户应用程序向数据写入控制模块发送数据帧结束信号。在数据写入控制模块接收到数据帧结束信号后,存储读出控制模块104将当前数据帧的文件信息,存储到文件系统管理模块105的文件索引区。
在另一个示例中,存储读出控制模块104还包括数据读出控制模块和数据读出缓冲区。在FPGA芯片中还实现了输入输出接口103,该输入输出接口103包括数据写入缓冲区1033和数据读出缓冲区1137。数据读出处理过程涉及以主机控制器为执行主体的将固态存储设备中的数据读取到存储读出控制模块104中数据写入缓冲区的过程、和以用户应用程序为执行主体的将存储读出控制模块104中数据写入缓冲区中数据读取至数据读出缓冲区1137的过程。
下面结合图14,其为读出数据总线接口时序描述图,对以用户应用程序为执行主体的数据读出处理过程进行详细说明。以用户应用程序为执行主体的处理过程可包括如下步骤:1)用户应用程序向基于FPGA实现的数据读出控制模块发送读数据帧命令,同时发送数据读出的LBA起始地址和数据读取长度;2)当数据读出模块从固态硬盘读出数据后,则向用户应用程序发送帧起始脉冲信号,请求用户读出数据帧;3)数据读出操作是以子帧为单位进行处理的过程,数据读出控制模块在准备将子帧发送至数据读出缓冲区1037时,首先查询数据读出缓冲区1037的状态,该状态可以是空、满或缓冲区空间计数,如果缓冲区有足够的空间存储返回给用户应用程序的当前子帧,则转入第4步,否则继续等待,直到缓冲区状态满足当前读出操作的需求;4)数据读出控制模块同步发送当前子帧的数据有效指示和数据;5)如果一帧数据发送完毕,则转入第6步,否则转入第3步读出下一个子帧;6)数据读出控制模块向用户应用程序发送数据帧结束信号。
以主机控制器为执行主体的数据读出处理过程可包括图19所示的步骤,其中主机控制器获取的待执行的设备操作命令为读数据命令,获取读数据命令的步骤可采用如下方式实现:主机控制器获取基于FPGA实现的存储读出控制模块104中数据读出缓冲区的状态;主机控制器根据该数据读出缓冲区的状态、LBA起始地址和数据读取长度,生成一个或多个读数据命令,分批次从固态存储设备中读取数据。
在1902部分,所述主机控制器将所述设备操作命令写入设备操作命令提交队列。
NVMe协议中定义了多种队列,包括:1)管理提交队列(Admin Submission Queue,ASQ),用来存储主机发送管理类命令;2)管理完成队列(Admin Completion Queue,ACQ),用来存储设备返回的管理命令执行结果;3)I/O提交队列(IO Submission Queue,IOSQ),用来存储主机发送的数据读写命令;4)I/O完成队列(IO Completion Queue,IOCQ),用来存储设备返回的读写命令执行结果;5)提交队列门铃寄存器(SQTailDoorbell),用于主机通知设备有新的命令需要处理;6)完成队列门铃寄存器(CQHeadDoorbell),用于主机通知设备命令返回结果的处理结果。
队列(Queue)是一段内存区域,用来存储主机控制器下发的命令或固态存储设备返回的命令执行结果。队列包括基址(表示队列在Memory内的首地址),尾指针(新写入的命令或命令执行结果所在的地址)和头指针(即将被处理的命令或命令执行结果)。
提交队列(Submission Queue,SQ)和完成队列(Completion Queue,CQ),SQ和CQ队列位于NVMe主机控制器侧,可使用FPGA中内嵌BlockRAM实现,其中NVMe主机控制器通过SQ向设备(SSD)控制器发送操作命令(如配置SSD控制器、读数据、写数据、读取硬件信息等),SSD控制器通过CQ通知NVMe主机控制器命令的执行结果(如成功、错误及错误信息)。当SSD控制器执行完NVMe主机控制器发送的命令后,则将命令执行结果通过PCIe总线写入位于NVMe主机控制器侧的CQ完成队列中。SSD控制器发送CQ数据包的格式如下,称为完成队列项(Completion Queue Entry)。
NVMe主机控制器向设备操作命令提交队列SQ写入待执行的设备操作命令。所述提交队列可以是基于FPGA实现的提交队列,也可以是基于独立于FPGA芯片的内存设备实现。
在1903部分,所述主机控制器通过基于所述FPGA实现的高速串行计算机扩展总线PCIe控制器,通知NVMe固态存储设备的设备控制器执行所述设备操作命令。
NVMe主机控制器向SQ写入待执行的NVMe命令后,就可以进入1903部分,将新的SQ队列尾指针写入SQTB(Submission Queue Tail Doorbell,提交队列门铃寄存器),通知SSD硬盘控制器(设备控制器)有新的命令需要处理。设备控制器又称为存储器控制器,是SSD设备的FLASH控制器。
PCIe控制器又称为PCIe总线接口,用于连接NVMe固态存储设备,此接口为标准接口,可由FPGA厂商XILINX提供的AXI Memory Mapped To PCI Express IP核实现。在本实施例中,该IP核工作在Root Port模式下,实现PCI Express Root Complex功能。
在一个示例中,所述提交队列是基于FPGA实现的提交队列。1203部分具体可采用如下方式:主机控制器通过PCIe控制器直接将设备操作命令在提交队列中的存储地址写入提交队列门铃寄存器,设备控制器通过监听提交队列门铃寄存器的变化既可获取执行设备操作命令的通知。采用基于FPGA实现提交队列的处理方式,而非基于独立的内存设备实现提交队列,使得主机控制器可以直接对NVMe SSD进行读写操作,PCIe控制器无需执行存储地址转换的操作,即无需通过RC对FPGA和Memory之间的地址进行转换操作;因此,可以有效提升命令的执行速度,从而提升数据存取效率。
在1904部分,所述设备控制器通过所述PCIe控制器从所述提交队列获取所述设备操作命令。
设备控制器(SSD硬盘控制器)检测到SQTB地址更新后,主动从NVMe主机控制器的内存(SQ)中取回待执行的NVMe命令。
在一个示例中,1204部分可采用如下方式:PCIe控制器从所述提交队列中读取所述设备操作命令;将所述设备操作命令转换为AXI4格式的总线操作;执行所述AXI4格式的总线操作,使所述设备控制器获得所述设备操作命令。
在1905部分,所述设备控制器执行所述设备操作命令。
在一个示例中,设备操作命令为写数据命令,1905部分可采用如下方式实现:设备控制器通过PCIe控制器获取存储读出控制模块104中数据写入缓冲区中的数据;将获得的数据写入固态存储设备。
在另一个示例中,设备操作命令为读数据命令,1905部分可采用如下方式实现:设备控制器从固态存储设备读取数据;通过PCIe控制器将读取的数据发送至存储读出控制模块104中数据读出缓冲区。
在1906部分,所述设备控制器通过所述PCIe控制器将命令执行结果写入设备操作命令完成队列。
当SSD控制器执行完NVMe主机控制器发送的设备操作命令后,则将命令执行结果通过PCIe总线写入位于NVMe主机控制器侧的完成队列(Complete Queue,CQ)中。SSD控制器发送CQ数据包的格式如表1所示,称为完成队列项(Completion Queue Entry)。
表1、完成队列项格式
其中,DW2中的SQ Identifier指示了该队列项对应的提交队列项标识,即表明该队列项对应的设备操作命令(主机命令),Status Field指示了该条设备操作命令的执行结果(成功,错误及错误信息)。硬件中断检测模块实时的接收SSD控制器发送的完成队列项,并将该项与SQ中存储的主机命令实时比较。如果完成队列项表示对应的主机命令执行成功,则中断检测模块将SQ执行结果传递给SQ状态控制模块,如果完成项表示对应的主机命令执行不成功,则中断检测模块将SQ执行的错误结果和错误信息传递给异常处理模块。
在一个示例中,完成队列是基于所述FPGA实现的完成队列,提交队列和完成队列分别独立映射编址,由此使得设备控制器可并行处理不同队列的队列项;因此,可以有效提高命令处理速度。
在1907部分,主机控制器通过硬件查询方式实时检测设备操作命令完成队列项;若检测到完成队列项,则处理完成队列项包括的命令执行结果。
NVMe主机控制器检测到硬件中断后,立即处理对应的CQ,更新CQHB寄存器的头指针地址,通知设备控制器命令已经处理完毕。若检测到命令执行结果是成功,则根据设备操作命令更新提交队列。
本发明实施例提供的数据存取控制方法,在将命令处理结果写入CQ后,采用硬件查询方式实时处理该命令处理结果,而非通过设备控制器发送中断指示主机控制其处理命令处理结果;这种处理方式,使得当设备控制器写入CQ时,主机控制器即可检测到命令处理结果,对该结果进行实时处理。经过试验证明,该处理方式使得时间延时在纳秒级别(1s=1000000000ns),时间延时大大缩短,既提高了单位时间的命令处理数量,从而提高了命令操作效率。
从上述实施例可以看出,本发明实施例提供的方案通过基于FPGA实现的主机控制器获取待执行的设备操作命令,其中主机控制器是基于非易失性存储器的传输规范NVMe的主机控制器,主机控制器将设备操作命令写入设备操作命令提交队列,并通知固态存储设备的设备控制器执行设备操作命令;设备控制器通过基于FPGA实现的PCIe控制器从提交队列获取并执行设备操作命令,并通过PCIe控制器将命令执行结果写入设备操作命令完成队列;主机控制器通过硬件查询方式实时检测设备操作命令完成队列项,在检测到完成队列项后,处理完成队列项包括的命令执行结果;这种处理方式,使得通过NVMe主机控制器和PCIe总线对固态存储设备中的数据进行存取处理,且通过硬件查询方式实时检测并处理命令处理结果;因此,可以有效简化数据存储过程,且提高数据存取速度。
本发明实施例还提供的一种嵌入式设备,所述嵌入式设备包括上述实施例所述的嵌入式存储系统。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘solid state disk(SSD)等。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于数据存取控制方法及嵌入式设备的实施例而言,由于其基本相似于嵌入式操作系统实施例,所以描述的比较简单,相关之处参见嵌入式操作系统实施例中的说明即可。
以上所述的本发明实施方式并不构成对本发明保护范围的限定。
Claims (9)
1.一种数据存取控制方法,其特征在于,包括:
基于可编程逻辑门阵列FPGA实现的主机控制器获取待执行的设备操作命令,所述主机控制器是基于非易失性存储器的传输规范NVMe的主机控制器;
所述主机控制器将所述设备操作命令写入设备操作命令提交队列;
所述主机控制器通过基于所述可编程逻辑门阵列FPGA实现的高速串行计算机扩展总线标准PCIe控制器,通知NVMe固态存储设备的设备控制器执行所述设备操作命令;
所述设备控制器通过所述PCIe控制器从所述提交队列获取所述设备操作命令;
所述设备控制器执行所述设备操作命令;
所述设备控制器通过所述PCIe控制器将命令执行结果写入设备操作命令完成队列;
所述主机控制器通过硬件查询方式实时检测设备操作命令完成队列项;若检测到所述完成队列项,则处理所述完成队列项包括的命令执行结果;
其中,所述提交队列是基于所述可编程逻辑门阵列FPGA实现的提交队列;
所述主机控制器通知固态存储设备的设备控制器执行所述设备操作命令,包括:
所述主机控制器通过所述PCIe控制器,将所述设备操作命令在所述提交队列中的存储地址写入提交队列门铃寄存器;
所述设备控制器通过所述提交队列门铃寄存器获取执行所述设备操作命令的通知;
其中,所述设备操作命令包括写数据命令;所述数据存取控制方法还包括:
应用程序向基于所述可编程逻辑门阵列FPGA实现的数据写入控制模块发送帧起始脉冲信号和待写入数据帧的起始地址;
针对所述待写入数据帧的各个子帧,所述应用程序通过所述数据写入控制模块获取基于所述可编程逻辑门阵列FPGA实现的数据写入缓冲区的状态,并根据所述状态判断所述数据写入缓冲区的可用空间是否满足所述子帧的存储需求;若是,则所述应用程序将所述子帧的数据有效指示和数据同步写入至所述数据写入缓冲区;
基于所述可编程逻辑门阵列FPGA实现的主机控制器获取待执行的设备操作命令,包括:
在所述主机控制器确定所述数据写入缓冲区的数据量达到第一预设阈值时,根据所述起始地址生成所述写数据命令;
所述设备控制器执行所述设备操作命令,包括:
所述设备控制器通过所述PCIe控制器获取所述数据写入缓冲区中的数据;
将所述数据写入缓冲区中的数据写入所述固态存储设备;
所述方法还包括:
在将所述待写入数据帧写入至所述固态存储设备后,所述应用程序向所述数据写入控制模块发送数据帧结束信号;
所述数据写入控制模块通过基于所述可编程逻辑门阵列FPGA实现的应用程序数据控制模块,将所述待写入数据帧的文件信息存储到基于所述可编程逻辑门阵列FPGA实现的文件系统管理模块的文件索引区;
其中,所述设备操作命令包括读数据命令;所述数据存取控制方法还包括:
应用程序向基于所述可编程逻辑门阵列FPGA实现的数据读出控制模块发送读数据帧命令,所述读数据帧命令包括LBA起始地址和数据读取长度;
所述数据读出控制模块将所述读数据帧命令转发至所述主机控制器;
基于所述可编程逻辑门阵列FPGA实现的主机控制器获取待执行的设备操作命令,包括:
所述主机控制器获取基于所述可编程逻辑门阵列FPGA实现的数据读出缓冲区的状态;
所述主机控制器根据所述数据读出缓冲区的状态、所述LBA起始地址和所述数据读取长度,生成一个或多个所述读数据命令;
所述设备控制器执行所述设备操作命令,包括:
所述设备控制器从所述固态存储设备读取数据;
通过所述PCIe控制器将读取的数据发送至所述数据读出缓冲区;
所述处理所述命令执行结果,包括:
所述数据读出控制模块向所述应用程序发送帧起始脉冲信号;
针对所述数据读出缓冲区中已读取数据的各个子帧,所述数据读出控制模块获取基于所述可编程逻辑门阵列FPGA实现的应用程序缓冲区的状态,并根据所述应用程序缓冲区的状态判断所述应用程序缓冲区的可用空间是否满足所述子帧的存储需求;若是,则所述数据读出控制模块将所述子帧的数据有效指示和数据同步写入至所述应用程序缓冲区;
所述应用程序读取所述应用程序缓冲区中的数据;
在将所有所述子帧的数据写入至所述应用程序缓冲区后,所述数据读出控制模块向所述应用程序发送数据帧结束信号。
2.根据权利要求1所述的方法,其特征在于,所述完成队列是基于所述可编程逻辑门阵列FPGA实现的完成队列,所述提交队列和所述完成队列分别独立映射编址,所述设备控制器并行处理所述提交队列包括的多个设备操作命令。
3.根据权利要求1所述的方法,其特征在于,所述处理所述命令执行结果,包括:
若所述命令执行结果是成功,则根据所述设备操作命令更新所述提交队列。
4.根据权利要求1所述的方法,其特征在于,所述设备控制器通过所述PCIe控制器从所述提交队列获取所述设备操作命令,包括:
所述PCIe控制器从所述提交队列中读取所述设备操作命令;
将所述设备操作命令转换为AXI4格式的总线操作;
执行所述AXI4格式的总线操作,使所述设备控制器获得所述设备操作命令。
5.根据权利要求1所述的方法,其特征在于,还包括:
初始化所述PCIe控制器和所述主机控制器。
6.一种嵌入式存储系统,其特征在于,包括:
可编程逻辑门阵列FPGA,至少一个支持非易失性内存主机控制器界面规范NVMe协议的固态存储设备,以及,用于连接所述可编程逻辑门阵列FPGA和所述固态存储设备的至少一个高速串行计算机扩展总线标准PCIe总线;所述可编程逻辑门阵列FPGA配置为包括至少一个NVMe主机控制器、及至少一个PCIe控制器;所述固态存储设备包括设备控制器;
其中,提交队列是基于所述可编程逻辑门阵列FPGA实现的提交队列,所述主机控制器,用于获取待执行的设备操作命令,并将获得的所述设备操作命令写入设备操作命令提交队列,并通过所述PCIe控制器,将所述设备操作命令在所述提交队列中的存储地址写入提交队列门铃寄存器;
所述设备控制器通过所述提交队列门铃寄存器获取执行所述设备操作命令的通知;
所述设备控制器,用于通过所述PCIe控制器从所述提交队列获取所述设备操作命令,并执行获得的所述设备操作命令,并通过所述PCIe控制器将命令执行结果写入设备操作命令完成队列;
其中,所述设备控制器通过所述提交队列门铃寄存器获取执行所述设备操作命令的通知;
所述主机控制器,还用于通过硬件查询方式实时检测设备操作命令完成队列项;若检测到所述完成队列项,则处理所述完成队列项包括的命令执行结果;
其中,所述设备操作命令包括写数据命令;所述写数据命令为:
应用程序向基于所述可编程逻辑门阵列FPGA实现的数据写入控制模块发送帧起始脉冲信号和待写入数据帧的起始地址;
针对所述待写入数据帧的各个子帧,所述应用程序通过所述数据写入控制模块获取基于所述可编程逻辑门阵列FPGA实现的数据写入缓冲区的状态,并根据所述状态判断所述数据写入缓冲区的可用空间是否满足所述子帧的存储需求;若是,则所述应用程序将所述子帧的数据有效指示和数据同步写入至所述数据写入缓冲区;
基于可编程逻辑门阵列FPGA实现的主机控制器获取待执行的设备操作命令,包括:
在所述主机控制器确定所述数据写入缓冲区的数据量达到第一预设阈值时,根据所述起始地址生成所述写数据命令;
所述设备控制器执行所述设备操作命令,包括:
所述设备控制器通过所述PCIe控制器获取所述数据写入缓冲区中的数据;
将所述数据写入缓冲区中的数据写入所述固态存储设备;
其中,在将所述待写入数据帧写入至所述固态存储设备后,所述应用程序向所述数据写入控制模块发送数据帧结束信号;
所述数据写入控制模块通过基于所述可编程逻辑门阵列FPGA实现的应用程序数据控制模块,将所述待写入数据帧的文件信息存储到基于所述可编程逻辑门阵列FPGA实现的文件系统管理模块的文件索引区;
其中,所述设备操作命令包括读数据命令;所述读数据命令为:
应用程序向基于所述可编程逻辑门阵列FPGA实现的数据读出控制模块发送读数据帧命令,所述读数据帧命令包括LBA起始地址和数据读取长度;
所述数据读出控制模块将所述读数据帧命令转发至所述主机控制器;
基于可编程逻辑门阵列FPGA实现的主机控制器获取待执行的设备操作命令,包括:
所述主机控制器获取基于所述可编程逻辑门阵列FPGA实现的数据读出缓冲区的状态;
所述主机控制器根据所述数据读出缓冲区的状态、所述LBA起始地址和所述数据读取长度,生成一个或多个所述读数据命令;
所述设备控制器执行所述设备操作命令,包括:
所述设备控制器从所述固态存储设备读取数据;
通过所述PCIe控制器将读取的数据发送至所述数据读出缓冲区;
所述处理所述命令执行结果,包括:
所述数据读出控制模块向所述应用程序发送帧起始脉冲信号;
针对所述数据读出缓冲区中已读取数据的各个子帧,所述数据读出控制模块获取基于所述可编程逻辑门阵列FPGA实现的应用程序缓冲区的状态,并根据所述应用程序缓冲区的状态判断所述应用程序缓冲区的可用空间是否满足所述子帧的存储需求;若是,则所述数据读出控制模块将所述子帧的数据有效指示和数据同步写入至所述应用程序缓冲区;
所述应用程序读取所述应用程序缓冲区中的数据;
在将所有所述子帧的数据写入至所述应用程序缓冲区后,所述数据读出控制模块向所述应用程序发送数据帧结束信号。
7.根据权利要求6所述的嵌入式存储系统,其特征在于,所述至少一个固态存储设备为两个固态存储设备,所述系统还包括FPGA配置固定存储设备模块;
所述FPGA配置固定存储设备模块,用于将所述两个固态存储设备设置为RAID1工作模式。
8.根据权利要求6所述的嵌入式存储系统,其特征在于,所述至少一个固态存储设备为至少两个固态存储设备,所述系统还包括FPGA配置固定存储设备模块;
所述FPGA配置固定存储设备模块,用于将所述至少两个固态存储设备设置为RAID0工作模式。
9.一种嵌入式设备,其特征在于,包括:上述权利要求6-8任一项所述的嵌入式存储系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011119660.3A CN112256601B (zh) | 2020-10-19 | 2020-10-19 | 数据存取控制方法、嵌入式存储系统及嵌入式设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011119660.3A CN112256601B (zh) | 2020-10-19 | 2020-10-19 | 数据存取控制方法、嵌入式存储系统及嵌入式设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112256601A CN112256601A (zh) | 2021-01-22 |
CN112256601B true CN112256601B (zh) | 2023-04-21 |
Family
ID=74243861
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011119660.3A Active CN112256601B (zh) | 2020-10-19 | 2020-10-19 | 数据存取控制方法、嵌入式存储系统及嵌入式设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112256601B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905517B (zh) * | 2021-03-09 | 2022-05-20 | 明峰医疗系统股份有限公司 | 一种基于fpga的可变包长度数据采集方法 |
CN113076138B (zh) * | 2021-04-27 | 2022-12-09 | 湖南国科微电子股份有限公司 | 一种NVMe命令处理方法、设备及介质 |
CN113434090B (zh) * | 2021-06-30 | 2023-03-28 | 同济大学 | 一种用于高速视频测量的海量数据异步存储方法 |
CN113539351A (zh) * | 2021-07-12 | 2021-10-22 | 深圳忆联信息系统有限公司 | 固态硬盘控制器identify测试方法、装置及计算机设备 |
CN113504877A (zh) * | 2021-07-15 | 2021-10-15 | 中国兵器装备集团自动化研究所有限公司 | 一种基于ft6678控制器的nvme硬盘驱动方法 |
CN113703843B (zh) * | 2021-09-24 | 2024-04-12 | 中国人民解放军军事科学院军事医学研究院 | 一种寄存器数据处理方法、装置及存储器 |
CN115657961B (zh) * | 2022-11-11 | 2023-03-17 | 苏州浪潮智能科技有限公司 | Raid磁盘阵列管理方法、系统、电子设备及存储介质 |
CN115858018B (zh) * | 2023-02-27 | 2023-05-16 | 珠海星云智联科技有限公司 | 一种嵌入式系统的自适应寄存器更新方法、设备及介质 |
CN116909484A (zh) * | 2023-08-02 | 2023-10-20 | 中科驭数(北京)科技有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014063497A (ja) * | 2012-09-21 | 2014-04-10 | Plx Technology Inc | 論理装置の機能を有するpciエクスプレススイッチ |
US9304690B2 (en) * | 2014-05-07 | 2016-04-05 | HGST Netherlands B.V. | System and method for peer-to-peer PCIe storage transfers |
CN104219171A (zh) * | 2014-09-17 | 2014-12-17 | 成都开能科技发展有限公司 | 一种采用查询方式实现ap系统数据收发的方法 |
US20180032249A1 (en) * | 2016-07-26 | 2018-02-01 | Microsoft Technology Licensing, Llc | Hardware to make remote storage access appear as local in a virtualized environment |
KR102631351B1 (ko) * | 2016-10-07 | 2024-01-31 | 삼성전자주식회사 | 피어-투 피어 통신을 수행할 수 있는 저장 장치와 이를 포함하는 데이터 저장 시스템 |
CN107992436B (zh) * | 2016-10-26 | 2021-04-09 | 华为技术有限公司 | 一种NVMe数据读写方法及NVMe设备 |
US10452278B2 (en) * | 2017-03-24 | 2019-10-22 | Western Digital Technologies, Inc. | System and method for adaptive early completion posting using controller memory buffer |
US10466904B2 (en) * | 2017-03-24 | 2019-11-05 | Western Digital Technologies, Inc. | System and method for processing and arbitrating submission and completion queues |
US10509569B2 (en) * | 2017-03-24 | 2019-12-17 | Western Digital Technologies, Inc. | System and method for adaptive command fetch aggregation |
US10387081B2 (en) * | 2017-03-24 | 2019-08-20 | Western Digital Technologies, Inc. | System and method for processing and arbitrating submission and completion queues |
WO2018175059A1 (en) * | 2017-03-24 | 2018-09-27 | Western Digital Technologies, Inc. | System and method for speculative execution of commands using the controller memory buffer |
CA3062336C (en) * | 2017-05-03 | 2022-07-12 | Eidetic Communications Inc. | Apparatus and method for controlling data acceleration |
KR102493964B1 (ko) * | 2017-12-18 | 2023-02-01 | 삼성전자주식회사 | 스토리지 컨트롤러, 그것을 포함하는 스토리지 장치, 및 스토리지 컨트롤러의 동작 방법 |
US10929309B2 (en) * | 2017-12-19 | 2021-02-23 | Western Digital Technologies, Inc. | Direct host access to storage device memory space |
CN109983449B (zh) * | 2018-06-30 | 2022-03-29 | 华为技术有限公司 | 数据处理的方法和存储系统 |
KR20200087052A (ko) * | 2019-01-10 | 2020-07-20 | 삼성전자주식회사 | NVMe-SSD 저장 장치 및 NVMe-oF 호스트 유닛 사이의 통신 관리 시스템 및 방법 |
CN110109626B (zh) * | 2019-05-20 | 2022-01-25 | 哈尔滨工业大学 | 一种基于FPGA的NVMe SSD命令处理方法 |
CN110362274A (zh) * | 2019-06-28 | 2019-10-22 | 苏州浪潮智能科技有限公司 | 一种NVMe控制器、网络化存储设备及系统 |
CN111221476B (zh) * | 2020-01-08 | 2022-03-29 | 深圳忆联信息系统有限公司 | 提升ssd性能的前端命令处理方法、装置、计算机设备及存储介质 |
-
2020
- 2020-10-19 CN CN202011119660.3A patent/CN112256601B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112256601A (zh) | 2021-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112256601B (zh) | 数据存取控制方法、嵌入式存储系统及嵌入式设备 | |
JP4799417B2 (ja) | ホストコントローラ | |
KR101988260B1 (ko) | 임베디드 멀티미디어 카드, 및 이의 동작 방법 | |
KR101744465B1 (ko) | 데이터를 저장하기 위한 방법 및 장치 | |
US8990462B2 (en) | Storage device, computing system including the same and data transferring method thereof | |
CN103034454B (zh) | 柔性闪存命令 | |
CN103180816B (zh) | Usb至sata的高速桥接器 | |
US8099529B1 (en) | Software based native command queuing utilizing direct memory access transfer context information | |
CN108268414B (zh) | 基于spi模式的sd卡驱动器及其控制方法 | |
CN111931442B (zh) | Fpga内嵌flash控制器及电子装置 | |
CN111190842B (zh) | 直接存储器访问、处理器、电子设备和数据搬移方法 | |
CN115495389B (zh) | 存储控制器、计算存储装置以及计算存储装置的操作方法 | |
US7725621B2 (en) | Semiconductor device and data transfer method | |
JP5896328B2 (ja) | 高性能ahciインターフェイス | |
US10853255B2 (en) | Apparatus and method of optimizing memory transactions to persistent memory using an architectural data mover | |
US8230134B2 (en) | Fast path SCSI IO | |
TWI797022B (zh) | 儲存控制器、計算儲存裝置以及計算儲存裝置的操作方法 | |
CN115952116A (zh) | 一种基于FPGA的嵌入式NVMe固态硬盘存储系统 | |
CN116486868A (zh) | 计算高速链路(CXL)上的高速非易失性存储器(NVMe) | |
CN115454902A (zh) | 一种基于pcie接口的nvme通信系统及方法 | |
CN114328342B (zh) | 一种用于PCIe异构加速卡的新型程控配置方法 | |
US7024523B1 (en) | Host adapter integrated data FIFO and data cache and method for improved host adapter sourcing latency | |
WO2009115058A1 (zh) | 提供闪存存储功能的主板及其存储方法 | |
CN112732176B (zh) | 基于fpga的ssd访问方法及装置、存储系统及存储介质 | |
KR102656104B1 (ko) | 비휘발성 메모리 제어 장치 및 비휘발성 메모리 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230331 Address after: 215100 No.6, Shuangqi Road, Wuzhong Economic Development Zone, Suzhou City, Jiangsu Province Applicant after: Suzhou lingyunguang Industrial Intelligent Technology Co.,Ltd. Applicant after: Lingyunguang Technology Co.,Ltd. Address before: 100094 701, 7 floor, 7 building, 13 Cui Hunan Ring Road, Haidian District, Beijing. Applicant before: Lingyunguang Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |