ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一种NVMe 主机控制器 (Host Controller,HC) IP 应用及介绍

2021-06-13 15:59:14  阅读:555  来源: 互联网

标签:NVMe 总线 Controller 传输 Host 寄存器 SSD AXI


NVMe HC IP 需求

目前常用的SATA控制器IP无法满足 GBps 以上高速存储性能方面的指标要求。NVMe控制器能够加速NVMe指令管理过程,大幅提高数据的读写传输速率,有效降低传输延迟。采用NVMe控制器成为目前高速存储的迫切需求。
目前,NVMe控制器输入输出端口主要基于AMBA AXI4总线接口协议,使其能够与FPGA整体系统设计中的其余模块高效互连,提高开发效率并增强可移植性。
通过分析NVMe指令控制流程中数据的交互需求,NVMe控制器输入输出端口可同时使用AXI、AXI-Lite以及AXI-Stream三种总线接口,以针对不同场景合理使用三种总线,充分利用各自的特性,实现性能和资源消耗的平衡。
除上述要求之外,所开发的NVMe控制器具有以下几个主要特点:
(1)SSD的管理控制符合 NVMe 1.3d 协议规范;
(2)实现读、写、识别以及刷新等在内的多种NVMe指令;
(3)支持多队列的并行管理;
(4)支持Round-Robin仲裁机制;
(5)采用完全可综合的Verilog代码实现;

一种应用NVMe HC IP 的系统设计

为便于说明本NVMeHC IP 应用,给出如图1所示系统整体设计方案,但它不局限于zynq系列,实际上也可用于支持AXI4的K及V系列。图1主要包括Zynq处理器系统(Processing System,PS)、NVMe控制器、DMA/Bridge Subsystem for PCI Express IP核(XDMA)、用户逻辑以及AXI Interconnect等模块。其中,为了简化框图而省略模块间的AXI Interconnect总线互连模块。

在这里插入图片描述
Zynq处理器系统模块中包含的硬核ARM Cortex-A53应用CPU将负责执行裸机应用程序、配置NVMe控制器寄存器等工作,并且本课题所使用的DDR存储器件也包含在处理器系统中。
1)NVMeHC IP作为整体系统中的核心模块,实现寄存器组定义、指令组装、数据流转换、指令组装、多队列管理、Round-Robin仲裁管理、门铃信息控制、指令发送和完成信息接收以及错误检测等关键功能。将原本由CPU执行的软件驱动程序迁移至NVMe控制器中,从而完全通过硬件逻辑的方式实现对外接SSD进行读写等指令操作的控制流程,提升传输性能。
2)XDMA IP核实现基于PCIe总线的链路连接,并根据性能指标要求配置链路速率参数为PCIe 3.0 X4。同时,将其工作模式配置为Bridge模式,实现FPGA作为Host端,SSD作为Endpoint端的PCIe总线连接关系。除此之外,还对PCIe BAR空间与AXI BAR空间之间虚拟地址的相互转换关系进行配置,使Host端访问SSD中PCIe BAR空间的请求从AXI总线转换到PCIe总线上,或是将Endpoint端访问Host的请求从PCIe总线转换为AXI的总线请求。
3)用户逻辑模块作为本课题系统设计中的功能验证模块。用户逻辑模块将产生测试用的数据流以模拟实际输入的图像数据,并将产生的测试数据直接通过AXI-Stream接口传入NVMe控制器;或是接收从SSD端返回的读数据流,并对读数据流进行检查以验证正确性。
4)AXI Interconnect模块作为FPGA整体系统设计中不同模块间AXI总线接口的互连结构,可有效的组建AXI总线网络,这里不独立列出。AXI Interconnect可灵活应用于一主多从、多主一从及多主多从三种模式的AXI总线互连需求,并能够有效解决总线竞争或是性能面积取舍问题等。

AXI总线介绍

AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA3.0中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。AMBA4.0将其修改升级为AXI4.0。 AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-stream。AXI4.0-lite是AXI的简化版本, AXI4.0-stream主要用在FPGA进行以数据为主导的大量数据的传输应用。

AXI读写架构

AXI协议是基于burst的传输,并且定义了以下5个独立的传输通道:读地址通道、读数据通道、写地址通道、写数据通道、写响应通道。地址通道携带控制消息,用于描述被传输的数据属性;数据传输使用写通道来实现master到slave的传输,slave使用写响应通道来完成一次写传输;读通道用来实现数据从slave到master的传输。AXI读写架构如图2、图3所示:
在这里插入图片描述
在这里插入图片描述
AXI使用基于VALID/READY的握手机制数据传输协议,传输源端使用VALID表明地址/控制信号、数据是有效的,目的端使用READY表明自己能够接受信息。
读/写地址通道:读、写传输每个都有自己的地址通道,对应的地址通道承载着对应传输的地址控制信息。
读数据通道:读数据通道承载着读数据和读响应信号包括数据总线(8/16/32/64/128/256/512/1024 bit)和指示读传输完成的读响应信号。
写数据通道:写数据通道的数据信息被认为是缓冲(buffered),master无需等待slave对上次写传输的确认即可发起一次新的写传输。写通道包括数据总线(8/16…1024 bit)和字节线(用于指示8 bit 数据信号的有效性)。
写响应通道:slave使用写响应通道对写传输进行响应。所有的写传输需要写响应通道的完成信号。

