¿Existe un tipo nativo en el lenguaje VHDL similar a std_logic_vector que permita crear un número de punto fijo firmado o sin firmar para una longitud dada de partes enteras y fraccionarias? Si es así, ¿se puede sintetizar?
¿Cómo se ven las cantidades de punto fijo en la ventana de onda en el banco de pruebas? ¿Es necesario crear una variable de tipo real y luego usarla para representar la cantidad de punto fijo después de la conversión manual?
¿Existen funciones en VHDL 2008 para la conversión hacia y desde punto fijo y tipo real VHDL?
Si desea implementar aritmética de punto fijo en VHDL sintetizable , tiene dos formas:
std_logic_vector
s. Por supuesto, debe implementar operaciones matemáticas básicas (suma, resta, etc.).fixed_pkg
, implementa tipos de puntos fijos firmados y no firmados y todas las matemáticas básicas, más aquí .Pero antes que nada, ¿ realmente necesita tipos de punto fijo (o flotante)? La mayoría de las matemáticas se pueden hacer en std_logic_vector
, tal como lo hacemos en los microcontroladores usando int
tipos.
EDITAR:
Desafortunadamente, el enlace a las bibliotecas dentro de la guía en pdf del enlace anterior está inactivo. Alguien borre los archivos. Pero no debería ser un problema: actualmente todas ieee_proposed
las bibliotecas se han movido al estándar VHDL2008, así que simplemente cambie el estándar utilizado en las propiedades de Su proyecto.
std_logic_vector
para cada número (y solo recuerde dónde está el "punto"), será exactamente lo mismo que usar ordinario int
en C.¿Cuál es la forma estándar de representar números de punto fijo en VHDL?
No hay ninguno.
"Punto fijo" es una interpretación de un número. La pantalla de forma de onda interpreta el vector binario de cierta manera. No sé si puedes cambiar esa interpretación (en Xilinx Vivado, puedes, hasta cierto punto, con un clic del botón derecho del mouse...), pero básicamente no vale mucho: para todos los medios y propósitos, tú use números de punto fijo para poder tratar cantidades fraccionarias como números enteros.
Eugenio Sh.