Сопоставление областей PCIe BAR размером более 4 МБ в Xilinx Vivado

Мы разрабатываем систему со специальным процессором, Microblaze и некоторыми периферийными устройствами на VC709 FPGA с использованием Xilinx Vivado. Мы используем два «PCIe: BAR» в «Мосте AXI для PCI Express Gen 3».

Изменения, которые мы вносим в конфигурацию блока PCI Express, не отражаются на стороне хоста.

Например, когда мы устанавливаем BAR0 на 2 ГБ и BAR1 на 2 МБ, мы получаем две области: 4 КБ и 4 МБ. И это не изменилось, когда мы попробовали различные комбинации 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

Как мне отладить это?


person vineeshvs    schedule 06.12.2018    source источник
comment
Вы должны установить «prefetchable». Большинство систем не могут выделить место для BAR размером 2 ГБ без предварительной загрузки, потому что он должен находиться в 4 ГБ адресного пространства. См. Примечание по реализации на странице 704 спецификации PCIe 4.0. (Не уверен, на какой странице спецификации 3.0.)   -  person prl    schedule 06.12.2018
comment
@prl Отметил. Но даже когда мы попробовали с 4 МБ и 16 МБ, результат был таким же.   -  person vineeshvs    schedule 06.12.2018
comment
Это должно основываться на том, как устройство реагирует на запись в регистры BAR. Из спецификации PCI: Программное обеспечение включения питания может определить, сколько адресного пространства требуется устройству, записав значение всех единиц в регистр и затем прочитав это значение обратно. Устройство вернет 0 во всех адресных битах, не требующих внимания, что фактически указывает необходимое адресное пространство. См. Также stackoverflow.com/a/39618552/1076479   -  person Gil Hamilton    schedule 07.12.2018


Ответы (1)


Решение

Я использовал Xilinx SDK для программирования FPGA. Но SDK всегда загружал старый битовый поток. Я решил это, запрограммировав ПЛИС через сам Vivado.

Инструменты> Диспетчер оборудования Xilinx> открытая цель> автоподключение> программное устройство

Кредиты: Мандар Датар (Лаборатория высокопроизводительных вычислений, Департамент ЭЭ, ИИТ Бомбей)

person vineeshvs    schedule 15.12.2018