三、实战篇-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配置一致。

相关推荐
XMAIPC_Robot5 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
upper20205 小时前
从零开始设计riscv cpu记录之七
fpga开发·riscv·riscv设计·btb·分支预测
ARM|X86+FPGA工业主板厂家9 小时前
AI视觉跟随运动控制实战|RK3588 NPU检测+FPGA EtherCAT多轴联动精准跟随方案,适用于半导体视觉对位等
人工智能·fpga开发·硬件工程·ethercat·实时系统
XMAIPC_Robot13 小时前
RK3588+FPGA半导体设备量产踩坑大全|发热、时序漂移、推理抖动、成像干扰、EMC干扰方案
人工智能·嵌入式硬件·fpga开发·arm+fpga
凡亿卓达方案设计1 天前
FPGA硬件开发怎么选靠谱方案商?
fpga开发
Eloudy1 天前
QSFP28、RoCEv2、RFSoC-4x2 数据传输与器件链路
网络·fpga开发·rocev2
Echo_cy_1 天前
基于ZYNQ-7000的Ethernet驱动配置
linux·驱动开发·嵌入式硬件·fpga开发·ethernet·zynq
現実君1 天前
关于MCU下位替换FPGA的经验与方案
单片机·嵌入式硬件·fpga开发
Terasic友晶科技2 天前
【教程】Agilex 5 SoC 的两种启动模式的开发演示(一)(FPGA Configuration First)
fpga开发·agilex 5 soc