PCIe - ZCU106(RC) + KU5P(EP) + 固化

目录

1. 简介

1.1 Data Mover

1.2 描述符

2. ZCU102

2.1 Ubuntu OS

2.2 USB Host

2.2.1 连接拓扑

2.2.2 设备类型

2.2.3 USB 跳帽设置

2.3 无线网卡

2.4 PCIe Info

2.4.1 Diagram

2.4.2 lspci -tv

2.4.3 lspci -v

2.4.2.1 设备基本信息

2.4.2.2 控制与状态寄存器

2.4.2.3 中断与总线拓扑

2.4.2.4 地址空间配置

2.4.2.5 桥接器控制与能力

2.4.2.6 内核驱动

2.4.4 setpci

2.4.5 命令汇总

3. ZCU102+KU5P

3.1 vivado 工程

3.1.1 Block Design

3.1.2 IBUFDS_GTE

3.1.3 XDMA PCIe

3.1.4 Address Editor

3.1.5 烧写与固化

3.2 寄存器空间

3.2.1 寄存器地址格式

3.2.2 H2C 通道寄存器空间

3.2.3 C2H 通道寄存器空间

3.2.4 其他寄存器空间

3.2.5 举例

4. Driver

4.1 PCIe 一些概念

4.1.1 BAR

4.1.2 中断与轮询

4.2 DMA drivers

4.2.1 PCIe Device IDs

4.2.2 编译并加载驱动

4.2.3 查看驱动信息

4.2.4 获取通道标识符

4.2.5 xdma0_user 测试

4.2.6 xdma0_bypass 测试

4.2.7 xdma0_h2c_0 读写测试

4.3 调试方法

4.3.1 xdma cdev init

4.3.2 h2c status

4.3.3 xfer timed out

4.3.4 Debug Options

4.3.4.1 In-system IBERT

4.3.4.2 PCIe IBERT 特点

4.3.4.3 实测数据

4.3.5 直插主板

4.3.5.1 运行在 8GT/s

4.3.5.2 运行在 5GT/s

4.3.6 使用延长线

4.3.6.1 运行在 8GT/s

4.3.6.2 查看链路训练结果

4.3.6.3 运行在 5GT/s

5. 总结


1. 简介

1.1 Data Mover

DMA/Bridge Subsystem for PCIe 就是一个数据搬运器件,用于在主机内存和 DMA 子系统之间搬运数据。子系统通过处理一种叫做 “描述符” 的数据结构来完成在主机内存和 DMA 子系统之间移动数据的任务。

|------|            |------------------------------FPGA-----------------------------|
|      |            |    |---------------|                  |-------------------|   |
|      |            |    |               |                  |                   |   |
| Host |    PCIe    |    |   DMA/Bridge  | M_AXI      S_AXI |   User Logic      |   |
| App  |<---------->|<-->|   for PCIe    |<---------------->|   e.g.            |   |
|      |    slot    |    |               |                  |   HW Accelerator  |   |
|      |            |    |  (AXI-master) |                  |   (AXI-slave)     |   |
|      |            |    |---------------|                  |-------------------|   |
|------|            |---------------------------------------------------------------|

连接不同的 AXI-slave,可以实现不同的功能:

  • 连接 AXI BRAM 或 AXI DDR MC,则整个 FPGA 可以看作一个 PCIe 内存设备,Host-PC 可以读写该内存;
  • 一个硬件加速器,则 Host-PC 可以通过 PCIe 调用该加速器;
  • AXI 桥,下游挂多个 AXI slave ,可以同时实现更多功能。

1.2 描述符

你可以把 “描述符” 想象成一个包含了数据传输指令的小包裹。这个包裹里面明确地写着:

  • 源 (Source): 数据从哪里来(例如,主机内存中的某个具体地址)。
  • 目标 (Destination): 数据要到哪里去(例如,DMA 子系统中的某个地址,或者反过来)。
  • 要传输数据量 (Amount of data to transfer): 需要移动多少数据(例如,多少个字节)。

