三、实战篇-NVME SSD控制之FPGA实现(一)

本章节讲述如何使用FPGA(纯verilog语言)实现NVME SSD硬盘的读写控制。

参考:

FPGA控制NVME开发流程-CSDN博客

一、理论篇-NVME协议学习笔记-CSDN博客

二、实战篇-NVME SSD控制之ZYNQ实现(一)-CSDN博客

二、实战篇-NVME SSD控制之ZYNQ实现(二)-CSDN博客

本实验主要基于AXI Memory Mapped to PCI Express IP进行设计。使用的FPGA芯片为XILINX的xc7z045ffg900,xc7z045ffg900芯片的PCIE接口为PCIE 2.0,速率为5GT/S。采用纯Verilog代码实现,不使用ARM端任何功能,所以FPGA芯片用K7,V7这些都可以替代,只要芯片包含PCIE接口就行。

  • 新建工程

先新建一个工程,选择FPGA芯片型号,本实验使用米联客开发板,所以这里FPGA选择xc7z045ffg900。

  • 新建BD工程
  • 在BD工程中添加IP
  1. 添加AXI Memory Mapped to PCI Express IP

配置如下:

至此IP核配置结束。这里先讲解一下IP核几个AXI总线接口作用,方面后续调试

  1. S_AXI_CTL 总线

S_AXI_CTL总线主要用于访问PCIE总线中各设备的配置空间,这里主要配置RC端(FPGA )和EP端(NVME SSD)的配置(CFG)空间寄存器。

  1. S_AXI 总线

S_AXI总线主要用于访问EP端的BAR空间,主要用于配置NVME SSD设备的内部寄存器。

  1. M_AXI 总线

M_AXI总线由EP端(NVME SSD)发起,FPGA端作为从机。主要用于NVME SSD进行DMA读写。将M_AXI总线与DDR连接,读、写操作时NVME SSD会自动通过M_AXI总线访问DDR内存数据。

将AXI PCIE IP核的时钟、复位、pcie_tx、pcie_rx等引脚接好后,按照之前ZYNQ控制NVME时的流程先通过S_AXI_CTL总线访问和配置设备的PCIE配置空间。

S_AXI_CTL总线采用AXI_LITE接口,AXI_LITE接口信号比较多,这里使用一个本地转AXI_LITE接口的模块(AXI_LITE_M)方便读写。

这样我们通过本地接口就可以进行S_AXI_CTL总线接口的访问

将AXI_LITE_M模块的M_AXI连接到S_AXI_CTL总线,本地信号引出到外部。

新建一个pcie_cfg_ctrl模块用于控制AXI_LITE_M模块的本地接口

主要状态流程如下

主要寄存器配置流程和ZYNQ控制NCME SSD配置一致。

相关推荐
FPGA小迷弟2 小时前
FPGA状态机设计详解:从Moore到Mealy的完整指南
fpga开发·fpga
zlinear数据采集卡17 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
zlinear数据采集卡21 小时前
ZLinear产品线全景对比:D223 vs DABL7606 vs DABL-G511选型指南
arm开发·嵌入式硬件·算法·fpga开发·开源
何事误红尘1 天前
ZYNQ学习FPGA笔记(一):vivado安装、XC7Z045
fpga开发
zlinear数据采集卡2 天前
D223的SRAM硬件记录仪:外部触发与瞬态波形捕获方案
arm开发·嵌入式硬件·fpga开发·开源
szxinmai主板定制专家2 天前
基于 RK3588 + Xilinx Kintex-7 FPGA 异构工业主控板设计方案
arm开发·人工智能·嵌入式硬件·fpga开发·zynq
Rambo.xia2 天前
RFSoC高速采集卡设计项目:一块板卡串联综合优化5大核心技术
单片机·嵌入式硬件·fpga开发
XMAIPC_Robot2 天前
RK3588+STM32:高性能机器人运动控制解决方案,兼顾实时性与AI算力
人工智能·stm32·嵌入式硬件·算法·fpga开发·机器人·arm+fpga
zlinear数据采集卡2 天前
D223的DDS信号发生器:10000点查找表与4通道16位DAC波形输出
arm开发·嵌入式硬件·fpga开发·开源
物质波波波3 天前
WS-RPE:面向边缘物理AI实时特征值计算的硬件工作窃取调度器与冗余PE激活架构
人工智能·fpga开发·架构·系统架构·硬件架构