自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 第十四章:NVMe CAP 寄存器怎么看?FPGA Host 初始化参数不能直接写死

NVMe SSD 怎样取得命令、传输数据并返回结果?本文先介绍提交队列、完成队列、数据缓冲区和 Doorbell 的工作关系,再结合三星980 实测 CAP 与官方资料,解释队列深度、连续内存、页大小、Doorbell 间距、Ready 超时和命令集为何需要配置,以及 FPGA Host应怎样选择和校验参数。

2026-10-22 19:58:36 313

原创 第十三章:FPGA 第一次读取 NVMe 寄存器:从 BAR 地址到 CAP 和 VS

FPGA 配置好 BAR 后,怎样读取 NVMe 控制器寄存器?本文沿“PL Memory Read→SSD BAR/MMIO→CplD→状态与 Tag 校验→CAP/VS 解析”的路径,结合三星 980 实板记录与官方资料,介绍请求地址计算、64位 CAP 分次读取、字节顺序、版本解析和故障定位,说明寄存器访问成功与控制器 Ready 的区别。

2026-10-21 09:19:37 312

原创 第十二章:FPGA 如何配置 NVMe SSD 的 BAR?从空间探测到 MMIO 地址分配

FPGA 识别 NVMe SSD 后,怎样建立寄存器访问窗口?本文沿“PL 配置状态机→PCIe 配置读写→SSD BAR0/BAR1→掩码与回读校验→MMIO 地址分配”的路径,结合三星 980 实板记录与官方规范,讲解64位 BAR 判断、16 KiB 窗口计算、0x80000000 地址来源、Command 使能及常见故障定位。

2026-10-14 12:11:19 391

原创 第十一章:PCIe Configuration TLP 和 Memory TLP 有什么区别?FPGA 访问 NVMe BAR 前必须弄清楚

FPGA 读到 NVMe SSD Vendor ID 后,怎样访问 BAR/MMIO?本文沿“PL 请求→PCIe Memory Read/Write→SSD 寄存器→CplD 返回”的路径,结合 PCIe 与 AMD 官方资料,对比 Configuration 和 Memory TLP 的寻址、Fmt/Type、包头及返回规则,并介绍 64 位 AXI4-Stream 拍布局和 ILA 检查方法。

2026-10-14 10:57:18 268

原创 第十章:FPGA 读到 SSD Vendor ID 后,还差什么?从 PCIe 配置空间到 NVMe Host

FPGA 读到三星 980 的 Vendor ID 后,为什么还不能直接访问 NVMe SSD?本文沿“配置空间→BAR0/BAR1 探测→16 KiB 窗口计算→0x80000000 MMIO 地址分配→NVMe 控制器寄存器”的路径,结合PCIe 与 NVMe 官方规范及实板记录,说明 BAR、CAP、CC、CSTS、Admin Queue、Doorbell 和数据缓冲区之间的关系。

2026-09-14 11:47:37 401

原创 第九章:FPGA 读取 SSD Vendor ID 超时怎么查?PCIe Configuration Read 故障定位实战

FPGA 向 NVMe SSD 发出 PCIe Configuration Read 后,遇到超时、UR 或返回数据异常,应该从哪里排查?本文结合实板成功波形与 Vivado 仿真,沿“启动条件→TX 握手→请求字段→RX 返回→Completion 状态→Requester ID/Tag→Payload 解析”的顺序,介绍链路已经 Link Up 却仍读不到 SSD Vendor ID 时的故障定位方法。

2026-09-14 10:20:51 265

原创 第八章:FPGA 读取 NVMe SSD Vendor ID 实战:从 PCIe Link Up 到上板验证

本章以 XC7Z100 与三星 980 1TB SSD 为例,完整演示 FPGA 通过 PCIe 配置访问读取 SSD Vendor ID 和 Device ID 的过程。内容涵盖 Vivado 工程搭建、PCIe Root Port 与 ILA 配置、仿真和上板操作,并结合真实 ILA波形逐拍分析 Configuration Read 求、CplD 返回及 A809144D 的解析过程。文末提供可复现的配套工程源码。

2026-09-09 09:01:35 151

原创 第七章:PCIe Completion with Data 怎么接?FPGA 如何确认 SSD 的返回包

FPGA 发出 PCIe 配置读取请求后,怎样确认 SSD 返回的数据有效?本文沿“SSD → PCIe Root Port IP → PL 接收状态机”的路径,结合 PCIe 与 AMD 官方资料,讲解 Completion/CplD 的 Fmt、Type、状态码及 Requester ID、Tag 匹配,说明64位 AXI4-Stream 上的两拍布局、字节重组与末拍检查,并梳理超时和包边界处理,为下一章上板读取 SSD 身份信息做准备。

2026-09-07 09:54:35 338

原创 第六章:FPGA 如何发出 PCIe Configuration Read?从 TLP 到 AXI4-Stream 发送接口

PCIe 链路进入 L0 后,FPGA 仍需主动向下游 NVMe SSD 发起 Configuration Read,才能开始识别设备。本文说明 BDF 在 PCIe 树中的含义、Requester ID 与目标 BDF 的区别,以及 3-DW Configuration Read 如何通过两拍 AXI4-Stream 发送。文章同时梳理tvalid/tready、tkeep、tlast 的关键约束,并明确发送完成不等于读取成功;

