Usar valores flotantes en código VHDL

Supongamos que quiero tener una señal sinusoidal continua como entrada a mi código VHDL. Los valores serán de tipo float ya que tomará valores no enteros por ejemplo: 10.5 mA.

¿Cómo administro estos números en mi código VHDL?

Intenté usar: type Voltage_Level is range -5.5 to +5.5;como ejemplo, pero no funcionó porque no pude importar el vector firmado en Voltage_level ya que Voltage_level debe representarse como una señal.

Agradecería si alguien pudiera ayudar con este tipo de problemas? ¿Cuál es la forma más fácil de lidiar con esto?

El problema básico es cuando ingreso valores no enteros, digamos 10.5 y trato de usar el mismo valor que la entrada, el FPGA genera un número entero redondeado, en este caso 10. Entonces parece que puedo usar VHDL solo cuando trato con números enteros y vectores de bits, que es un escenario de uso muy limitante. Especialmente para personas como yo que trabajamos mucho con varios tipos de señales.

10,5 mA son 1050 µA. ¡Voila! un entero O bien, puede optar por pensar en ello como 21 medios miliamperios o 42 cuartos de miliamperios. Además, ambos números enteros. La solución a su problema podría ser simplemente una cuestión de elegir el factor de escala correcto.
En lugar de modificar las cosas para hacer que los números enteros encajen (lo cual es viable pero quizás feo), puede usar las bibliotecas de punto fijo (o punto flotante) sintetizables en VHDL-2008. Si es solo simulación, solo declarasubtype Voltage_level is real range -5.5 to 5.5;
@SolomonSlow Solo un pequeño error: 10,5 mA es 10500 µA, no 1050 µA, eso sería 1,05 mA.

Respuestas (1)

Intente usar la notación de punto fijo en su lugar. El punto flotante es un poco tedioso en VHDL. Dado que su rango no es amplio, puede usar la representación de punto fijo. Para ver más sobre la visita de punto fijo: http://vhdlguru.blogspot.in/2010/03/fixed-point-operations-in-vhdl-tutorial.html

No puedo acceder al sitio eda-stds.org que tiene el enlace de descarga del paquete. Ya estoy usando ieee.numeric_std.all; y math_real, según github.com/peteut/vhdl2008c , deberían habilitar números de punto fijo. Pero cuando escribo ufixed en mi código, no se reconoce como una función.
Algunos afirman que fixed_pkg no es compatible con VHDL2008
Uso "ieee.fixed_pkg.all;" pero el compilador dice: La biblioteca de diseño IEEE no contiene la unidad principal "fixed_pkg", aunque tengo el paquete en mi directorio de biblioteca quartus.