Xillybus的“Hello, world”测试
这是开始使用 Xillybus的第三步: 包含 Xillybus 的比特流(bitstream)已经加载到 FPGA中,驱动程序安装在主机(host)上。现在是时候做一个简单的测试了。此测试的目的是验证设备文件(device files)是否已创建并且它们是否正常工作。
此页面讨论 Linux 主机上的 Xillybus 。微软 Windows(Microsoft Windows)有一个类似的页面。
这里我将重点关注 Xillybus 和 PCIe ,但一切与 XillyUSB几乎相同。本页底部列出了差异。对于 Xillinux,除了与 PCIe直接相关的主题之外,一切都以相同的方式工作。
有关此主题的更多信息,请参阅Getting started with Xillybus on Linux 。
检测到 PCIe device 了吗?
首先要检查的是计算机是否将 FPGA 识别为 PCIe device。为此使用 "lspci" 命令。此命令显示计算机在 PCIe 总线上找到的所有 devices 。有时这是一个很长的列表。
例如,在 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”。这是 Device ID,说明这是 Xillybus device。
如果 lspci的输出中没有这样的行,则 FPGA有问题。通常原因是混淆了将哪个比特流(bitstream)加载到 FPGA中。
驱动程序是否正常启动?
下一步是检查驱动程序的状态。最简单的方法是在 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”的行确认驱动程序已成功初始化 Xillybus。如果此行不存在,则初始化驱动程序时出现问题。
如果 kernel log 中还有其他与 Xillybus相关的行,它们可以帮助解释哪里出了问题。这通常是 FPGA的逻辑的问题。特别是当 FPGA 中的 PCIe block 配置错误时,容易出现这种情况。例如,如果您在演示包的(demo bundle)中更改了 PCIe block 的参数,则可能会导致驱动程序无法正常初始化。
如果在 kernel log中没有包含单词“xillybus”的行,但在 lspci的输出中有包含“ebeb”的行怎么办?这意味着驱动程序没有加载到 kernel中。使用 lsmod 进行检查,如下所示:
$ lsmod | grep xillybus xillybus_pcie 16384 0 xillybus_core 28672 1 xillybus_pcie
此示例显示了将驱动程序加载到 kernel时的正确输出。数字(16384 和 28672)可能不同。有可能 xillybus_class 也会出现在这个列表中。
注意,如果你刚刚安装了这个驱动程序,需要重启电脑或者用 insmod手动加载驱动程序。
“Hello, world”
驱动程序创造了五个设备文件(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 ,您可以选择创建多少个设备文件,以及它们的名称和属性。
但现在 FPGA 包含演示包的。让我们试用两个设备文件。
read_8 和 write_8之间的演示包的中有一个回环(loopback)。这意味着当计算机将数据(data)写入 write_8时, FPGA 通过 read_8返回完全相同的数据。这仅用于演示。这款回环(loopback)没有其他实际用途。
测试如下: 在电脑上打开两个终端窗口(terminal windows)。或者,使用可以为您提供两个 shell 提示符的任何其他配置。比如两台 ssh connections。
在第一个 shell 提示符上输入:
$ cat /dev/xillybus_read_8
然后在第二个 shell 提示符上输入:
$ cat > /dev/xillybus_write_8
现在在第二个终端(terminal)上输入任何内容,然后按 ENTER。同样的文字会出现在第一台终端(terminal)上。这显示了文本如何写入第一个设备文件,然后到达 FPGA,最后返回到计算机。
尽管这个示例很简单,但了解它的工作原理很重要。尤其重要的是了解 FPGA 中的逻辑如何实现这一点。这是集成您自己的逻辑的起点。
如果这些命令因 permission denied 错误而失败,请重复此操作以执行 root。或者,按照之前的建议安装 udev 文件。
XillyUSB
如果您使用的是 XillyUSB,则上述所有内容均适用,但存在一些差异。
XillyUSB 有一个名为 showdiagnostics 的工具,用于检查与 FPGA的物理连接质量。强烈建议使用此工具以确保 raw data link 没有错误。即使 XillyUSB 看起来工作完美,进行此检查也很重要。原因是 USB 3.0 协议隐藏了 raw data link上的错误,但这些错误仍然会导致看起来像错误的罕见问题。
没有理由容忍这种错误。解决方法通常很简单,例如使用另一台 USB plug 计算机。
其他区别:
- 使用 lsusb 而不是 lspci。
- 驱动程序的模块是 xillyusb ,也可能是 xillybus_class。
- 安装驱动程序后无需重启电脑。当 device 连接到 USB plug 时(断开连接后),驱动程序会自动加载。
- 设备文件的名称略有不同。例如,名称不是 /dev/xillybus_read_8,而是 /dev/xillyusb_00_read_8。 “00”部分可能有所不同。