2026-09-01 10:45:33 295

原创 第五章:PCIe 配置空间是什么?读取 SSD Vendor ID 前先看懂这 4 KiB

本文介绍 PCIe 配置空间的基本作用,以及 FPGA 读取 NVMe SSD 信息前需要完成的配置读取过程。以 Offset 00h 的 Vendor ID、Device ID 字段为例,说明如何解析返回数据、查询厂商与控制器映射,并区分 ID、SSD 型号容量和固件版本等不同信息,为后续 NVMe Host 初始化打下基础。

2026-08-31 09:06:29 356

原创 第四章:PCIe Link Up 后怎么传输数据?FPGA 先认识 TLP、DLLP 和 Completion

PCIe 链路进入 L0 后,FPGA 与 NVMe SSD 在线上传输的并不是抽象命令,而是 Ordered Set、DLLP 和 TLP 等协议单元。本文沿着“FPGA Root Port → Configuration Read TLP → NVMe SSD Endpoint → Completion with Data → FPGA”的路径,说明配置读取为什么需要返回包,并梳理 Configuration、Memory Read、Memory Write、Completion 的职责与方向

2026-08-29 11:04:28 336

原创 第三章:FPGA PCIe Root Port 与 Endpoint 有什么区别?NVMe SSD 为什么需要 Host

PCIe 链路进入 L0 后,NVMe SSD 仍不会自动被 FPGA 使用。本文说明 FPGA 直连 SSD 时,为什么 FPGA 必 须工作在 Root Port 与 Host 一侧,SSD 则是 Endpoint;并沿着“FPGA Root Port → PCIe Configuration Request → NVMe SSD Endpoint → Completion with Data → FPGA”的路径,梳理配置访问、设备识别与后续NVMe 控制器访问之间的关系。

2026-08-28 08:59:42 290

原创 第二章:M.2 NVMe SSD 接到 FPGA 后不识别:先检查这 5 个 PCIe 条件

FPGA 接上 M.2 NVMe SSD 后不识别,先别急着检查 NVMe 命令。本文以 XC7Z100 与三星 980 1TB 为例,讲清 PCIe Link Up 前必须确认的 3.3 V 供电、100 MHz 参考时钟、PERST# 复位、x4 Lane 和侧带信号,并结合 LTSSM 状态说明如何区分链路、枚举与 NVMe 初始化问题。

2026-08-28 08:58:44 335

原创 第一章:FPGA 如何驱动 NVMe SSD?从 PCIe Root Port 到高速存储的完整路径

本文以三星 980 1TB NVMe SSD 和 XC7Z100 平台为例,介绍 FPGA 作为 PCIe Root Port 驱动 NVMe SSD 的完整过程。内容涵盖 PCIe 枚举、BAR 配置、NVMe 初始化、队列、PRP 与 DMA,并对比 PS DDR 协同验证和PL DDR 直达两条读写数据路线。

2026-08-27 11:49:35 361

原创 移植AD9361官方驱动到自己板子上 / PetaLinux ad936 linux驱动移植 - IIO驱动 -- Linux篇

主要描述关于利用PetaLinux工具进行AD9361 Linux驱动移植,在完成驱动移植到自己的板子上之后,便可以利用ADI IIO接口使用IIO Scope、MATLAB、Gnuradio等工具对板卡进行访问

2024-08-17 20:04:28 5680 1

原创 移植AD9361官方驱动到自己板子上 - HDL移植 - NO OS移植

书接上回“利用vivado TCL工具构建AD9361官方驱动 - HDL部分”,在前一文中给出了AD9361官方驱动的HDL工程构建方法,本文主要介绍如何将其裁剪并移植到自己的板子上,同时PS端移植NO OS代码,形成完整的驱动。

2024-08-14 15:54:17 4239

原创 利用vivado TCL工具构建AD9361官方驱动 - HDL部分

利用vivado TCL直接构建官方例程实现简单,如果使用非官方的硬件板子,只需要修改约束就重新run一次就行了。至此,官方驱动HDL部分程序构建完毕,完整驱动需要ZYNQ的PS端配合,移植对应的no-os或者Linux部分代码即可。2024.08.12。

2024-08-12 15:51:16 2106 4

FPGA读取NVMe SSD Vendor ID实战工程:Vivado 2024.2、RTL、仿真与ILA

第八章《FPGA 读取 NVMe SSD Vendor ID 实战:从 PCIe Link Up 到上板验证》的配套演示源码,保持文章实测版本的 RTL 与工程脚本不变。适用环境为 Vivado 2024.2、XC7Z100-2FFG900,PCIe Gen2 x4 Root Port、64 位 AXI4-Stream;实测 SSD 为三星 980 1TB。由 PL 发起配置空间读取并解析 Vendor ID、Device ID,不依赖 PS、Vitis 或外部 DDR。包含顶层及读取引擎 RTL、板级约束、IP 创建与构建 Tcl、行为仿真、真实 ILA 原始 CSV/.ila、数据核对脚本及复现说明。工程通过 Tcl 创建,不附预建 xpr 或 bitstream。其他板卡需自行核对器件、时钟、管脚和 PCIe 通道。默认重复读取为受控调试模式,使用限制及单次模式设置见 README。本包不包含厂商 IP 源码、规范 PDF 或工具安装包。

2026-09-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除