当前位置:首页 > OpenCL&HLS > 正文内容

OpenCL运行报错分析与解决MMD INFO : [board0] PCIe-to-fabric read test failed, read 0xffffffff after 1 attempt

chanra1n1年前 (2023-08-18)OpenCL&HLS3903

在运行opencl程序或者aocl program时,发生报错:

MMD INFO : [board0] PCIe-to-fabric read test failed, read 0xffffffff after  1 attempt

这里board0可能会根据你的实际情况发生变化,为了解决这个问题,我们找到了custom_platform_toolkit中的acl_pcie_device.cpp文件,

可以看到,相关报错的位置在1023行

image.png

错误信息提示说在PCIe到FPGA的读取测试中,读取的值为0xFFFFFFFF,这是一个表示无效值的16进制数(-1的补码)。这种情况通常意味着读取操作失败,或者与FPGA通信出现问题。

我们根据源码往前回溯,

image.png

version_id_test()这个函数其实是一个Pcie读操作,读取的是版本ID,并进行比对。

从比对的逻辑出发,出现报错的原因无非三种:

1、预设的版本ID本身就是错误的。

2、实际读取的版本ID与预设的不一致。

3、比对的算法有问题。


第3点的发生的可能性几乎为零,该SDK都迭代了这么多版本了。所以我们可以从1-2入手。

当然这里也可以推一下3可能出现错误的地方:a)m_io->version->read32读取时的寄存器地址错了。b)编译环境导致了溢出的发生。c)用户修改错误了sdk。


对于1来说,

unsigned int version = ACL_VERSIONID ^ 1;

根据《Intel® FPGA SDK for OpenCL™: Intel® Arria® 10 SoC Development Kit Reference Platform》1.5章我们得知hw_pcie_constants.h中包含了ACL_VERSIONID信息,

image.png

很明显也和读取的0xFFFFFFFF完全没有关系。我们通过工具编译后的mmd文件是否可能存在问题?比如说没有更新,或者使用的错误的文件。这是可以检查的地方之一,虽然我觉得发生的概率不大。


对于2来说,读取到的版本与预设的不一致,这可能是如下几方面的原因:

a、读写存在问题。

b、FPGA没有烧录正确的SOF。

c、SOF存在时序问题。


对于读写存在问题分为两方面,一个是硬件上的问题,一个是软件上的问题,对于硬件上面的问题来说,你可以尝试使用官方的Pcie,DDR4的Demo工程,也可以更换一台电脑或者板卡来测试,看看是否发生了问题,如果是硬件问题,就考虑更换硬件。在另外一个方面,一般来说根据硬件设计的不同,板卡有多种启动方式,这代表着FPGA的启动可能会需要1-10s,如果在启动前进行通信,可能会发生错误。

对于软件上的问题,检查驱动安装是否正确,或者说是否安装了正确的驱动,可以查看设备管理器中板卡的驱动安装状态。也可以尝试更换到Linux下继续。


另外,你也可以尝试重新编译工程,然后下载sof文件,防止烧录了错误的sof文件。或者烧录过程中发生了错误。


对于SOF时序问题的检查和排除方法,虽然Quartus在编译后会给出通过了基本工况下的SOF文件,但是由于板卡的设计问题,可能会导致散热问题,你可以在断电后摸一下板卡是否烫手,如果烫手,可能会发生时序问题,可以增加散热风扇解决。


如果问题仍然存在,可以联系你的板卡提供商的FAE,或者在intel论坛发帖,写清楚你已经排除了的问题,和具体的现象。

扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:http://myfpga.cn/index.php/post/321.html

分享给朋友:

“OpenCL运行报错分析与解决MMD INFO : [board0] PCIe-to-fabric read test failed, read 0xffffffff after 1 attempt” 的相关文章

Intel N3000 PAC开发板 Arria10FPGA 100G智能网卡 支持PCIE程序上传/调试 OpenCL OPAE

Intel N3000 PAC开发板 Arria10FPGA 100G智能网卡 支持PCIE程序上传/调试 OpenCL OPAE

近期,从小黄鱼上收了两块N3000的Intel PAC板子,FPGA型号和Microsoft 1768那个差不多,区别是这个支持100G网口,但是DDR4只有9G(组合后为9G)。型号是10AT115S1F45E1SG先把坑说前面,解决了能减少很多麻烦:To compile an AFU using...

使用Vitis HLS实现和优化Conv2D函数

使用Vitis HLS实现和优化Conv2D函数

现代卷积神经网络(CNNs)中,卷积操作(Conv2D)是最基本且计算量集中的部分。为了在嵌入式系统和FPGA平台上加速这一计算,我们可以利用Xilinx的Vitis高层次综合(HLS)工具。本文将介绍如何使用Vitis HLS实现一个基础的卷积操作,随后进行各种优化以提高其性能。一、基础实现我们首...

 使用Vitis HLS实现和优化DethSepConv函数

使用Vitis HLS实现和优化DethSepConv函数

1初版功能验证1.0设计框图+-----------------------------------+ |            Input Data &nb...

通俗易懂的Quartus HLS vs Vitis HLS 优化技巧及对比

通俗易懂的Quartus HLS vs Vitis HLS 优化技巧及对比

随着深度学习应用的普及,FPGA作为强大且高效的硬件加速器,其高性能和低延迟特性备受关注。为了简化FPGA开发流程,高级综合工具(HLS)如Intel的Quartus HLS和Xilinx的Vitis HLS相继推出,为用户提供了基于C/C++的编程方式,从而降低了开发门槛。然而,如何使用这些工具进...

使用Vitis HLS实现和优化SPECK加解密函数

使用Vitis HLS实现和优化SPECK加解密函数

设计代码如下:// speck_hls.cpp #include "ap_int.h" // 定义密钥和回合数 #define WORD_SIZE 16 #define KEY_SIZE 4 #d...