为什么开发NVMe HC IP

目前常用的SATA控制器IP无法满足 GBps 以上高速存储性能方面的指标要求。NVMe控制器能够加速NVMe指令管理过程,大幅提高数据的读写传输速率,有效降低传输延迟。采用NVMe控制器成为目前高速存储的迫切需求。

NVMe HC IP 解决什么?

目前,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 host IP 效果见 视频demo (B站 搜 NVMe IP): https://www.bilibili.com/video/BV1dC4y1H7nt/?spm_id_from=333.337.search-card.all.click

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

  1. 怎样实现linux的网络通信协议是,一种基于Linux系统的TCP/IP协议栈的实现

    一种基于Linux系统的TCP/IP协议栈的实现 本文分析了Linux内核TCP/IP协议栈的实现,给出了Linux网络数据处理流程,探讨了Linux的I (本文共3页) 阅读全文>> 介 ...

  2. php获取ip几种方法区别,php获取客户端IP地址的几种方法

    php获取客户端IP地址的几种方法 阅读php获取客户端IP地址的几种方法, 1:来看看代码: echo "(1)浏览当前页面的用户的 IP 地址为:"; echo $_SERVE ...

  3. 关于kernel2.6中USB host controller driver 的问题

    2.6在s3c2410上usb host不工作的直接结果就是提示110错误:  usb 1-1: device descriptor read/64, error -110 追踪错误代码,我们来看看能 ...

  4. Linux驱动——mmc host controller(九)

    Linux驱动--mmc host controller(九) 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0 文章目录 Linux驱动--mmc ...

  5. 一种NVMe SSD友好的数据存储系统设计

    闪存介质的大规模使用给传统存储系统的设计带来了强烈的冲击,传统存储系统的很多设计理念不再适用于闪存存储系统.传统存储在设计过程中紧紧围绕磁盘抖动问题,所以在数据布局方面会适应磁盘的顺序读写特征.在设计 ...

  6. Warning: Permanently added the RSA host key for IP address '13.229.188.59' to the list of known host

    前言 最近在学习GIt,安装了Git bash,过程中遇到了各种问题,写下帖子,方便大家解决问题,也方便自己回顾 问题描述 Warning: Permanently added the RSA hos ...

  7. ubuntu16.04卡在了’SMBus Host Controller not enabled‘

    我在VMware安装完这个系统后进入发现卡在了'SMBus Host Controller not enabled'里,后来查过网络发现,需要禁止i2c_piix4驱动的加载,禁止需要编辑blackl ...

  8. linux shell 域名 ip,Shell脚本一种检查Linux中域名和IP地址所有权信息、检查多个域名的到期日期工具...

    Shell脚本一种检查Linux中域名和IP地址所有权信息.检查多个域名的到期日期工具 jwhois是一个命令行实用程序,可从whois服务器(whois数据库)中获取有关域名所有权的信息. Whoi ...

  9. Host 'controller' is not mapped to any cell

    问题: Host 'controller' is not mapped to any cell 解决: 执行:nova-manage cell_v2 simple_cell_setup 再次检查: 转 ...

最新文章

  1. 自制机械臂,能给葡萄缝针的那种,成本1万块,网友:能把脑子开源一下?
  2. SLAM工具|GDB调试从入门到精通
  3. Blend学习资料总结
  4. C++语言基础(15)-友元函数和友元类
  5. BugkuCTF-reverse:入门逆向
  6. ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)”的方法...
  7. Android实现计时与倒计时(限时抢购)的几种方法
  8. 仅为代码实际运行资源付费 解构国内首个函数计算
  9. 计算机视觉实战(六)边缘检测
  10. 看看你的密码有多安全?
  11. java servlet的包下载_javax.servlet jar包下载_javax.servlet jar包官方下载-太平洋下载中心...
  12. mysql外码内码定义_Windows | 简体中文编码——输入码(外码)、区位码、国标码(交换码)、机内码(内码)、输出码(字形码)区别及联系...
  13. 基本存款账户编号怎么查_基本存款账户编号是行号吗?
  14. specification java_使用JPA实现Specification规范模式 -解道Jdon
  15. 信息系统安全等级保护(简称“等保”)
  16. 强化学习七日打卡营终极复现之flappy bird
  17. flacs 安装教程_002.Nginx安装及启动
  18. UML在md中的写法与示意
  19. PS 学习笔记 03-移动工具图层概念
  20. 百度升级烽火算法2.0,建议网站https改造打击网站劫持

热门文章

  1. Qt+SQLite3仿百度登录
  2. 上门私教上门瑜伽上门推拿等为什么是好项目?上门小程序APP源码系统开发
  3. 基于SVD++隐语义模型的信任网络推荐算法
  4. npm报错:Error: EPERM: operation not permitted, uv_cwd
  5. nuxt.js踩坑:构建静态页面时报错:nuxt.config.js is not in cwd
  6. 赛狐ERP|亚马逊产品缺货怎么办?该如何补救?
  7. 杰理之带 32K 时钟方案,关机后时钟不走问题【篇】
  8. 怎样建立产品体系?(四)- 产品组合管理
  9. spark面试题整理
  10. python取余什么意思_python中取余