LitePCIe在真实开发板上跑起来:ACORN、KC705、KCU105、XCU1525完整实操清单
【免费下载链接】litepcieSmall footprint and configurable PCIe core项目地址: https://gitcode.com/gh_mirrors/li/litepcie
LitePCIe 是一个用小 footprint、高可配置性著称的PCIe 核心(PCIe core),基于 Migen 与 LiteX 生态构建,让你无需庞大 IP 就能在 Xilinx FPGA 上快速搭建 PCIe Endpoint。本文面向新手,给出在 ACORN、KC705、KCU105、XCU1525 四块真实开发板上构建、烧录并验证 LitePCIe 的完整实操清单,帮助你在 FPGA 开发板上一次点亮 PCIe 链路。
一、先看懂LitePCIe PCIe核的三层架构
在动手之前,建议先花 2 分钟理解 LitePCIe 的结构,后面的构建脚本才有意义。整个核心分为三层:
- PHY 层:负责物理层,支持 Xilinx 7-Series(Gen2 X8)、Ultrascale+(Gen3 X16)、Intel Cyclone5(Gen2 X4)以及 64/128/256/512-bit 数据通路;
- Core 层:TLP 层处理、重排序、MSI/MSI-X 中断、Crossbar 交叉开关;
- Frontend 层:DMA(带 Scatter-Gather)、MMAP(AXI/Wishbone 主从)、PTM 透传模式。
💡 这张架构图直观展示了 MMAP、DMA、TLP Packetizer/Depacketizer 到 PCIe PHY 的数据流向,调试时可以按图索骥。
二、四块开发板选型对照清单
项目bench/目录为每块板子都提供了独立的构建入口脚本,选型前先对照下表:
| 开发板 | FPGA 系列 | PCIe PHY | 支持速率/通道 | 入口脚本 |
|---|---|---|---|---|
| 🟢 ACORN | Xilinx 7-Series | S7PCIEPHY | Gen2 x4,125 MHz | bench/acorn.py |
| 🟢 KC705 | Xilinx 7-Series | S7PCIEPHY | Gen2 x1/x4/x8 | bench/kc705.py |
| 🔵 KCU105 | Xilinx Ultrascale | USPCIEPHY | Gen3 x4/x8 | bench/kcu105.py |
| 🟣 XCU1525 | Xilinx Ultrascale+ | USPPCIEPHY | Gen3 x4/x8/x16 | bench/xcu1525.py |
几点选择建议:
- 预算有限、快速入门→ ACORN(Xilinx/SC 小型 PCIe 卡),配套配置文件为
examples/acorn.yml; - 经典学习平台→ KC705,脚本内建 UART、双路 DMA 与 MSI 中断,最适合教学;
- 追求 Gen3 高速→ KCU105 或 XCU1525(XCU1525 可跑满 x16,系统时钟 300 MHz)。
三、环境准备:最快配置方法
- 安装 Python 3.8+ 与 FPGA 厂商开发工具(Vivado);
- 按 LiteX 官方 Wiki 安装 Migen、LiteX、LiteX-Boards 依赖栈;
- 获取 LitePCIe 仓库:
git clone https://gitcode.com/gh_mirrors/li/litepcie cd litepcie- (可选)先跑一遍单元测试确认环境无误,测试用例位于
test/目录:
python3 -m unittest test.test_examples四、逐板实操:构建、烧录与驱动安装
4.1 ACORN:litepcie_gen 一键生成核心
ACORN 流程的特点是先用 YAML 配置生成 Verilog 核心,再与 SoC 集成:
python3 bench/acorn.py --build --load脚本会自动执行litepcie_gen ../examples/acorn.yml生成litepcie_core,并按examples/acorn.yml中的参数(128-bit 数据宽度、4 条 DMA 通道、16 个 MSI 中断等)综合 PHY。配置项可直接编辑该 YAML 文件调整。
4.2 KC705:命令行参数切换通道数
KC705 是最完整的演示 SoC(UART + DMA0/DMA1 + MSI),命令示例:
python3 bench/kc705.py --build --load # 默认 Gen2 x4,200 MHz python3 bench/kc705.py --build --nlanes 8 # 切换到 x8 python3 bench/kc705.py --driver --output-dir build/kc705 # 生成 Linux 驱动4.3 KCU105 与 XCU1525:Gen3 高速板通用流程
两块 UltraScale(+) 板的脚本结构一致,区别仅在 PHY 与默认配置:
python3 bench/kcu105.py --build --load --nlanes 4 # Gen3 x4 python3 bench/xcu1525.py --build --load --nlanes 16 # Gen3 x16两板均默认小端模式(little endian),并开启 DMA 环回(loopback)功能,方便上机自检。
4.4 安装 Linux 驱动并上电验证
构建脚本加--driver后会输出完整的 Linux 驱动源码(位于litepcie/software/kernel/与litepcie/software/user/),流程:
make # 编译内核模块 ./init.sh # 安装驱动并创建设备节点若之前加载过旧驱动,先执行rmmod litepcie再重新加载。项目还提供了一个总线重扫工具litepcie/software/rescan.py,可自动卸载驱动、移除旧设备、重扫 PCIe 总线并重新加载模块,对 Xilinx 及部分 Lattice/Gowin 设备 ID 开箱即用:
python3 litepcie/software/rescan.py五、上机排错速查清单
| 现象 | 快速排查动作 |
|---|---|
lspci看不到设备 | 用rescan.py重扫总线;检查rst_n与参考时钟(100 MHz) |
| 链路训练失败 | KC705/KCU105/XCU1525 脚本已内建 LTSSM 追踪器(add_ltssm_tracer),观察链路状态机卡在哪一态 |
| DMA 不工作 | 利用 SoC 的 DMA loopback 模式做环回自检,再比对csr.csv寄存器地址 |
| 时钟约束报错 | ACORN 示例已预置userclk2与litepciesoc_clkout之间的 false path,自改设计时参考bench/acorn.py |
六、总结
按照本文清单,你可以:
- ✅ 用
examples/*.yml配置 +litepcie_gen快速定制核心; - ✅ 通过
bench/下四个脚本在 ACORN / KC705 / KCU105 / XCU1525 上构建烧录; - ✅ 用
--driver一键生成 Linux 驱动,配合rescan.py完成设备注册; - ✅ 借助内建 LTSSM 追踪器与 DMA loopback 完成上机验证。
LitePCIe 采用宽松的 BSD 2-Clause 协议,允许用于闭源商业设计,从入门原型到量产 FPGA 设计都能平滑衔接。祝你第一次点亮 PCIe 链路顺利!🚀
【免费下载链接】litepcieSmall footprint and configurable PCIe core项目地址: https://gitcode.com/gh_mirrors/li/litepcie
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考