DMA 子系统会读取并执行这些 “描述符” 中的信息,从而自动地将数据从源地址搬运到目标地址,而不需要 CPU 的直接干预。

简单来说,DMA 子系统依靠这些 “描述符” 来了解它需要做什么样的数据搬运工作。

2. ZCU102

2.1 Ubuntu OS

Install Ubuntu on AMD | Ubuntu Use Ubuntu on AMD for the familiar developer experience and an accelerated path to production.https://ubuntu.com/download/amd

2.2 USB Host

2.2.1 连接拓扑

PHY IC: USB3320 @U116

2.2.2 设备类型

 USB 设备类型

  • A 类设备:指的是标准的 USB Host 设备,如计算机或笔记本电脑,它们提供电源并管理连接的 USB 设备。
  • B 类设备:通常是外围设备,如打印机、鼠标或键盘,它们从 A 类设备接收电源和数据。 

2.2.3 USB 跳帽设置

跳帽设置:

2.3 无线网卡

下载地址:

W311MI _Tenda-All For Better NetWorkingW311MIhttps://www.tendacn.com/product/overview/W311MIv6.html

W311MIv6.0 Driver (Ubuntu/UOS/Kylin OS) 可以给 KV260、ZCU102 的 Ubuntu 系统使用。

2.4 PCIe Info

2.4.1 Diagram

1)Diagram

Form factor for PCIe Gen2x4 Host, Micro-ATX chassis footprint

2.4.2 lspci -tv

显示了系统的PCIe拓扑结构

>> lspci -tv
---
-[0000:00]---00.0-[01-0c]----00.0  Xilinx Corporation Device 9021

1)[0000:00]:是 PCIe 层级结构的根节点(Root Complex)

  • 0000 是 PCI 域号(domain number),通常为 0000
  • 00 是总线号(bus number),00 表示这是根总线

2)---00.0:是根端口(Root Port)的设备号和功能号

  • 00 是设备号(device number)
  • .0 是功能号(unction number)

3)-[01-0c]:表示这个根端口连接的下游设备所在的总线范围

  • 01-0c 表示总线号从 01 到 0c (十进制12)
  • 这意味着这个根端口下可以有多达 12 个不同的总线

4)00.0 Xilinx Corporation Device 9021

  • 00.0 是子 PCI 设备的设备和功能编号
  • Xilinx Corporation Device 9021 是设备的供应商和型号
>> lspci -vt
-[0000:00]-+-00.0  Intel Corporation Device 9b53
           +-01.0-[01]----00.0  Xilinx Corporation Device 9021
           +-02.0  Intel Corporation Device 9bc8
           +-04.0  Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem
           +-12.0  Intel Corporation Comet Lake PCH Thermal Controller
           +-14.0  Intel Corporation Comet Lake USB 3.1 xHCI Host Controller
           +-14.2  Intel Corporation Comet Lake PCH Shared SRAM
           +-16.0  Intel Corporation Comet Lake HECI Controller
           +-16.3  Intel Corporation Device 06e3
           +-17.0  Intel Corporation Device 06d2
           +-1b.0-[02]----00.0  SK hynix Device 1339
           +-1f.0  Intel Corporation Device 0687
           +-1f.3  Intel Corporation Comet Lake PCH cAVS
           +-1f.4  Intel Corporation Comet Lake PCH SMBus Controller
           +-1f.5  Intel Corporation Comet Lake PCH SPI Controller
           \-1f.6  Intel Corporation Ethernet Connection (11) I219-LM

这两行:

+-01.0-[01]----00.0 Xilinx Corporation Device 9021
+-1b.0-[02]----00.0 SK hynix Device 1339

