在 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 FPGA开发环境vivado使用流程

安装xilinx ise后,会出现多个应用程序比如vivado,vivado HLS, xilin

vivado 中如何使用chipscope

Xilinx Vivado CORDIC IP核求解atan 反正切

xilinx vivado:从tcl中读取组件.xml文件到项目中。

xilinx新一代fpga设计套件vivado应用指南 怎么样