在 Xilinx Vivado 中映射大小大于 4MB 的 PCIe BAR 区域
Posted
技术标签:
【中文标题】在 Xilinx Vivado 中映射大小大于 4MB 的 PCIe BAR 区域【英文标题】:Mapping PCIe BAR regions of size greater than 4MB in Xilinx Vivado 【发布时间】: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,有效地指定所需的地址空间。”另见***.com/a/39618552/1076479 【参考方案1】:解决方案
我一直在使用 Xilinx SDK 对 FPGA 进行编程。但它的 SDK 总是加载一个旧的比特流。我通过 Vivado 本身对 FPGA 进行编程解决了这个问题。
工具 > Xilinx 硬件管理器 > 打开目标 > 自动连接 > 编程设备
致谢:Mandar Datar(HPC 实验室,EE 部,IIT Bombay)
【讨论】:
以上是关于在 Xilinx Vivado 中映射大小大于 4MB 的 PCIe BAR 区域的主要内容,如果未能解决你的问题,请参考以下文章
安装xilinx ise后,会出现多个应用程序比如vivado,vivado HLS, xilin
Xilinx Vivado CORDIC IP核求解atan 反正切