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