¿Cómo convertir un número de punto flotante a entero, usando VHDL?

5

Quiero convertir un número de coma flotante en un número entero. Básicamente tengo un número de punto flotante entre 1 y 0, con tres decimales, y quiero pasarlo a un número entero como si se multiplicara por 1000. Sospecho que debería haber una forma más óptima de hacerlo que utilizando la multiplicación aritmética Operación x1000. Estoy buscando un trozo de código de preferencia.

    
pregunta Peterstone

3 respuestas

7

Bueno, ya que no quieres usar una potencia de dos para tu multiplicación, será un PITA. Le mostraré lo que sería más ideal después de responder su pregunta. No voy a proporcionar ningún código, solo técnica.

El camino difícil (x 1000)

  1. Multiplica la mantisa de tu número 0-1 con la mantisa de 1000 (Multiplica por una constante)
  2. Agregue el exponente de su número 0-1 con el exponente de 1000 (agregue una constante)
  3. Normalice la mantisa / exponente a la forma 1.XXX * 2 ^ Y (cambio variable, agregue)
  4. Ajusta la mantisa / exponente para que el exponente sea 10 (se puede combinar con el paso anterior) (cambiar, agregar)
  5. Tome 10 bits de datos a la izquierda del punto decimal como su entero

La manera fácil (x 1024)

  1. Normalice la mantisa para un exponente de 2 ^ 10 (cambio variable)
  2. Tome los 10 bits más significativos como su valor entero
respondido por el W5VO
2

Si esto no es para síntesis, simplemente hazlo directamente:

my_int <= integer(my_real * 1000.0);

Si es para síntesis, entonces la respuesta de W5VO de "manera difícil" es cómo lo implementarías en el nivel bajo, pero en su lugar usaría la biblioteca sintetizable de punto flotante de David Bishop fphdl (estandarizado en VHDL-2008, pero utilizable en cualquier versión de VHDL) y luego escríbalo de forma similar a la anterior:

my_sfixed <= to_sfixed(my_float * to_float(1000.0, my_float), my_sfixed);
    
respondido por el wjl
0

Desde una perspectiva de programación general, usaría simplemente multiplicar por 1000 y luego convertir a un entero. Solo buscaría optimizar si si esta solución no funciona tan rápido como usted desea.

    
respondido por el thisismyrobot

Lea otras preguntas en las etiquetas