¿Por qué hay unidades de punto flotante separadas en algunos microcontroladores?

4

Me gustaría saber por qué hay un periférico FPU separado en algunos microcontroladores de gama alta, incluso si los controladores de 8 bits de extremo pequeño pueden realizar cálculos de flotación por sí solos.

Intenté experimentar con una división flotante en un controlador pic 18 que no tiene una FPU (la mayoría de la familia de 8 bits no tiene una FPU) y descubrí mediante la depuración (ICD 3) que @ 48 mhz clock es una división simple de la variable float toma un mínimo de 800 ciclos de reloj.

  

No tengo un controlador con FPU de mi lado a partir de ahora para probar. Pero aún así   quisiera saber qué diferencia efectiva y qué ventaja tiene la adición de una FPU   hacer o proporcionar.

    
pregunta Rookie91

3 respuestas

12

Si bien las FPU suelen ser más lentas que la CPU principal, son mucho más rápidas en el cálculo con punto flotante porque utilizan la implementación de hardware de los operadores de punto flotante. Para comprender mejor lo que sucede, considere que una operación de punto flotante consta de varios pasos.

Por ejemplo, una adición es aproximadamente:

  1. Comparación de las exponenciales;
  2. Escalado del significando de acuerdo con la diferencia de las exponenciales;
  3. Suma de los significandos;
  4. Redondeo del significado resultante;
  5. (posible) ajuste de la exponencial del resultado.

Tenga en cuenta que estas operaciones deben realizarse por separado en una CPU de punto fijo, y cada una puede tardar más de un ciclo en calcularse.

Si diseña una unidad dedicada que puede en parte paralelizar estas operaciones (por ejemplo, redondeando y ajustando el exponencial), puede ahorrar un tiempo de cálculo significativo.

    
respondido por el clabacchio
9

Cuando un microprocesador o microcontrolador necesita ejecutar muchos cálculos de punto flotante, hay tres formas de llevarlo a cabo:

1) In software i.e. floating-point library
2) An FPU which is integrated intro the microprocessor/microcontroller
3) An FPU in a separate chip

La opción 1, que lo hace todo en software, puede ser la única opción si las FPU de hardware no están disponibles. Una solución de software será 5-10 veces más lenta, o incluso peor, dependiendo del tamaño de registro del procesador. Actualmente estoy haciendo un proyecto que requiere un cálculo matemático de punto flotante de 32 bits en un HCS08 de 8 bits. Hacer eso con un acumulador de 8 bits es bastante feo.

Las opciones 2 y 3 son prácticamente lo mismo, en cuanto a velocidad. Uno de los primeros FPUs separados fue el 8087, un chip complementario del 8086 de 16 bits, el tatarabuelo (o algo parecido) del procesador Intel o AMD 80x86 en tu PC. Fue desarrollado por dos razones: Intel no tenía la capacidad en ese momento para incluir la FPU en el mismo chip que el procesador; y esto permitió que se vendiera como una opción: el 8087 inicialmente costaba $ 150 solo. Los fabricantes de computadoras colocan un zócalo junto al procesador 8086 (o 8088 con un bus de datos de 8 bits y un bus de direcciones de 16 bits, que se encontraba en el primer modelo de PC IBM 7550) para que un consumidor pueda agregar un 8087 más adelante. p>

El 8087 tenía algo así como 60 instrucciones diferentes. Si no había 8087, el 8086/8088 en realidad atrapó los códigos de instrucciones de punto flotante y los emuló en el software. Podía manejar números flotantes de 32/64 bits y usaba un registro interno de 80 bits para los cálculos. Su formato de punto flotante fue la base para el estándar de punto flotante IEEE 754, que ahora es usado por todas las demás bibliotecas de software de punto flotante y FPU.

Además de las operaciones típicas de punto flotante como suma, resta, multiplicación y raíz cuadrada, podría realizar cálculos exponenciales, logarítmicos y trigonométricos.

El FPU para el 80x86 era un chip separado hasta el 80386/80387; Desde el 80486 en adelante se integró en el procesador. La ventaja de tener el chip como parte del procesador, es que no necesita tener ningún cable adicional (es decir, pines) entre el procesador y la FPU para controlar su funcionamiento. Las FPU externas también compartieron datos, direcciones y otras líneas de control con el procesador, pero ya estaban allí para manejar la memoria externa.

También había chips FPU separados para el 68000 y el procesador MIPS y ARM que no tenía punto flotante integrado. Ahora los procesadores MIPS y ARM (además de la línea Intel 80x86 y otros) tienen FPU integrados en el chip. La ventaja, por supuesto, es el costo y el espacio en la PCB.

No tengo conocimiento de ningún microprocesador o microcontrolador de 8 bits que incluya una FPU (externa o integrada), excepto el Intel 8232, diseñado para el 8080 de 8 bits.

Tampoco tengo conocimiento de ningún microcontrolador que tenga disponible una FPU, ya que los microcontroladores generalmente no tienen su dirección y los buses de datos que se llevan a los pines externos, como los microprocesadores. Sin embargo, no hay razón para no incluir una FPU integrada en un microcontrolador, como hacen algunos ARM.

Si tiene una FPU de hardware o necesita usar una biblioteca de punto flotante, en casi todos los casos esto será completamente transparente para usted, ya que simplemente declara que una variable es de punto flotante (palabras flotantes o dobles en C, por ejemplo) , y el compilador generará las instrucciones apropiadas para llamar a la biblioteca o usar la FPU. Es posible que no configure las opciones del compilador, aunque para iniciar una FPU.

    
respondido por el tcrosley
6

Tener una FPU permite que los cálculos de punto flotante se realicen más rápidamente. El punto flotante del software es más flexible (simple, doble o la precisión que desee si escribe las rutinas), pero es extremadamente lento en comparación (al menos un orden de magnitud, todas las demás cosas son iguales).

No es necesariamente una solución perfecta, incluso si tiene que hacer cálculos numéricos, por ejemplo, en algunos de los instrumentos que he desarrollado, la precisión única de una ARM FPU típica es inadecuada y, por supuesto, la FPU utiliza el área de silicio. por lo tanto, el costo del chip aumenta, y tienden a dirigirse a aplicaciones que requieren una gran cantidad de pines de E / S, por lo que puede estar mirando un paquete BGA de 256 bolas de paso fino que requiere muchas capas en la PCB en lugar de una más fácil. paquete de uso.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas