Как добавить LUT в VHDL для генерации синуса - PullRequest
0 голосов
/ 12 июня 2019

Я сделал передатчик I2S для генерации «звука» из моей FPGA. Следующий шаг, который я хотел бы сделать, это создать синус. Я сделал 16 образцов в LUT. У меня вопрос, как реализовать что-то подобное в VHDL. А также, как вы загружаете образцы в последовательности. Кто это уже пробовал и может поделиться своими знаниями?

Я создал таблицу подстановок с 16 образцами:

0               0π
0,382683432     1/16π
0,707106781     1/8π
0,923879533     3/16π
1               1/4π
0,923879533     5/16π
0,707106781     3/8π
0,382683432     7/16π
3,23114E-15     1π
-0,382683432    1 1/16π
-0,707106781    1 1/8π
-0,923879533    1 3/16π
-1              1 1/4π
-0,923879533    1 5/16π
-0,707106781    1 3/8π
-0,382683432    1 7/16π
-6,46228E-15    2π

1 Ответ

1 голос
/ 12 июня 2019

Самое простое решение - сделать ПЗУ, которое является просто большой заявкой.

Инструменты синтеза FPGA отобразят это на большее или большее количество LUT.

Обратите внимание, что только для больших таблиц 1 /4 волны сохраняется, остальные значения выводятся.


Я хотел бы отправить 24-битные сэмплы, вы также знаете, как сделать это с этими данными (двоичными!)?

24 бит(подписано) означает, что вы должны преобразовать значения с плавающей запятой в целочисленные значения в диапазоне -8388608..8388607.(Для симметрии вы бы использовали -8388608..8388607)

Таким образом, умножьте значения синуса (которые, как вы знаете, находятся в диапазоне -1..1) на 8388607.

Частотасинус зависит от того, как быстро (сколько образцов в секунду) вы отправляете.

...