¿Cuál es la forma estándar de representar números de punto fijo en VHDL?

¿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?

No hay bibliotecas de punto fijo estándar (o representaciones) en VHDL.

Respuestas (2)

Si desea implementar aritmética de punto fijo en VHDL sintetizable , tiene dos formas:

  1. Hazlo tu mismo. Es un método bastante difícil, pero puede depender de la cantidad y complejidad de las ecuaciones que desea implementar. En general, cada "variable" debe tener dos partes (integral y fraccionaria) compuestas de std_logic_vectors. Por supuesto, debe implementar operaciones matemáticas básicas (suma, resta, etc.).
  2. Simplemente descargue y use el paquete 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 inttipos.

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_proposedlas bibliotecas se han movido al estándar VHDL2008, así que simplemente cambie el estándar utilizado en las propiedades de Su proyecto.

Lamentablemente, si sigue el rastro en el enlace "más aquí", lo llevará a un callejón sin salida.
Tengo que dibujar el conjunto de mandelbrot y, por lo tanto, los necesito. ¿Cuál es la diferencia entre fixed_pkg y fixed_generic_pkg?
¿Por qué no usar simplemente std_logic_vector y asegurarse de que se desplaza correctamente antes y después de todas las operaciones aritméticas? Me sorprende tu descripción de tener que crear dos partes para cada número.
@ quantum231 Si usa uno std_logic_vectorpara cada número (y solo recuerde dónde está el "punto"), será exactamente lo mismo que usar ordinario inten C.
@vicatcu ¿Qué pasa? ¿Hay un PDF de 15 páginas en el enlace?
Recibo muchos archivos que se muestran en mi teléfono móvil desde este enlace. Se abrirá una vez que llegue a casa.
Bien, revisé el archivo, la pregunta principal que tengo es, si estoy usando bloques de IP del catálogo de IP de Altera Quartus para funciones aritmáticas, ¿cómo se asignarán sfixed y ufixed a ellos? probablemente estas IP no están diseñadas para ser asignadas a puertos sfixed y ufixed.
@JakubRakus el primer enlace en el PDF es un enlace muerto: vhdl.org/fphld/vhdl.html -> lleva a un 404
@vicatcu Ya veo, alguien eliminó los archivos, hace aproximadamente un año estaban allí ... He agregado una edición a mi respuesta.
@ quantum231 Desafortunadamente, nunca he usado los bloques de IP de Altera y no sé cómo funcionan.

¿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.

¿El uso de la cantidad fijada y fijada no es un método estándar? Después de todo esto es para lo que fueron creados, ¿verdad?
No. El objetivo de usar HDL es que tiene la libertad de elegir cualquier formato que se ajuste a su aplicación. Por lo tanto, cualquiera que le diga "este es un formato estándar" no ha entendido que usted parametriza su diseño HDL para su algoritmo, y no al revés.
Creo que las palabras 'método estándar' se entienden como 'método típico' y no como 'definido por un estándar' :-) Tienes libertad para elegir, pero la gente tiende hacia algunos métodos familiares y de uso frecuente.
@TonyM exactamente lo que estoy diciendo. Si elige algo, porque es "de uso frecuente", entonces no está haciendo el baile "el diseño sigue los requisitos", está haciendo el "soy perezoso, dame algo que pueda funcionar, compraré el siguiente FPGA más grande para hacer que encaje y espero que funcione lo suficientemente rápido si solo tiro dinero al problema" danza del programador moderno.
@MarcusMuller, puedo ver el punto que estás diciendo, siendo VHDL, imagino que te refieres a diseñador, no a programador :-) Pero el extremo opuesto son los formatos y funciones personalizados que ahorran menos de lo que cuestan en la curva de aprendizaje de otros ingenieros. para revisiones de código, pruebas y reutilización en otros diseños. Está en algún lugar entre esos y elegir formatos reconocibles es una virtud cuando se evalúa contra todas las cosas. Simpatizo con tu actitud hacia el despilfarro y el mal diseño.
"Punto fijo" es un mapeo de un concepto matemático a su representación en señales lógicas. No veo por qué hacer referencia al mismo tipo de VHDL sería un inconveniente para los diseños que usan el mismo mapeo. Hace IP interoperable. Aún puede definir lo que quiera, si está mejor con una representación no estándar como signo/magnitud. ¿Cual es tu punto?