Как рассчитать обратный грех (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.