01signal.com

在 Linux 上使用 Xillybus 进行 “Hello, world” 测试

Xillybus 的 “Hello, world” 测试

这是 Xillybus 快速入门的第三步:包含 Xillybus 的比特流(bitstream)已经加载到 FPGA 中,驱动也已安装到主机上。现在该做一次简单测试了。这个测试的目的是确认设备文件已经正确创建,并且能够正常工作。

本页讨论 Linux 主机上的 Xillybus。Microsoft Windows 下的测试请参见类似页面

下面重点讨论基于 PCIe 的 Xillybus,但 XillyUSB 的情况也几乎完全相同。不同之处列在本页末尾。至于 Xillinux,除了一些与 PCIe 直接相关的内容之外,其余工作方式都一样。

有关此主题的更多信息,请参阅 Linux 上的 Xillybus 入门指南

PCIe 设备能被检测到吗?

首先要确认计算机能把 FPGA 识别为一个 PCIe 设备。为此可以使用 lspci 命令。这个命令会列出计算机在 PCIe 总线上发现的所有设备。有时候这是一个非常长的列表。

例如,在 Xilinx / AMD FPGA 上使用 Xillybus 时:

$ lspci
[ ... several lines ... ]
01:00.0 Class ff00: Xilinx Corporation Device ebeb
[ ... several lines ... ]

而在 Altera 上则是:

01:00.0 Class ff00: Altera Corporation Unknown device ebeb

输出可能会因计算机而异。关键是 “ebeb”。这是设备 ID(Device ID),表示这是一个 Xillybus 设备。

如果 lspci 的输出中没有这样一行,说明 FPGA 出了问题。常见原因之一是弄混了 FPGA 中加载的是哪一个比特流。

驱动是否正常启动?

下一步是检查驱动的状态。最简单的办法是在内核日志中搜索 “xillybus”。例如:

$ dmesg | grep xillybus
xillybus_pcie 0000:01:00.0: can't disable ASPM; OS doesn't have ASPM control
xillybus_pcie 0000:01:00.0: Created 5 device files.

每台计算机的输出格式可能略有不同。提到 ASPM 的那一行是正常的,并不表示错误。当然,没有这一行也完全正常。

显示 “Created 5 device files” 的那一行说明驱动已成功初始化 Xillybus。如果没有这一行,说明驱动初始化时出了问题。

如果内核日志中还有其他与 Xillybus 相关的行,它们有助于解释故障原因。这通常是 FPGA 的逻辑出了问题,尤其常见于 FPGA 中的 PCIe 模块被错误配置的情况。例如,如果你修改了演示包(demo bundle)中 PCIe 模块的参数,就可能导致驱动无法正常初始化。

如果内核日志中没有包含 “xillybus” 的行,但 lspci 的输出中有 “ebeb” 那一行,那该怎么办?这说明驱动尚未加载到内核中。可以按如下方式用 lsmod 检查:

$ lsmod | grep xillybus
xillybus_pcie          16384  0
xillybus_core          28672  1 xillybus_pcie

这个例子显示的是驱动已加载到内核时的正确输出。数字(16384 和 28672)可能会不同。列表中也可能会看到 xillybus_class。

请注意,如果你刚刚安装了这个驱动,需要重启计算机,或者用 insmod 手动加载驱动。

“Hello, world”

驱动会创建五个设备文件:/dev/xillybus_read_8、/dev/xillybus_read_32、/dev/xillybus_write_8、/dev/xillybus_write_32 和 /dev/xillybus_mem_8。请注意,如果你在 IP Core Factory 创建自定义 IP 核(custom IP core),那么设备文件的数目、名称和属性都可以自行选择。

但现在 FPGA 中加载的是演示包。我们来试一下其中两个设备文件。

演示包中 read_8 与 write_8 之间有一个回环(loopback)连接。也就是说,当计算机向 write_8 写入数据时,FPGA 会通过 read_8 把完全相同的数据返回。这个回环只是为了演示而存在,没有其他实际用途。

测试方式如下:在计算机上打开两个终端窗口,或者采用其他任何能提供两个 shell 提示符的方式,例如建立两个 ssh 连接。

在第一个 shell 提示符下输入:

$ cat /dev/xillybus_read_8

然后在第二个 shell 提示符下输入:

$ cat > /dev/xillybus_write_8

现在在第二个终端里输入任意内容,然后按 Enter。这些内容会出现在第一个终端中。这展示了文本是如何被写入设备文件、进入 FPGA,最后又返回计算机的。

虽然这个例子很简单,但理解它的工作原理很重要。尤其要理解 FPGA 中的逻辑是如何实现这一过程的。这正是把你自己的逻辑整合进去的起点。

如果这些命令因 permission denied(权限不足)而失败,请以 root 身份重试。或者按前文建议安装 udev 文件。

XillyUSB

如果你使用的是 XillyUSB,上述所有内容同样适用,但有几点不同。

XillyUSB 提供了一个名为 showdiagnostics 的工具,用于检查与 FPGA 之间的物理连接质量。强烈建议使用这个工具,以确保原始数据链路(raw data link)没有任何错误。即使 XillyUSB 看起来运行得很正常,也必须做这项检查。原因是 USB 3.0 协议会掩盖底层原始数据链路上的错误,但这些错误仍然可能导致偶发的、看起来像 bug 的问题。

没有理由容忍这类错误。解决办法通常很简单,例如换用计算机上的另一个 USB 插口。

其他不同之处:

本页由机器从英文翻译而来。如有疑问,请参阅原文
Copyright © 2021-2026. All rights reserved. (dcc38493)