Вы сказали: «У меня есть значение в формате с плавающей точкой одинарной точности IEEE 754». Я бы определенно постарался избежать использования чисел формата IEEE. Это делает вещи ненужными сложными. Я не знаю, откуда взялась эта цифра или как вы ее взяли в FPGA, но первое, что нужно сделать, это попытаться преобразовать ее в формат с фиксированной запятой.
Xilinx имеет готовый для вас код Cordic для Arc Tan
. Это сделало бы вашу жизнь намного проще. Как и ожидалось, он не принимает числа IEEE, но работает с «знаковыми дробями» и точными размерами от 8 до 48 бит. Вы должны получить руководство по Cordic IP и прочитать, что он может сделать. Я еще не видел Cordic-код для asin
.
Возможно, вам придется приложить некоторые усилия для управления вводом / выводом, поскольку IP работает только с потоковыми интерфейсами AXI4.
Что меня удивляет, так это то, что вы предоставляете пример кода на C, но говорите об использовании VHDL. Я ожидаю, что кто-нибудь, знакомый с C, будет использовать (System) Verilog, поскольку языки очень, очень близки. Также есть риск расстроить некоторых людей: если это вообще возможно, используйте System Verilog. В Verilog было несколько больше итераций, чем в VHDL, и он намного ближе к тому, как используются современные языки в наши дни.