Как рассчитать обратный грех (arcsin) в VHDL?

Я использую Altera De0 nano Soc FPGA и Quartus 16.1 lite edition. После поиска в интернете я обнаружил, что sin, cos а также atan Ядро CORDIC IP от Altera можно использовать напрямую. А также найденную таблицу поиска (LUT) можно использовать как sin или cos (в основном доступно в google), но как получить sin обратный ( ARCSIN ) в VHDL ? Я нашел sin а также cos справочная таблица, есть ли способ генерировать sin обратный?

2 ответа

Решение

Да, можно создать таблицу поиска для arcsin,

1) Определите точность ввода, другими словами, сколько значений вы хотите сохранить в вашей справочной таблице. Например, вам нужно сохранить 11 значений, если ваша точность равна 0,1.

arcsin(0), arcsin(0.1), arcsin(0.2), ..., arcsin(1).

2) Найти результаты функций arcsin. Вот источник, который я нашел путем поиска в Google.

arcsin(0)   = 0
arcsin(0.1) = 5.7
arcsin(0.2) = 11.5
...
arcsin(1)   = 90

3) Определите точность вывода.

Если точность равна 1, все значения округляются до целых.

arcsin(0.1) = 6
arcsin(0.2) = 12

Если точность равна 0,5, результаты будут такими, как показано ниже. Выход требует 9-битный размер для этой точности. 8 бит для целой части и 1 бит для дробной части.

arcsin(0.1) = 5.5
arcsin(0.2) = 11.5

4) Сопоставить входные значения с адресами справочной таблицы. Например, это должно быть как ниже для точности 0,1. Этот пример не требует дополнительной таблицы поиска или большой логики для сопоставления адресов.

0   -> 0
0.1 -> 1
0.2 -> 2
...
1   -> 10

5) Реализуйте эту таблицу поиска в VHDL, как те, что вы нашли для sin или же cos,

Да, есть.

Например, используя CORDIC... Один из моих первых просмотров в Google: обзор алгоритмов CORDIC для компьютеров на базе FPGA.

Другие вопросы по тегам