Я дам это как полный ответ, а не как комментарий, как похожий вопрос, возникший недавно: Доступ к миллиону битов
На самом деле то, что вы спрашиваете«Как я могу получить доступ к 2d-массиву в строке и в режиме столбца».
Это возможно только в том случае, если массив полностью сделан из регистров.
Как только у вас будет много битов, слишком много, чтобы хранить их в регистрах, вам придется прибегнуть к воспоминаниям.Так как же вам получить доступ к строкам и в столбцах в памяти?
И ответ очень неудовлетворительный: «Вы не можете».
К сожалению,Память реализована в виде длинных рядов битов, а аппаратное обеспечение позволяет выбирать только одну строку за раз.Чтобы получить доступ к столбцам, вы должны пройтись по адресам, прочитав одну строку и выбрав нужные столбцы.Это означает, что чтение одного элемента столбца стоит один такт.
Первый способ ускорить процесс состоит в использовании двухпортовой памяти.Все воспоминания о ПЛИС, которые я знаю, все портированы.Таким образом, вы можете выполнять две операции чтения с разных адресов одновременно.
Вы также можете ускорить доступ, сохраняя две строки за раз.Например, массив 8x8 байтов может быть сохранен как 16x4, и чтение дает вам доступ к двум строкам одновременно и, таким образом, к двум элементам столбца.(Но это приводит к уменьшению отдачи, в результате вы снова получаете один огромный ряд регистров.)
Комбинируя это с двухпортовым доступом, вы получаете четыре столбца за такт.
Так же, как последнее предупреждение, которое также упомянуто в приведенной выше ссылке: FPGA имеют два типа памяти:
- Синхронная запись и асинхронное чтение, для которых они должны использовать LUT..
- Синхронная запись и чтение , для которых они могут использовать банки внутренней памяти.
Последние имеют наибольший объем памяти.Таким образом, если вы напишите свой код для использования первого, вы можете быстро найти себя вне ресурсов.