01signal.com

Linux上 Xillybus 的“Hello, world”测试

Xillybus的“Hello, world”测试

这是开始使用 Xillybus的第三步: 包含 Xillybus 的 bitstream 已经加载到 FPGA中, driver 安装在 host上。现在是时候做一个简单的测试了。此测试的目的是验证 device files 是否已创建并且它们是否正常工作。

此页面讨论 Linux host上的 Xillybus 。 Windows有一个类似的页面

这里我将重点关注 Xillybus 和 PCIe ,但一切与 XillyUSB几乎相同。本页底部列出了差异。对于 Xillinux,除了与 PCIe直接相关的主题之外,一切都以相同的方式工作。

有关此主题的更多信息,请参阅Getting started with Xillybus on a Linux

检测到 PCIe device 了吗?

首先要检查的是计算机将 FPGA 识别为 PCIe device。为此使用“lspci”命令。此命令显示计算机在 PCIe bus上找到的所有 devices 。有时这是一个很长的列表。

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

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

而对于 Intel FPGA (Altera):

01:00.0 Class ff00: Altera Corporation Unknown device ebeb

您计算机上的输出可能略有不同。重要的部分是“ebeb”。这是 Device ID,说明这是 Xillybus device。

如果 lspci的输出中没有这样的行,则 FPGA有问题。通常原因是混淆了将哪个 bitstream 加载到 FPGA中。

driver 是否正常启动?

下一步是检查 driver的状态。最简单的方法是在 kernel log中搜索“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”的行确认 driver 已成功初始化 Xillybus。如果此行不存在,则初始化 driver时出现问题。

如果 kernel log 中还有其他与 Xillybus相关的行,它们可以帮助解释哪里出了问题。这通常是 FPGA的 logic的问题。特别是当 FPGA 中的 PCIe block 配置错误时,容易出现这种情况。例如,如果您在 demo bundle中更改了 PCIe block 的参数,则可能会导致 driver 无法正常初始化。

如果在 kernel log中没有包含单词“xillybus”的行,但在 lspci的输出中有包含“ebeb”的行怎么办?这意味着 driver 没有加载到 kernel中。使用 lsmod 进行检查,如下所示:

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

此示例显示了将 driver 加载到 kernel时的正确输出。数字(16384 和 28672)可能不同。有可能 xillybus_class 也会出现在这个列表中。

注意,如果你刚刚安装了这个 driver,需要重启电脑或者用 insmod手动加载 driver 。

“Hello, world”

driver 创造了五个 device files: /dev/xillybus_read_8、 /dev/xillybus_read_32、 /dev/xillybus_write_8、 /dev/xillybus_write_32 和 /dev/xillybus_mem_8。请注意,如果您在 IP Core Factory处创建一个 custom IP core ,您可以选择创建多少个 device files ,以及它们的名称和属性。

但现在 FPGA 包含 demo bundle。让我们试用两个 device files。

read_8 和 write_8之间的 demo bundle 中有一个 loopback 。这意味着当计算机将 data 写入 write_8时, FPGA 通过 read_8返回完全相同的 data 。这仅用于演示。这款 loopback没有其他实际用途。

测试如下: 在电脑上打开两个 terminal windows 。或者,使用可以为您提供两个 shell prompts的任何其他配置。比如两台 ssh connections。

在第一个 shell prompt上输入:

$ cat /dev/xillybus_read_8

然后在第二个 shell prompt上输入:

$ cat > /dev/xillybus_write_8

现在在第二个 terminal 上输入任何内容,然后按 ENTER。同样的文字会出现在第一台 terminal上。这显示了文本如何写入第一个 device file,然后到达 FPGA,最后返回到计算机。

尽管这个示例很简单,但了解它的工作原理很重要。尤其重要的是了解 FPGA 中的 logic 如何实现这一点。这是集成您自己的 logic的起点。

如果这些命令由于 permission denied 错误而失败,请将其作为 root重复。或者,按照之前的建议安装 udev 文件。

XillyUSB

如果您使用的是 XillyUSB,则上述所有内容均适用,但存在一些差异。

XillyUSB 有一个名为 showdiagnostics 的工具,用于检查与 FPGA的物理连接质量。强烈建议使用此工具以确保 raw data link 没有错误。即使 XillyUSB 看起来工作完美,进行此检查也很重要。原因是 USB 3.0 protocol 隐藏了 raw data link上的错误,但这些错误仍然会导致看起来像错误的罕见问题。

没有理由容忍这种错误。解决方法通常很简单,例如使用另一台 USB plug 计算机。

其他区别:

此页面由英文自动翻译。 如果有不清楚的地方,请参考原始页面
Copyright © 2021-2024. All rights reserved. (6f913017)