Лучшее, что вы можете сделать, это прочитать два значения с двух разных адресов, и для этого вам нужно использовать двухпортовый ОЗУ.
Но в большинстве случаев вам нужен один порт для записи видеоданных ивторой порт для чтения.
Чтобы прочитать 9 местоположений, вы должны либо:
- иметь 9 разных ячеек памяти
- Убедитесь, что все данные находятся в одном адресе иувеличьте объем памяти в 9 раз.
Но надежда все еще есть.
В видео вы получаете горизонтальные пиксели один за другим. Это означает, что для свертки 3х3 вы можете построить три небольших трехступенчатых пиксельных конвейера из регистров:
![enter image description here](https://i.stack.imgur.com/IwPMD.png)
(Да, я поставил несколькокод в Vivado и использовать разработанную схему для этого)
Теперь у вас есть доступ к данным 9 пикселей за один раз. Вы можете даже пропустить один этап, но это может нарушить время свертки.
Конечный демпфер
Это выглядит так просто, но для этого вам необходим доступ к данным три видео строки одновременно. Таким образом, «все», что вам нужно сделать сейчас, - это создать систему, которая запоминает данные для двух строк, и как только вы попадете в строку три, перечитайте данные из предыдущих двух строк и поместите их с данными строки 3 в маленькую строку. Система показана выше. Таким образом, вам нужно как минимум 2 независимых банка памяти с двумя портами, каждый из которых может хранить одну строку видеоданных.
Я знаю, что это работает, потому что я создал нечто подобное на прошлой неделе.