У меня есть особенно большое преобразование обработки сигналов, которое нужно перенести из matlab в VHDL. Это определенно требует некоторого разделения ресурсов. Немного расчета дал мне следующее:
- 512 ффтов по 64 очка
- 41210 операций многократного добавления
Учитывая, что самая большая FPGA Virtex 6 имеет ~ 2000 блоков DSP48E, я знаю, что могу разделять ресурсы, чтобы повторно использовать ресурсы несколько раз. Время выполнения на самом деле не является проблемой, время обработки может быть относительно длительным с точки зрения FPGA.
Глядя на использование ресурсов, использование архитектуры radix-2 lite дает мне блоки 4dsp / FFT = 2048 блоков DSP, всего ~ 43k. самая большая Virtex FPGA имеет 2 тыс. блоков или 20 операций / мукс.
Очевидно, что включение таких больших муксов в ткань также займет кусочки. Где я могу найти верхний предел этого предела? Я не могу бесконечно делиться ресурсами ПЛИС. Множители 41210 слишком велики? Как рассчитать слишком большой размер?
Я также посмотрел на другие ресурсы (ломтики, Брамс и т. Д.). Radix-2 Lite также дает 4 x 18 тыс. Брэмов / фут = 2048 брэмов. Самая большая FPGA Xilinx содержит 2128 брэмов. очень пограничный Я обеспокоен тем, что мой дизайн слишком велик.
ОБНОВИТЬ:
Еще немного информации о самом дизайне. Я не могу вдаваться в подробности, но вот что я могу дать:
Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host
^------re-calculate initial conditions----|
спецификация выходных данных: "быстрее, чем симуляция Matlab"
Мудрый расчет, вот где я нахожусь:
БПФ этап: легко. Я могу реализовать 1/2/4/8 БПФ, сохранить результаты в SDRAM и получить доступ позже. Относительно маленький, даже если это займет много времени, все в порядке. используя radix-2 lite, я могу получить 2 DSP48Es и 2 18k BRAMS / FFT. потоковая передача дает 6 DSP48Es 0BRAMS / FFT. в любом случае, 64-разрядное БПФ мало с точки зрения ресурсов ПЛИС.
Множители : это моя проблема. Входные данные умножения берутся либо из справочных таблиц, либо из данных БПФ. Это действительно целая куча многократных добавлений. Там не так много, чтобы оптимизировать. Не фильтр, но имеет характеристики, похожие на фильтр.
Учитывая совместное использование ресурсов в FPGA, математика работает следующим образом: один LUT-6 может использоваться в качестве 4-полосного мультиплексора. Формула для N-way, M bit mux выглядит следующим образом:
N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).
хруст числа для моей реализации не дает хороших результатов. 90% семейства virtix-6 не имеют достаточного количества срезов для совместного использования ресурсов DSP для выполнения операций по 40 тыс.