Я пытаюсь записать некоторые данные в двухпортовый BRAM и прочитать их из PL.Я создал настроенную BRAM из каталога IP и поместил ее в оболочку, чтобы использовать ее на блок-диаграмме.Ширина PORTA - 32-разрядная, а ширина PORTB - 256-разрядная.Мне нужно передать 1024 8-битных значений, поэтому глубина PORTA равна 256 (8 бит), а глубина PORTB равна 32 (5 бит).Я использую стандартный BRAM-контроллер в 32-битном режиме (глубина 2048, но это не должно иметь значения?).
Блок-схема
Для записи данных вBRAM через AXI-интерфейс я использую функцию Xil_Out32(BASE_ADDR+0, 0xFFFFFFFF)
.Когда я хочу получить доступ к следующим 32-битным данным в BRAM, используйте Xil_Out32(BASE_ADDR+4, 0xFFFFFFFF)
.+4 потому что память выровнена по байту, верно?(Когда я использую +1, моя программа падает).
Чтобы прочитать данные из BRAM через PL, я просто помещаю адрес в addrb[4:0]
и получаю свои данные двумя тактами позже из doutb[255:0]
.Потому что "addrb" только 5 бит, это не может быть выровнено по байту, поэтому каждый раз, когда я добавляю +1 к addrb, я получаю следующие 256 бит из BRAM, верно?.
ОК.Теперь к моей проблеме: я выполняю следующее на PS:
Xil_Out32(BASE_ADDR+0, 0xFFFFFFFF);
Xil_Out32(BASE_ADDR+4, 0xAAAAAAAA);
и читаю адрес 0x00 на моем 256-битном выходе из PL, вывод выглядит так:
0x000000000000000000000000AAAAAAAA000000000000000000000000FFFFFFFF
Я такжеПоместите это в небольшую диаграмму, чтобы сделать ее более понятной:
Описание проблемы
Я надеюсь, что кто-то может направить меня в правильном направлении ...