Создание многопортового блочного ОЗУ в Vivado + Verilog

Я хочу сделать свертки в моем FPGA. У меня есть массив, в котором хранится изображение, которое затем выводится на экран через VGA. Я хочу вычислить свертку в момент тактирования пикселя, так что мне нужны только множители размера ядра свертки.

Однако я не знаю, как мне создать блочную память, чтобы я мог получить доступ, например, к 9 адресам (если я использовал сверточное ядро ​​3x3) одновременно. Возможно ли это в Вивадо? В настоящее время я использую генератор Block Ram.


person Skusku    schedule 23.10.2019    source источник
comment
Вы можете попробовать изучить это.   -  person champion-runner    schedule 23.10.2019


Ответы (1)


Лучшее, что вы можете сделать, это прочитать два значения с двух разных адресов, и для этого вы должны использовать двухпортовую оперативную память.

Но в большинстве случаев вам нужен один порт для записи видеоданных и второй порт для их чтения.

Чтобы прочитать 9 локацию, вам нужно:

  • Иметь 9 разных воспоминаний
  • Убедитесь, что все данные находятся по одному адресу, и увеличьте память в 9 раз.

Но надежда еще есть.
В видео вы получаете горизонтальные пиксели один за другим. Это означает, что для свертки 3x3 вы можете построить три небольших 3-этапных пиксельных конвейера из регистров:

введите здесь описание изображения

(Да, я добавил код в Vivado и использовал для этого разработанную схему)

Теперь у вас есть доступ к данным 9 пикселей за раз. Вы даже можете пропустить один этап, но это может нарушить синхронизацию свертки.

Последний демпфер
Это выглядит так просто, но для этого вам нужно иметь доступ к данным трех видеострок одновременно. Таким образом, «все», что вам нужно сделать сейчас, это построить систему, которая запоминает данные для двух строк, и как только вы дойдете до третьей строки, перечитаете данные из предыдущих двух строк и поместите их с данными строки 3 в маленькую строку. показанная выше система. Таким образом, вам потребуется как минимум 2 независимых двухпортовых банка памяти, каждый из которых может содержать одну строку видеоданных.

Я знаю, что это работает, потому что я построил что-то подобное на прошлой неделе.

person Oldfart    schedule 23.10.2019