这两行之所以看起来和别的不一样,它们表示的是 PCI 桥(PCI Bridge) 以及连接在该桥后面的设备。

  • 普通行 (例如 +-02.0 Intel Corporation Device 9bc8): 显示的是直接连接在当前总线(这里是总线 00)上的终端设备(Endpoint Device),比如集成显卡、USB 控制器、网卡等。它们不连接其它总线。
  • 特殊行 (例如 +-01.0-[01]----00.0 Xilinx ...): 显示的是一个 PCI 桥 (01.0) 以及通过这个桥连接到下一级(次级)总线 ([01]) 上的第一个设备 (00.0)。这种表示方法突出了设备间的层级和连接关系,显示了哪些设备是挂载在桥下面的。

2.4.3 lspci -v

lspci 提供了系统中 PCIe 桥接设备(Xilinx Corporation 制造)的详细信息:

ubuntu@zynqmp:~$ lspci -vv
---
00:00.0 PCI bridge: Xilinx Corporation Device d021 (prog-if 00 [Normal decode])
        Control: I/O- Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0
        Interrupt: pin A routed to IRQ 62
        Bus: primary=00, secondary=01, subordinate=0c, sec-latency=0
        I/O behind bridge: 00000000-00000fff [size=4K]
        Memory behind bridge: [disabled]
        Prefetchable memory behind bridge: [disabled]
        Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
        BridgeCtl: Parity- SERR+ NoISA- VGA- VGA16- MAbort- >Reset- FastB2B-
                PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
        Capabilities: <access denied>
        Kernel driver in use: pcieport

2.4.2.1 设备基本信息

1)设备位置与类型

  • 00:00.0 表示设备在 PCI 总线上的位置(总线 00,设备 00,功能 0)。
  • 这是一个 PCI 桥接器(PCI bridge),型号为 Xilinx Corporation Device d021,用于连接主总线(00)和次级总线(01-0c)。

2)编程接口(prog-if)

  • Normal decode 表示桥接器以标准方式解码 PCI 地址。

2.4.2.2 控制与状态寄存器
  • 功能禁用(带-),功能启用(带+)

1)Control 寄存器

  • BusMaster+:桥接器可以发起总线请求(DMA 操作)。
  • I/O- Mem-:桥接器未启用 I/O 和内存空间访问(可能未配置或未激活)。
  • 其他标志(如 SERR-、FastB2B-)表示错误报告和快速传输功能未启用。

2)Status 寄存器

  • Cap+:设备支持 Capability List(扩展功能列表)。
  • DEVSEL=fast:设备快速响应访问请求。
  • 无错误状态(ParErr-、SERR- 等)。

2.4.2.3 中断与总线拓扑

1)中断路由:

  • Interrupt: pin A routed to IRQ 62
  • 桥接器的中断引脚 A 连接到系统的 IRQ 62。

2)总线范围:

  • primary=00:主总线编号 00(连接 CPU)。
  • secondary=01:次级总线起始编号 01。
  • subordinate=0c:次级总线结束编号 0c(表示该桥接器下可管理总线 01-0c)。
  • sec-latency=0:次级总线访问延迟为 0。

2.4.2.4 地址空间配置

1)I/O 空间:

  • 00000000-00000fff [size=4K]
  • 桥接器后挂载的设备的 I/O 空间范围为 4KB,但当前未启用(I/O behind bridge 未分配实际地址)。

2)内存空间:

  • Memory behind bridge: [disabled]
  • 内存和预取内存空间均未启用(可能需动态配置或未使用)。

2.4.2.5 桥接器控制与能力

1)Secondary Status

  • 次级总线的状态(类似主状态寄存器),无错误或特殊配置。

2)BridgeCtl

  • 控制桥接器行为的标志,例如:
    • SERR+:启用系统错误报告。
    • NoISA-:允许 ISA 风格的访问(已过时)。
    • VGA-:不支持 VGA 兼容模式。

3)Capabilities:

  • <access denied> 表示需要 root 权限才能查看扩展功能(如 PCIe 链路速度、电源管理等)。

