- 博客(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
2026-09-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