AXI握手机制

5个传输通道均使用VALID/READY信号对传输过程的地址、数据、控制信号进行握手。使用双向握手机制,传输仅仅发生在VALID、READY同时有效的时候。
VALID/READY 分为以下三种情况:
1)VALID信号等待READY信号的到达,直到T3时刻完成传输,如图4所示。
在这里插入图片描述
2)READY信号先于VALID信号到达时,进行等待,直到T3时刻VALID信号与READY信号同时有效,完成一次传输,如图5所示。
在这里插入图片描述
3) VALID信号与READY信号同时到达,则T2时刻完成一次传输,如图6所示。
在这里插入图片描述

NVMe 主机控制器(HC) IP 说明

NVMe 控制器接口说明

为便于用户使用,本IP接口定义简洁,如图7所示。该模块接口包括S_AXI_Lite、M_AXI_SSD、S_AXI_SSD、done和error接口。

在这里插入图片描述
NVMeHC 模块接口基于AMBA总线协议,可实现与FPGA内其余模块之间高效交互。用户指令从S_AXI_Lite接口传入,指令执行完成后done接口输出高电平,同时如果指令执行过程中出现错误,error接口输出高电平。
各接口定义如下:
1)S_AXI_Lite接口
S_AXI_Lite接口为AMBA总线协议规范的AXI Lite Slave接口。用户通过S_AXI_Lite接口进行读写NVMeHC内部寄存器,以实现相应读写等指令。
表1 给出 S_AXI_Lite 接口定义。
在这里插入图片描述
S_AXI_Lite接口时序如图8:
在这里插入图片描述
当AWVALID与AWREADY同时有效时,完成一次AWADDR传输;当WVALID与WREADY信号同时有效时,完成一次WDATA的传输。

2)M_AXI_SSD接口
NVMeHC IP通过M_AXI_SSD接口发送指令更新SSD端的相应门铃寄存器。此接口符合AMBA AXI Full总线协议规范。

3)S_AXI_SSD接口
NVMeHC IP通过S_AXI_SSD接口向SSD端发送相应命令、接收从SSD端返回的完成信息。此接口符合AMBA AXI Full总线协议规范。

4)done接口
NVMeHC IP检查完成所有命令的完成信息后,置done信号为高电平。

5)error接口
当NVMeHC IP检查SSD端返回的完成信息中发现错误时,置error信号为高电平。

寄存器定义及引脚约束

1)寄存器定义
NVMeHC模块内部有4个寄存器,用户通过S_AXI_Lite接口配置对应寄存器,便可控制模块对SSD相应的读写操作。用户需要配置的寄存器如表2:
在这里插入图片描述

2)引脚约束
时钟频率:250MHZ
复位方式:低电平有效

操作流程

1)系统上电后,进入初始化配置阶段。分为2阶段:
(1)PCIe初始化
通过XDMA standalone driver对PCIe进行初始化操作。完成BAR0空间映射,链路状态检测,直至PCIe进行L0状态,且PCIeLinkUp信号有效。
(2)NVMe寄存器配置
PCIe初始化完成后,NVMeHC模块对SSD端NVMe寄存器初始化配置,初始化配置完成后便可对NVMe SSD进行读写等操作。

2)数据传输
每发起一次数据的读写传输,用户需配置NVMeHC相应寄存器以发起传输。配置寄存器顺序为:
(1)首先需配置源/目的地址寄存器、SLBA寄存器、数据量寄存器;
(2)最后配置指令寄存器,发起读、写、识别等操作;
*(例如:需要将FPGA DDR内起始源地址为0x60000000,数据大小为64MB的数据写入SSD端SLBA为0x0的目的地址。则操作过程为首先配置源/目的地址寄存器为0x60000000、SLBA寄存器为0x0、数据量寄存器为0x20000(64MB/512B = 0x20000),最后配置指令寄存器为写操作便可发起数据传输。)
当配置完成指令寄存器后,NVMeHC模块便根据用户配置的相关信息,通过XDMA模块控制SSD进行相应读写等操作。检查完成所有的完成信息后,通过done / error返回相应信号。

标签:NVMe,总线,Controller,传输,Host,寄存器,SSD,AXI
来源: https://blog.csdn.net/tiantianuser/article/details/117869681

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有