2.4.2.6 内核驱动
  • Kernel driver in use: pcieport

当前由 Linux 内核的 pcieport 驱动管理,该驱动负责处理 PCIe 端口和桥接器的通用功能(如热插拔、错误处理等)。

2.4.4 setpci

1)COMMAND 寄存器

在 PCIe 设备中,COMMAND 寄存器是一个 16位寄存器,控制设备的基本操作权限,其低 8 位的标志位控制设备的核心功能:

Bit 	Name            Function
--------------------------------------------------------------------------------
0       I/O Space       启用设备对 I/O 端口 的访问(如 in/out 指令)
1       Memory Space    启用设备对 内存映射寄存器(MMIO) 的访问(如 BAR0/BAR1)
2       Bus Mastering   允许设备发起 DMA 操作(直接读写主机内存)
3-15	Others          如中断禁用、快速背靠背传输等(通常次要)

2)查看 Control 状态

>> sudo lspci -vv -s 01:00.0 | grep Control
---
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-

说明当前设备 所有关键功能均未启用,无法访问它的内存或寄存器。

3)启用功能

>> sudo setpci -s 01:00.0 COMMAND=0x07

0x07 的二进制是 00000111,它同时启用:

  • Bit 0 (I/O Space) = 1 → 允许 I/O 访问
  • Bit 1 (Memory Space) = 1 → 允许 MMIO 访问
  • Bit 2 (Bus Mastering) = 1 → 允许 DMA

为什么内核没有自动启用?

  • 无专用驱动加载:内核检测到设备但未绑定驱动时,可能不会主动启用其功能。
  • 安全策略限制:部分系统默认禁用未认证设备的 Bus Mastering(防 DMA 攻击)。

4)查看驱动加载情况

>> sudo dmesg | grep 9021
---
[    3.80
### TortoiseGit 详细 图文 使用教程 #### 安装准备 为了确保 TortoiseGit 能够正常工作,在安装之前需要确认已经完成 Git 的安装与配置操作。因为 TortoiseGit 是基于 Git Core 运行的应用程序外壳,所以必须先有一个可用的 Git 环境[^3]。 #### 下载 TortoiseGit 访问官方网站获取最新版 TortoiseGit 和对应的语言包。官方下载页面提供了不同版本的选择,可以根据操作系统需求挑选合适的版本进行下载[^2]。 #### 开始安装过程 启动下载好的安装文件后会进入向导界面,按照提示逐步点击“下一步”,直到看到组件选择页。这里可以选择是否安装集成到 Windows Explorer 中的功能以及语言支持选项。继续按指示完成整个安装流程即可。 #### 配置基本设置 首次运行时建议调整一些默认参数来优化用户体验。右键桌面空白处找到并打开"TortoiseGit settings"菜单项;在此窗口内可以修改全局用户名、邮箱地址等个人信息,并设定SSH密钥路径以便后续用于远程仓库认证[^1]。 #### 日常使用指南 - **克隆项目** 通过资源管理器中的右键快捷方式可以直接从远端服务器拉取代码库副本至本地磁盘位置。只需指定目标URL和保存目录就能轻松实现同步复制功能。 ![Clone Repository](https://tortoisegit.org/docs/tortoisegit/images/clone.png) - **提交更改** 当编辑完源码之后可以通过同样的方法发起 commit 提交请求。填写日志描述信息并将待更新文件加入暂存区后再执行最终推送动作。 ```bash # 添加所有改动到暂存区 git add . # 创建新commit记录 git commit -m "Your message here" ``` - **解决冲突** 遇到分支间存在差异的情况也不必担心,TortoiseGit 内建了图形化的合并工具帮助开发者快速定位分歧之处进而采取适当措施加以修正处理。 ![](https://tortoisegit.org/docs/tortoisegit/images/resolving-conflicts.png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值