Есть ли способ хранить матрицу миллионов бит на ПЛИС? - PullRequest
0 голосов
/ 03 апреля 2019

Я работаю над реализацией канального декодера на ПЛИС.По сути, проблема сводится к следующему:

1) У меня есть матрица.Я делаю некоторые вычисления на строках.Затем я делаю некоторые вычисления на столбцах.

Декодер в основном подбирает каждую строку матрицы, выполняет некоторые операции и переходит к следующей строке.То же самое происходит со столбцами.

Однако декодер работает с матрицей 1023 * 1023, то есть у меня 1023 строки и 1023 столбца.

Небольшой тестовый пример, который работает: я сначала создал reg [1022: 0] product_code [0: 1], то есть 2 строки и 1023 столбца.Вывод соответствует ожидаемому.Тем не менее, использование LUT составляет примерно 9 процентов.Затем я увеличиваю размер до 10 строк и 1023 столбцов (reg [1022: 0] product_code [0: 9]), что тоже работает, как и ожидалось.Но использование ресурсов возросло до 27 процентов.

Теперь моя цель - получить 1023 строки и 1023 столбца.Я даже не синтезирую.Есть ли лучший способ хранить такую ​​матрицу на ПЛИС?

Буду очень признателен за любые отзывы !!!

1 Ответ

2 голосов
/ 03 апреля 2019

Вы можете узнать объем памяти, который имеет ПЛИС, из спецификации производителя.Однако эти воспоминания легко настраиваются.

Таким образом, память размером 36 бит может использоваться в качестве блоков 36x1, 18x2 или 4x9.В качестве альтернативы вы можете прочитать единицы измерения, например, 36 бит, но разбить данные самостоятельно на 8 единиц по 4 бита.Обработайте каждый клочок отдельно и снова напишите все обратно.

Убедитесь, что вы используете синхронную память, поскольку все большие блоки памяти во всех ПЛИС являются синхронными.Если вы начинаете использовать асинхронную память, память должна быть построена из LUTS, и вы очень быстро заканчиваете работу.

Также помните, что при обработке строк и столбцов необходимо учитывать, как хранятся данные.Например, вы можете хранить данные построчно.Используя в качестве примера клев: когда вы читаете одну запись в памяти, это дает вам строку из 8 клевов.Но в режиме столбца одно чтение дает вам первые 8 записей из 8 смежных столбцов.Поэтому в идеале вы должны параллельно обрабатывать 8 столбцов.

...