多块板Windows设备管理器提示资源冲突,错误代码为12

问题描述

我在系统中插入了多个相同的板。设备PCIe通过Xilinx IP内核实现。对每个FPGA程序进行编程后,请手动刷新设备管理器,以检查设备和驱动程序是否正常工作。

我的困惑是,这种方法似乎只能同时在两个板上使用。在对第三块板进行编程之后,然后刷新任务管理器,系统提示资源不足,“此设备找不到足够的可用资源(代码12)”

我试图禁用其他两个板,但是设备仍然提示冲突。我不知道如何查询有冲突的资源。

我的板上有2个BAR(BAR0:2KB,BAR1:16MB)和1个IRQ。

enter image description here

我做了一些实验,觉得这是由内存资源冲突引起的。冲突的一方是主板随附的AMD集成显卡。 1st,2nd,3rd都表示我的董事会编号。

enter image description here

由于冲突而无法识别第三名。

关闭它后,我插入了所有三个板,然后再次将其打开。结果,在启动过程中,系统突然断电后又重新启动,然后所有三块板都正常。这时发现显卡的内存地址已更改

enter image description here

我想知道如何解决冲突?修改我的驱动程序代码或FPGA配置?

解决方法

PCIe枚举应该解决内存分配问题,但是有几个实现问题需要注意。举例来说,我使用的Xilinx XDMA的大小为2GB的64位BAR,实际上是用DELL XPS主板砌成的。但是我在IBM系统上也做过同样的事情,但是它确实有效。这里的要点是枚举可以通过固件,硬件或操作系统驱动的事件来完成。如果您做硬件管理器,那听起来像是由操作系统驱动的,但是当我敬酒XPS板时,那是与BAR大小相关的某种固件问题,导致永久性故障。 16MB并不大,应该不成问题,但是我建议您先使用Xilinx默认值并在其中显示可靠性。我认为这是1M的BAR。我已经以1MB的速度运行3x 64位BARS,没有问题,但保持简单并显示可靠性。然后向上移动。这将有助于隔离系统是否脆弱。

我已经看到某些系统使用基于FW的枚举,这种枚举在FPGA配置之前就非常快,在这种情况下,没有PCIe目标是ID。如果您经常发现在加电时未检测到FPGA,但在重新扫描时检测到了FPGA,则可能是一种症状。如何解决这个问题有点麻烦。我们最终使用了部分重新配置。从PCIe接口开始,然后进行重新配置以加载剩余的映像。希望这不是这个问题

接下来要知道的是FPGA中的复位机制。您可能将PCIe IP复位挂接到了总线复位上,这很棒,但是,我过去也曾把该复位挂接到内部PLL锁定信号上,而该信号可能无法启动。出于故障排除的目的,请使该重置保持简单,并去除其他所有内容,以证明仅PCIe IP本身才是可靠的。

您在这里也必须小心。如果将东西剥离,请确保它干净。如果您忽略PLL锁定并尝试使用Xilinx驱动程序(例如XDMA驱动程序),则它具有一个例程,在该例程中它将尝试通过数据事务来标识XDMA。它一次寻找一个DMA BAR。但是这样做时,如果BAR不是XDMA控制BAR,则它尝试的事务可能会在AXI总线上断开。如果在发生这种情况时AXI总线未复位或未计时,则您将锁定AXI总线,而我已经多次用这种方法锁定了Linux系统。 AXI要求交易完成,否则就坐在那儿等待。

顺便说一句,在Linux机器上,您可以查看内核日志中的枚举输出。我不确定Windows是否显示相同的内容。但这会很有帮助,如果您看到该设备最初是被探测到的,但是随后在配置寄存器中检测到无效的东西,而根本看不到。

有几件事要看。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...