【发布时间】:2018-12-06 07:09:51
【问题描述】:
我们正在使用 Xilinx Vivado 在 VC709 FPGA 中开发一个带有定制处理器、Microblaze 和一些外围设备的系统。我们在“AXI Bridge for PCI express gen 3”中使用了两个“PCIe:BAR”。
我们在 PCI express 块的块配置中所做的更改不会反映在主机端。
例如,当我们将 BAR0 设置为 2GB 并将 BAR1 设置为 2MB 时,我们会得到 4KB 和 4MB 两个区域。当我们尝试不同的 BAR 组合时,这并没有改变。
$lspci -vv
0a:00.0 Memory controller: Xilinx Corporation Device 7038
Subsystem: Xilinx Corporation Device 0007
Physical Slot: 3
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 16
Region 0: Memory at fbff0000 (32-bit, non-prefetchable) [size=4K]
Region 1: Memory at fb800000 (32-bit, non-prefetchable) [size=4M]
Capabilities: <access denied>
Kernel modules: riffa
如何调试它?
【问题讨论】:
-
你应该设置“prefetchable”。大多数系统不可能为 2 GB 不可预取的 BAR 腾出空间,因为它需要位于地址空间的低 4 GB 中。请参阅 PCIe 4.0 规范第 704 页上的实施说明。 (不确定 3.0 规范的哪一页。)
-
@prl 注意。但即使我们尝试使用 4MB 和 16MB 的结果也是一样的。
-
这应该基于设备如何响应对 BAR 寄存器的写入。来自 PCI 规范:“上电软件可以通过将全 1 的值写入寄存器然后读回该值来确定设备需要多少地址空间。设备将在所有无关地址位中返回 0,有效地指定所需的地址空间。”另见stackoverflow.com/a/39618552/1076479
标签: fpga xilinx vivado pci-e xilinx-ise