Unidad de punto flotante CoreFPU de MICROCHIP

Introducción
- La Unidad Central de Coma Flotante (CoreFPU) está diseñada para operaciones aritméticas y de conversión de coma flotante, tanto para números de coma flotante de precisión simple como doble. CoreFPU admite conversiones de coma fija a coma flotante y de coma flotante a coma fija, así como operaciones de suma, resta y multiplicación de coma flotante. El estándar IEEE® para aritmética de coma flotante (IEEE 754) es un estándar técnico para el cálculo de coma flotante.
- Importante: CoreFPU solo admite cálculos con números normalizados y solo se admite el lenguaje Verilog; no se admite VHDL.
Resumen
La siguiente tabla proporciona un resumen de las características de CoreFPU.
Tabla 1. Características de CoreFPU
| Versión principal | Este documento se aplica a CoreFPU v3.0. |
| Familias de dispositivos compatibles |
|
| Flujo de herramientas admitido | Requiere Libero® SoC v12.6 o versiones posteriores. |
| Licencias | CoreFPU no tiene licencia bloqueada. |
| Instrucciones de instalación | CoreFPU debe instalarse automáticamente en el catálogo de IP del SoC Libero mediante la función de actualización del catálogo de IP. Alternativamente, CoreFPU puede descargarse manualmente del catálogo. Una vez que el núcleo de IP esté...
Se instala, se configura, se genera y se instancia dentro de SmartDesign para su inclusión en el proyecto. |
| Utilización y rendimiento del dispositivo | En Utilización y rendimiento de recursos del dispositivo se incluye un resumen de la información de utilización y rendimiento de CoreFPU. |
Información del registro de cambios de CoreFPU
Esta sección proporciona una descripción completaview De las nuevas funciones incorporadas, a partir de la versión más reciente. Para más información sobre los problemas resueltos, consulte la sección Problemas Resueltos.
| Versión | Qué hay de nuevo |
| v3.0 | Se implementaron indicadores de salida adicionales para mejorar la precisión de la IP |
| v2.1 | Se agregó la función de doble precisión |
| v2.0 | Se actualizaron las formas de onda de temporización. |
| v1.0 | Primera versión de producción de CoreFPU |
1. Características
CoreFPU tiene las siguientes características clave:
- Admite números flotantes de precisión simple y doble según el estándar IEEE-754
- Admite las conversiones que se enumeran a continuación:
- Conversión de punto fijo a punto flotante
- Conversión de punto flotante a punto fijo
- Admite operaciones aritméticas como se enumeran:
- Suma de punto flotante
- Resta de punto flotante
- Multiplicación de punto flotante
- Proporciona el esquema de redondeo (redondeo al par más cercano) solo para las operaciones aritméticas
- Proporciona indicadores para desbordamiento, subdesbordamiento, infinito (infinito positivo, infinito negativo), NaN silencioso (QNaN) y NaN de señalización (SNaN) para números de punto flotante.
- Admite una implementación completamente canalizada de operaciones aritméticas
- Proporciona disposiciones para configurar el núcleo para los requisitos de diseño
Descripción funcional
- El Estándar IEEE para Aritmética de Punto Flotante (IEEE 754) es un estándar técnico para el cálculo de punto flotante. El término punto flotante se refiere al punto decimal o punto binario del número, que se coloca en cualquier punto con respecto a los dígitos significativos del número.
Un número de punto flotante se expresa típicamente en notación científica, con una fracción (F) y un exponente (E) de un determinado radio (r), en la forma F × r^E. Los números decimales usan el radio 10 (F × 10^E); mientras que los números binarios usan el radio 2 (F × 2^E). - La representación del número de punto flotante no es única. Por ejemplo:ampPor ejemplo, el número 55.66 se representa como 5.566 × 10^1, 0.5566 × 10^2, 0.05566 × 10^3, y así sucesivamente. La parte fraccionaria está normalizada. En la forma normalizada, solo hay un dígito distinto de cero antes del punto de la base. Por ejemploample, el número decimal 123.4567 se normaliza como 1.234567 × 10^2; el número binario 1010.1011B se normaliza como 1.0101011B × 2^3.
- Es importante tener en cuenta que los números de punto flotante sufren pérdida de precisión cuando se representan con un número fijo de bits (por ejemplo,ampes decir, 32 bits o 64 bits). Esto se debe a que hay una cantidad infinita de números reales (incluso dentro de un rango pequeño de 0.0 a 0.1). Por otro lado, un
El patrón binario de n bits representa un número finito de 2^n números distintos. Por lo tanto, no se representan todos los números reales. Se utiliza la aproximación más cercana, lo que resulta en una pérdida de precisión.
El número de punto flotante de precisión simple se representa de la siguiente manera:
- Bit de signo: 1 bit
- Ancho del exponente: 8 bits
- Precisión significativa: 24 bits (23 bits se almacenan explícitamente)
Figura 2-1. Marco de 32 bits
El número de punto flotante de doble precisión se representa de la siguiente manera:
- Bit de signo: 1 bit
- Ancho del exponente: 11 bits
- Precisión significativa: 53 bits (52 bits se almacenan explícitamente)
Figura 2-2. Marco de 64 bits
CoreFPU es la integración de alto nivel de dos módulos de conversión (de punto fijo a punto flotante y de punto flotante a punto fijo) y tres operaciones aritméticas (FP ADD, FP SUB y FP MULT). El usuario puede configurar cualquiera de las operaciones según sus necesidades para que los recursos se utilicen en la operación seleccionada.
La siguiente figura muestra el diagrama de bloques de CoreFPU de nivel superior con puertos.
Figura 2-3. Diagrama de bloques de puertos CoreFPU
La siguiente tabla muestra el ancho de los puertos de entrada y salida. Tabla 2-1. Ancho de los puertos de entrada y salida
| Señal | Ancho de precisión simple | Ancho de doble precisión |
| sí | [31:0] | [63:0] |
| papelera | [31:0] | [63:0] |
| sobre | [31:0] | [63:0] |
| abadejo | [31:0] | [63:0] |
Punto fijo a punto flotante (conversión)
CoreFPU configurado como fijo a punto flotante infiere el módulo de conversión de punto fijo a punto flotante. La entrada (ain) de CoreFPU es cualquier número de punto fijo que contenga bits enteros y fraccionarios. El configurador de CoreFPU permite seleccionar los anchos de entrada para enteros y fraccionarios. La entrada es válida con la señal di_valid y la salida con la señal do_valid. La salida (aout) de la operación de fijo a punto flotante está en formato de punto flotante de precisión simple o doble.
ExampLos procedimientos para la conversión de punto fijo a punto flotante se enumeran en la siguiente tabla.
Tabla 2-2. Example para la conversión de punto fijo a punto flotante
| Número de punto fijo | Número de punto flotante | |||||
| sí | Entero | Fracción | sobre | Firmar | Exponente | Mantisa |
| 0x12153524 (32 bits) | 00010010000101010 | 011010100100100 | 0x4610a9a9 | 0 | 10001100 | 00100001010100110101001 |
| 0x0000000000008CCC
(64 bits) |
0000000000000000000000000000000000000000000000001 | 000110011001100 | 0x3FF199999999999A | 0 | 01111111111 | 0001100110011001100110011001100110011001100110011010 |
Conversión de punto flotante a punto fijo
CoreFPU configurado como de coma flotante a punto fijo infiere el módulo de conversión de coma flotante a punto fijo. La entrada (ain) de CoreFPU es cualquier número de coma flotante de precisión simple o doble y produce una salida (aout) en formato de coma fija que contiene bits enteros y fraccionarios. La entrada es válida con la señal di_valid y la salida con la señal do_valid. El configurador de CoreFPU permite seleccionar los anchos de salida para enteros y fraccionarios.
ExampLos procedimientos para la conversión de punto flotante a punto fijo se enumeran en la siguiente tabla.
Tabla 2-3. Example para la conversión de punto flotante a punto fijo
| Número de punto flotante | Número de punto fijo | |||||
| sí | Firmar | Exponente | Mantisa | sobre | Entero | Fracción |
| 0x41bd6783 (32 bits) | 0 | 10000011 | 01111010110011110000011 | 0x000bd678 | 00000000000010111 | 101011001111000 |
| 0x4002094c447c30d3
(64 bits) |
0 | 10000000000 | 0010000010010100110001000100011111000011000011010011 | 0x0000000000012095 | 0000000000000000000000000000000000000000000000010 | 010000010010101 |
Suma de punto flotante (operación aritmética)
CoreFPU configurado como FP ADD infiere el módulo de suma de coma flotante. Suma los dos números de coma flotante (ain y bin) y proporciona la salida (pout) en formato de coma flotante. La entrada y la salida son números de coma flotante de precisión simple o doble. La entrada es válida con la señal di_valid y la salida con la señal do_valid. El núcleo genera los indicadores ovfl_fg (Desbordamiento), qnan_fg (Silencio no es un número), snan_fg (Señalización no es un número), pinf_fg (Infinito positivo) y ninf_fg (Infinito negativo) según la operación de suma.
ExampLos archivos para la operación de suma de punto flotante se enumeran en las siguientes tablas.
Tabla 2-4. Example para la operación de suma de punto flotante (32 bits)
| Valor de punto flotante | Firmar | Exponente | Mantisa |
| Entrada de punto flotante 1 ain (0x4e989680) | 0 | 10011101 | 00110001001011010000000 |
| Entrada de punto flotante 2 bin (0x4f191b40) | 0 | 10011110 | 00110010001101101000000 |
| Salida de suma de punto flotante pout (0x4f656680) | 0 | 10011110 | 11001010110011010000000 |
Tabla 2-5. Example para la operación de suma de punto flotante (64 bits)
| Valor de punto flotante | Firmar | Exponente | Mantisa |
| Entrada de punto flotante 1
ain (0x3ff4106ee30caa32) |
0 | 01111111111 | 0100000100000110111011100011000011001010101000110010 |
| Entrada de punto flotante 2
bin (0x40020b2a78798e61) |
0 | 10000000000 | 0010000010110010101001111000011110011000111001100001 |
| Salida de suma de punto flotante pout (0x400c1361e9ffe37a) | 0 | 10000000000 | 1100000100110110000111101001111111111110001101111010 |
Resta de punto flotante (operación aritmética)
CoreFPU configurado como FP SUB infiere el módulo de resta de coma flotante. Resta los dos números de coma flotante (ain y bin) y proporciona la salida (pout) en formato de coma flotante. La entrada y la salida son números de coma flotante de precisión simple o doble. La entrada es válida con la señal di_valid y la salida con la señal do_valid. El núcleo genera indicadores ovfl_fg (desbordamiento), unfl_fg (desbordamiento insuficiente), qnan_fg (silencio no es un número), snan_fg (señalización no es un número), pinf_fg (infinito positivo) y ninf_fg (infinito negativo) según la operación de resta.
ExampLos archivos para la operación de resta de punto flotante se enumeran en las siguientes tablas.
Tabla 2-6. Example para la operación de resta de punto flotante (32 bits)
| Valor de punto flotante | Firmar | Exponente | Mantisa |
| Entrada de punto flotante 1 ain (0xac85465f) | 1 | 01011001 | 00001010100011001011111 |
| Entrada de punto flotante 2 bin (0x2f516779) | 0 | 01011110 | 10100010110011101111001 |
| Salida de resta de punto flotante pout (0xaf5591ac) | 1 | 01011110 | 10101011001000110101011 |
| Valor de punto flotante | Firmar | Exponente | Mantisa |
| Entrada de punto flotante 1
ain (0x405569764adff823) |
0 | 10000000101 | 0101011010010111011001001010110111111111100000100011 |
| Entrada de punto flotante 2
bin (0x4057d04e78dee3fc) |
0 | 10000000101 | 0111110100000100111001111000110111101110001111111100 |
| Salida de resta de punto flotante pout (0xc02336c16ff75ec8) | 1 | 10000000010 | 0011001101101100000101101111111101110101111011001000 |
Multiplicación de punto flotante (operación aritmética)
CoreFPU configurado como FP MULT infiere el módulo de multiplicación de punto flotante. Multiplica dos números de punto flotante (ain y bin) y proporciona la salida (pout) en formato de punto flotante. La entrada y la salida son números de punto flotante de precisión simple o doble. La entrada es válida con la señal di_valid y la salida con la señal do_valid. El núcleo genera indicadores ovfl_fg (desbordamiento), unfl_fg (desbordamiento insuficiente), qnan_fg (silencio no es un número), snan_fg (señalización no es un número), pinf_fg (infinito positivo) y ninf_fg (infinito negativo) según la operación de multiplicación.
ExampLos archivos para la operación de multiplicación de punto flotante se enumeran en las siguientes tablas.
Tabla 2-8. Example para la operación de multiplicación de punto flotante (32 bits)
| Valor de punto flotante | Firmar | Exponente | Mantisa |
| Entrada de punto flotante 1 ain (0x1ec7a735) | 0 | 00111101 | 10001111010011100110101 |
| Entrada de punto flotante 2 bin (0x6ecf15e8) | 0 | 11011101 | 10011110001010111101000 |
| Salida de multiplicación de punto flotante pout (0x4e21814a) | 0 | 10011100 | 01000011000000101001010 |
| Valor de punto flotante | Firmar | Exponente | Mantisa |
| Entrada de punto flotante 1
ain (0x40c1f5a9930be0df) |
0 | 10000001100 | 0001111101011010100110010011000010111110000011011111 |
| Entrada de punto flotante 2
bin (0x400a0866c962b501) |
0 | 10000000000 | 1010000010000110011011001001011000101011010100000001 |
| Salida de multiplicación de punto flotante pout (0x40dd38a1c3e2cae9) | 0 | 10000001101 | 1101001110001010000111000011111000101100101011101001 |
Tabla de verdad para la suma y la resta
Las siguientes tablas de verdad enumeran los valores de las operaciones de suma y resta. Tabla 2-10. Tabla de verdad para la suma.
| Datos A | Datos B | Bit de signo | Resultado | Rebosar | Desbordamiento | SNaN | QNaN | PINF | NINF |
| QNaN/SNaN | x | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| x | QNaN/SNaN | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| cero | cero | 0 | POSZERO | 0 | 0 | 0 | 0 | 0 | 0 |
| cero | posfinito(y) | 0 | posfinito(y) | 0 | 0 | 0 | 0 | 0 | 0 |
| cero | negfinito(y) | 1 | negfinito(y) | 0 | 0 | 0 | 0 | 0 | 0 |
| cero | posinfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| cero | neginfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| posfinito(y) | cero | 0 | posfinito(y) | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | posinfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| Mesa 2-10. Tabla de verdad para la suma (continuación) | |||||||||
| Datos A | Datos B | Bit de signo | Resultado | Rebosar | Desbordamiento | SNaN | QNaN | PINF | NINF |
| posfinito | neginfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| negfinito(y) | cero | 1 | negfinito(y) | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | posinfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| negfinito | neginfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| posinfinito | cero | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | posfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | negfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | posinfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | neginfinito | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| neginfinito | cero | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| neginfinito | posfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| neginfinito | negfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| neginfinito | posinfinito | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| neginfinito | neginfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| posfinito | posfinito | 0 | posfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | posfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posfinito | posfinito | 0/1 | QNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| posfinito | posfinito | 0/1 | SNaN | 0 | 0 | 1 | 0 | 0 | 0 |
| posfinito | posfinito | 0 | POSESIÓN | 1 | 0 | 1 | 0 | 0 | 0 |
| posfinito | negfinito | 0 | posfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | negfinito | 1 | negfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | negfinito | 0 | POSESIÓN | 0 | 1 | 1 | 0 | 0 | 0 |
| negfinito | posfinito | 0 | posfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | posfinito | 1 | negfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | posfinito | 0 | POSESIÓN | 0 | 1 | 1 | 0 | 0 | 0 |
| negfinito | negfinito | 1 | negfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | negfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| negfinito | negfinito | 0/1 | QNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| negfinito | negfinito | 0/1 | SNaN | 0 | 0 | 1 | 0 | 0 | 0 |
| negfinito | negfinito | 0 | POSESIÓN | 1 | 0 | 1 | 0 | 0 | 0 |
| Datos A | Datos B | Bit de signo | Resultado | Rebosar | Desbordamiento | SNaN | QNaN | PINF | NINF |
| QNaN/SNaN | x | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| x | QNaN/SNaN | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| cero | cero | 0 | POSZERO | 0 | 0 | 0 | 0 | 0 | 0 |
| cero | posfinito(y) | 1 | negfinito(y) | 0 | 0 | 0 | 0 | 0 | 0 |
| cero | negfinito(y) | 0 | posfinito(y) | 0 | 0 | 0 | 0 | 0 | 0 |
| cero | posinfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| cero | neginfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posfinito(y) | cero | 0 | posfinito(y) | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | posinfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| posfinito | neginfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| negfinito(y) | cero | 1 | negfinito(y) | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | posinfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| Mesa 2-11. Tabla de verdad para la resta (continuación) | |||||||||
| Datos A | Datos B | Bit de signo | Resultado | Rebosar | Desbordamiento | SNaN | QNaN | PINF | NINF |
| negfinito | neginfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | cero | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | posfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | negfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | posinfinito | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| posinfinito | neginfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| neginfinito | cero | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| neginfinito | posfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| neginfinito | negfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| neginfinito | posinfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| neginfinito | neginfinito | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| posfinito | posfinito | 0 | posfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | posfinito | 1 | negfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | posfinito | 0 | POSESIÓN | 0 | 1 | 1 | 0 | 0 | 0 |
| posfinito | negfinito | 0 | posfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | negfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posfinito | negfinito | 0/1 | QNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| posfinito | negfinito | 0/1 | SNaN | 0 | 0 | 1 | 0 | 0 | 0 |
| posfinito | negfinito | 0 | POSESIÓN | 1 | 0 | 1 | 0 | 0 | 0 |
| negfinito | posfinito | 1 | negfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | posfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| negfinito | posfinito | 0/1 | QNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| negfinito | posfinito | 0/1 | SNaN | 0 | 0 | 1 | 0 | 0 | 0 |
| negfinito | posfinito | 0 | POSESIÓN | 1 | 0 | 1 | 0 | 0 | 0 |
| negfinito | negfinito | 0 | posfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | negfinito | 1 | negfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | negfinito | 0 | POSESIÓN | 0 | 1 | 1 | 0 | 0 | 0 |
Importante:
- En las tablas anteriores se denota cualquier número.
- En las tablas anteriores se denota una condición de no importancia.
Tabla de verdad para la multiplicación
La siguiente tabla de verdad enumera los valores para la operación de multiplicación.
Tabla 2-12. Tabla de verdad para la multiplicación
| Datos A | Datos B | Bit de signo | Resultado | Rebosar | Desbordamiento | SNaN | QNaN | PINF | NINF |
| QNaN/SNaN | x | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| x | QNaN/SNaN | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| cero | cero | 0 | POSZERO | 0 | 0 | 0 | 0 | 0 | 0 |
| cero | posfinito | 0 | POSZERO | 0 | 0 | 0 | 0 | 0 | 0 |
| cero | negfinito | 0 | POSZERO | 0 | 0 | 0 | 0 | 0 | 0 |
| cero | posinfinito | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| cero | neginfinito | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| Mesa 2-12. Tabla de verdad para la multiplicación (continuación) | |||||||||
| Datos A | Datos B | Bit de signo | Resultado | Rebosar | Desbordamiento | SNaN | QNaN | PINF | NINF |
| posfinito | cero | 0 | POSZERO | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | posinfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posfinito | neginfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| negfinito | cero | 0 | POSZERO | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | posinfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| negfinito | neginfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | cero | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| posinfinito | posfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | negfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| posinfinito | posinfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posinfinito | neginfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| neginfinito | cero | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| neginfinito | posfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| neginfinito | negfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| neginfinito | posinfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| neginfinito | neginfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posfinito | posfinito | 0 | posfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | posfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| posfinito | posfinito | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| posfinito | posfinito | 0 | POSESIÓN | 0 | 0 | 1 | 0 | 0 | 0 |
| posfinito | posfinito | 0 | POSESIÓN | 1 | 0 | 1 | 0 | 0 | 0 |
| posfinito | posfinito | 0 | POSESIÓN | 0 | 1 | 1 | 0 | 0 | 0 |
| posfinito | negfinito | 1 | negfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| posfinito | negfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| posfinito | negfinito | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| posfinito | negfinito | 0 | POSESIÓN | 0 | 0 | 1 | 0 | 0 | 0 |
| posfinito | negfinito | 0 | POSESIÓN | 1 | 0 | 1 | 0 | 0 | 0 |
| posfinito | negfinito | 0 | POSESIÓN | 0 | 1 | 1 | 0 | 0 | 0 |
| negfinito | posfinito | 1 | negfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | posfinito | 1 | neginfinito | 0 | 0 | 0 | 0 | 0 | 1 |
| negfinito | posfinito | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| negfinito | posfinito | 0 | POSESIÓN | 0 | 0 | 1 | 0 | 0 | 0 |
| negfinito | posfinito | 0 | POSESIÓN | 1 | 0 | 1 | 0 | 0 | 0 |
| negfinito | posfinito | 0 | POSESIÓN | 0 | 1 | 1 | 0 | 0 | 0 |
| negfinito | negfinito | 0 | posfinito | 0 | 0 | 0 | 0 | 0 | 0 |
| negfinito | negfinito | 0 | posinfinito | 0 | 0 | 0 | 0 | 1 | 0 |
| negfinito | negfinito | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
| negfinito | negfinito | 0 | POSQNaN | 0 | 0 | 1 | 0 | 0 | 0 |
| negfinito | negfinito | 0 | POSQNaN | 1 | 0 | 1 | 0 | 0 | 0 |
| negfinito | negfinito | 0 | POSQNaN | 0 | 1 | 1 | 0 | 0 | 0 |
Importante:
El bit de signo '0' define una salida positiva y '1' define una salida negativa.
La x en la tabla anterior denota la condición de no importar.
Parámetros y señales de interfaz de CoreFPU
En esta sección se analizan los parámetros de la configuración del Configurador CoreFPU y las señales de E/S.
Parámetros de GUI de configuración
Existen varias opciones configurables para la unidad FPU, como se muestra en la siguiente tabla. Si se requiere una configuración distinta a la predeterminada, se utiliza el cuadro de diálogo de configuración para seleccionar los valores adecuados para la opción configurable.
Tabla 3-1. Parámetros de la interfaz gráfica de usuario de configuración de CoreFPU
| Nombre del parámetro | Por defecto | Descripción |
| Precisión | Soltero | Seleccione la operación según sea necesario:
Precisión simple |
| Tipo de conversión | Conversión de punto fijo a punto flotante | Seleccione la operación según sea necesario:
|
| Ancho de fracción de entrada1 | 15 | Configura el punto fraccionario en las señales de entrada ain y bin
El rango válido es 31–1 |
| Ancho de fracción de salida2 | 15 | Configura el punto fraccionario en las señales de salida aout
El rango válido es 51–1 |
Importante:
- Este parámetro solo se puede configurar durante la conversión de punto fijo a punto flotante.
- Este parámetro solo se puede configurar durante la conversión de punto flotante a punto fijo.
Señales de entrada y salida (haga una pregunta)
La siguiente tabla enumera las señales del puerto de entrada y salida de CoreFPU.
Tabla 3-2. Descripción del puerto
| Nombre de la señal | Ancho | Tipo | Descripción |
| Clic | 1 | Aporte | Reloj del sistema principal |
| rstn | 1 | Aporte | Reinicio asincrónico activo bajo |
| di_válido | 1 | Aporte | Entrada activa alta válida
Esta señal indica que los datos presentes en ain[31:0], ain[63:0] y bin[31:0], bin[63:0] son válidos. |
| sí | 32/64 | Aporte | Un bus de entrada (se utiliza para todas las operaciones) |
| papelera1 | 32/64 | Aporte | Bus de entrada B (Se utiliza únicamente para operaciones aritméticas) |
| sobre2 | 32/64 | Producción | Valor de salida cuando se seleccionan operaciones de conversión de punto fijo a punto flotante o de punto flotante a punto fijo. |
| abadejo1 | 32/64 | Producción | Valor de salida cuando se seleccionan operaciones de suma, resta o multiplicación. |
| Mesa 3-2. Descripción del puerto (continuación) | |||
| Nombre de la señal | Ancho | Tipo | Descripción |
| hacer_válido | 1 | Producción | Señal activa alta
Esta señal indica que los datos presentes en el bus de datos pout/aout son válidos. |
| ovfl_fg3 | 1 | Producción | Señal activa alta
Esta señal indica el desbordamiento durante las operaciones de punto flotante. |
| unfl_fg | 1 | Producción | Señal activa alta
Esta señal indica el desbordamiento durante las operaciones de punto flotante. |
| qnan_fg3 | 1 | Producción | Señal activa alta
Esta señal indica que el número silencioso no es un número (QNaN) durante las operaciones de punto flotante. |
| snan_fg | 1 | Producción | Señal activa alta
Esta señal indica que la señalización no es un número (SNaN) durante las operaciones de punto flotante. |
| pinf_fg3 | 1 | Producción | Señal activa alta
Esta señal indica el infinito positivo durante las operaciones de punto flotante. |
| ninf_fg | 1 | Producción | Señal activa alta
Esta señal indica el infinito negativo durante las operaciones de punto flotante. |
Importante:
- Este puerto solo está disponible para operaciones de suma, resta o multiplicación de punto flotante.
- Este puerto solo está disponible para operaciones de conversión de punto fijo a punto flotante y de punto flotante a punto fijo.
- Este puerto está disponible para operaciones de punto flotante a punto fijo, suma de punto flotante, resta de punto flotante y multiplicación de punto flotante.
Implementación de CoreFPU en Libero Design Suite
Esta sección describe la implementación de CoreFPU en Libero Design Suite.
Diseño inteligente
CoreFPU está disponible para descargar en el catálogo de IP de Libero a través de web Repositorio. Una vez incluido en el catálogo, el núcleo se instancia mediante el flujo de SmartDesign. Para obtener información sobre el uso de SmartDesign para configurar, conectar y generar núcleos, consulte la ayuda en línea de Libero SoC.
Tras configurar y generar la instancia principal, se simula la funcionalidad básica mediante el banco de pruebas incluido con CoreFPU. Los parámetros del banco de pruebas se ajustan automáticamente a la configuración de CoreFPU. CoreFPU se instancia como un componente de un diseño más amplio.
Figura 4-1. Instancia de SmartDesign CoreFPU para operaciones aritméticas
Figura 4-2. Instancia de SmartDesign CoreFPU para la operación de conversión 
Conversión de punto fijo a punto flotante
Durante la conversión de punto fijo a punto flotante, el ancho de la fracción de entrada es configurable. El ancho de salida se establece de forma predeterminada en 32 bits para precisión simple y 64 bits para punto flotante de doble precisión.
Para convertir de punto fijo a punto flotante, seleccione el tipo de conversión de punto fijo a punto flotante, como se muestra en la siguiente figura.
Punto flotante a punto fijo
Durante la conversión de punto flotante a punto fijo, el ancho fraccionario de salida es configurable y el ancho de entrada se establece en 32 bits para precisión simple y 64 bits para punto flotante de precisión doble de manera predeterminada.
Para convertir de punto flotante a punto fijo, seleccione el tipo de conversión de punto flotante a fijo, como se muestra en la siguiente figura.
Figura 4-4. Configurador de CoreFPU para punto flotante a fijo
Suma/Resta/Multiplicación de punto flotante
Durante las operaciones de suma, resta y multiplicación de punto flotante, el Ancho de fracción de entrada y el Ancho de fracción de salida no son configurables ya que son operaciones aritméticas de punto flotante, y el Ancho de entrada/salida se establece en 32 bits de precisión simple y 64 bits para punto flotante de precisión doble de manera predeterminada.
La siguiente figura muestra el configurador CoreFPU para la operación de resta de punto flotante.
Figura 4-5. Configurador de CoreFPU para la resta de punto flotante
Simulación (Hacer una pregunta)
Para ejecutar simulaciones, en la ventana de configuración del núcleo, seleccione User Testbench. Tras generar el CoreFPU, el banco de pruebas de presíntesis (Lenguaje de Descripción de Hardware [HDL]) fileLos s están instalados en Libero.
Formas de onda de simulación (Haga una pregunta)
En esta sección se analizan las formas de onda de simulación para CoreFPU.
Las siguientes figuras muestran la forma de onda de la conversión de punto fijo a punto flotante tanto para 32 bits como para 64 bits.

Integración de sistemas
La siguiente figura muestra un exampde usar el núcleo. En este ejemploampEl UART de diseño se utiliza como canal de comunicación entre el diseño y el PC host. Las señales ain y bin (cada una de 32 o 64 bits de ancho) son las entradas del diseño desde el UART. Tras recibir la señal di_valid, la CoreFPU calcula el resultado. Tras calcular el resultado, la señal do_valid se activa y almacena el resultado (datos aout/pout) en el búfer de salida. Este mismo procedimiento se aplica a las operaciones de conversión y aritméticas. Para las operaciones de conversión, solo es suficiente la entrada ain, mientras que para las operaciones aritméticas se requieren tanto ain como bin. La salida aout está habilitada para las operaciones de conversión y el puerto pout está habilitado para las operaciones aritméticas.
Figura 4-16. Example del sistema CoreFPU

- Síntesis (Haz una pregunta)
Para ejecutar la síntesis en CoreFPU, configure la raíz del diseño en la instancia del componente IP y, desde el panel de flujo de diseño de Libero, ejecute la herramienta Síntesis.
Lugar y Ruta (Haz una Pregunta)
Una vez sintetizado el diseño, ejecute la herramienta de ubicación y ruta. CoreFPU no requiere configuraciones especiales de ubicación y ruta. - Banco de pruebas de usuario (Haga una pregunta)
La versión IP de CoreFPU incluye un banco de pruebas de usuario. Con este banco de pruebas, puede verificar el funcionamiento de CoreFPU.
En la siguiente figura se muestra un diagrama de bloques simplificado del banco de pruebas de usuario. Este banco instancia el diseño de CoreFPU configurado (UUT) e incluye el generador de datos de prueba de comportamiento, el reloj necesario y las señales de reinicio.
Figura 4-17. Banco de pruebas de usuario de CoreFPU
Importante: Debes monitorizar las señales de salida en el simulador ModelSim, ver la sección Simulación.
Referencias adicionales (Haga una pregunta)
Esta sección proporciona una lista con información adicional.
Para obtener actualizaciones e información adicional sobre el software, los dispositivos y el hardware, visite el
Páginas de propiedad intelectual sobre los FPGA y PLD de Microchip websitio.
- Problemas conocidos y soluciones alternativas (haga una pregunta)
No hay problemas conocidos ni soluciones alternativas para CoreFPU v3.0. - Funciones y dispositivos descontinuados (Haga una pregunta)
No hay funciones ni dispositivos discontinuados con esta versión de IP.
Glosario
La siguiente es la lista de términos y definiciones utilizados en el documento.
Tabla 6-1. Términos y definiciones
| Término | Definición |
| Unidad de fomento | Unidad de punto flotante |
| FP ADD | Suma de punto flotante |
| Subtítulo FP | Resta de punto flotante |
| FP MULT | Multiplicación de punto flotante |
Problemas resueltos
En la siguiente tabla se enumeran todos los problemas resueltos para las distintas versiones de CoreFPU.
Tabla 7-1. Problemas resueltos
| Liberar | Descripción |
| 3.0 | La siguiente es la lista de todos los problemas resueltos en la versión v3.0:
Número de caso: 01420387 y 01422128 Se agregó la lógica del esquema de redondeo (redondear al número par más cercano). |
| 2.1 | La siguiente es la lista de todos los problemas resueltos en la versión v2.1: El diseño presenta problemas debido a la presencia de módulos duplicados cuando se instancian múltiples núcleos. Al cambiar el nombre de la instancia IP de CoreFPU se genera un error de “Módulo no definido”. |
| 1.0 | Lanzamiento inicial |
Utilización y rendimiento de los recursos del dispositivo
La macro CoreFPU se implementa en las familias enumeradas en la siguiente tabla.
Tabla 8-1. Utilización del dispositivo de la unidad FPU PolarFire para 32 bits
| Recursos FPGA | Utilización | |||||||
| Familia | 4 LUT | DFF | Total | Bloque de matemáticas | Dispositivo | Porcentajetage | Actuación | Estado latente |
| Punto fijo a punto flotante | ||||||||
| PolarFire® | 260 | 104 | 364 | 0 | MPF300T | 0.12 | 310 MHz | 3 |
| Punto flotante a punto fijo | ||||||||
| fuego polar | 591 | 102 | 693 | 0 | MPF300T | 0.23 | 160 MHz | 3 |
| Suma de punto flotante | ||||||||
| fuego polar | 1575 | 1551 | 3126 | 0 | MPF300T | 1.06 | 340 MHz | 16 |
| Resta de punto flotante | ||||||||
| fuego polar | 1561 | 1549 | 3110 | 0 | MPF300T | 1.04 | 345 MHz | 16 |
| Multiplicación de punto flotante | ||||||||
| fuego polar | 465 | 847 | 1312 | 4 | MPF300T | 0.44 | 385 MHz | 14 |
| Recursos FPGA | Utilización | |||||||
| Familia | 4 LUT | DFF | Total | Bloque de matemáticas | Dispositivo | Porcentajetage | Actuación | Estado latente |
| Punto fijo a punto flotante | ||||||||
| RTG4™ | 264 | 104 | 368 | 0 | RT4G150 | 0.24 | 160 MHz | 3 |
| Punto flotante a punto fijo | ||||||||
| RTG4 | 439 | 112 | 551 | 0 | RT4G150 | 0.36 | 105 MHz | 3 |
| Suma de punto flotante | ||||||||
| RTG4 | 1733 | 1551 | 3284 | 0 | RT4G150 | 1.16 | 195 MHz | 16 |
| Resta de punto flotante | ||||||||
| RTG4 | 1729 | 1549 | 3258 | 0 | RT4G150 | 1.16 | 190 MHz | 16 |
| Multiplicación de punto flotante | ||||||||
| RTG4 | 468 | 847 | 1315 | 4 | RT4G150 | 0.87 | 175 MHz | 14 |
| Recursos FPGA | Utilización | |||||||
| Familia | 4 LUT | DFF | Total | Bloque de matemáticas | Dispositivo | Porcentajetage | Actuación | Estado latente |
| Punto fijo a punto flotante | ||||||||
| PolarFire® | 638 | 201 | 849 | 0 | MPF300T | 0.28 | 305 MHz | 3 |
| Punto flotante a punto fijo | ||||||||
| fuego polar | 2442 | 203 | 2645 | 0 | MPF300T | 0.89 | 110 MHz | 3 |
| Suma de punto flotante | ||||||||
| fuego polar | 5144 | 4028 | 9172 | 0 | MPF300T | 3.06 | 240 MHz | 16 |
| Resta de punto flotante | ||||||||
| fuego polar | 5153 | 4026 | 9179 | 0 | MPF300T | 3.06 | 250 MHz | 16 |
| Multiplicación de punto flotante | ||||||||
| fuego polar | 1161 | 3818 | 4979 | 16 | MPF300T | 1.66 | 340 MHz | 27 |
| Recursos FPGA | Utilización | |||||||
| Familia | 4 LUT | DFF | Total | Bloque de matemáticas | Dispositivo | Porcentajetage | Actuación | Estado latente |
| Punto fijo a punto flotante | ||||||||
| RTG4™ | 621 | 201 | 822 | 0 | RT4G150 | 0.54 | 140 MHz | 3 |
| Punto flotante a punto fijo | ||||||||
| RTG4 | 1114 | 203 | 1215 | 0 | RT4G150 | 0.86 | 75 MHz | 3 |
| Suma de punto flotante | ||||||||
| RTG4 | 4941 | 4028 | 8969 | 0 | RT4G150 | 5.9 | 140 MHz | 16 |
| Resta de punto flotante | ||||||||
| RTG4 | 5190 | 4026 | 9216 | 0 | RT4G150 | 6.07 | 130 MHz | 16 |
| Multiplicación de punto flotante | ||||||||
| RTG4 | 1165 | 3818 | 4983 | 16 | RT4G150 | 3.28 | 170 MHz | 27 |
Importante: para aumentar la frecuencia, seleccione la opción Habilitar resincronización en la configuración de síntesis.
Historial de revisiones
El historial de revisiones describe los cambios que se implementaron en el documento. Los cambios se enumeran por revisión, comenzando con la publicación más reciente.

Compatibilidad con microchips FPGA
El grupo de productos FPGA de Microchip respalda sus productos con varios servicios de soporte, incluido el Servicio al cliente, el Centro de soporte técnico al cliente, un websitio y oficinas de ventas en todo el mundo. Se sugiere a los clientes que visiten los recursos en línea de Microchip antes de ponerse en contacto con el soporte, ya que es muy probable que sus consultas ya hayan sido respondidas.
Comuníquese con el Centro de Soporte Técnico a través del websitio en www.microchip.com/support. Mencione el número de pieza del dispositivo FPGA, seleccione la categoría de caso adecuada y cargue el diseño files al crear un caso de soporte técnico.
Comuníquese con el Servicio de atención al cliente para obtener soporte no técnico del producto, como precios de productos, actualizaciones de productos, información actualizada, estado de pedidos y autorización.
- Desde América del Norte, llame al 800.262.1060
- Desde el resto del mundo, llame al 650.318.4460
- Fax, desde cualquier parte del mundo, 650.318.8044
Información del microchip
Marcas comerciales
El nombre y el logotipo de “Microchip”, el logotipo de “M” y otros nombres, logotipos y marcas son marcas comerciales registradas y no registradas de Microchip Technology Incorporated o sus filiales y/o subsidiarias en los Estados Unidos y/o en otros países (“Marcas comerciales de Microchip”). Puede encontrar información sobre las marcas comerciales de Microchip en https://www.microchip.com/en-us/about/legal-information/microchip-trademarks
ISBN: 979-8-3371-0947-3
Aviso legal
Esta publicación y la información contenida en este documento solo se pueden usar con productos de Microchip, incluso para diseñar, probar e integrar productos de Microchip con su aplicación. El uso de esta información de cualquier otra manera viola estos términos. La información sobre las aplicaciones del dispositivo se proporciona solo para su conveniencia y puede ser reemplazada por actualizaciones. Es su responsabilidad asegurarse de que su aplicación cumpla con sus especificaciones. Comuníquese con su oficina local de ventas de Microchip para obtener soporte adicional u obtenga soporte adicional en www.microchip.com/en-us/support/design-help/client-support-services
MICROCHIP PROPORCIONA ESTA INFORMACIÓN “TAL CUAL”. MICROCHIP NO HACE DECLARACIONES NI OFRECE GARANTÍAS DE NINGÚN TIPO, YA SEAN EXPRESAS O IMPLÍCITAS, ESCRITAS U ORALES, ESTATUTARIAS O DE OTRO TIPO, RELACIONADAS CON LA INFORMACIÓN, INCLUYENDO, ENTRE OTRAS, CUALQUIER GARANTÍA IMPLÍCITA DE NO INFRACCIÓN, COMERCIABILIDAD E IDONEIDAD PARA UN PROPÓSITO PARTICULAR, O GARANTÍAS RELACIONADAS CON SU CONDICIÓN, CALIDAD O DESEMPEÑO.
EN NINGÚN CASO SERÁ MICROCHIP RESPONSABLE POR CUALQUIER PÉRDIDA, DAÑO, COSTO O GASTO INDIRECTO, ESPECIAL, PUNITIVO, INCIDENTAL O CONSECUENTE DE NINGÚN TIPO RELACIONADO CON LA INFORMACIÓN O SU USO, SIN IMPORTAR LA CAUSA, AUNQUE SE HAYA ADVERTIDO A MICROCHIP DE LA POSIBILIDAD O LOS DAÑOS SEAN PREVISIBLES. EN LA MEDIDA EN QUE LO PERMITA LA LEY, LA RESPONSABILIDAD TOTAL DE MICROCHIP POR TODAS LAS RECLAMACIONES RELACIONADAS DE CUALQUIER MANERA CON LA INFORMACIÓN O SU USO NO EXCEDERÁ EL MONTO DE LAS TARIFAS, SI LAS HUBIERE, QUE HAYA PAGADO DIRECTAMENTE A MICROCHIP POR LA INFORMACIÓN.
El uso de dispositivos Microchip en aplicaciones de soporte vital y/o seguridad se realiza por cuenta y riesgo del comprador, y el comprador acepta defender, indemnizar y eximir de responsabilidad a Microchip de todos los daños, reclamaciones, demandas o gastos que resulten de dicho uso. No se transfiere ninguna licencia, implícita o de otro modo, en virtud de ningún derecho de propiedad intelectual de Microchip a menos que se indique lo contrario.
Característica de protección de código de dispositivos de microchip
Tenga en cuenta los siguientes detalles de la función de protección de código en los productos Microchip:
- Los productos de Microchip cumplen con las especificaciones contenidas en su hoja de datos de Microchip particular.
- Microchip cree que su familia de productos es segura cuando se utiliza de la manera prevista, dentro de las especificaciones de funcionamiento y en condiciones normales.
- Microchip valora y protege agresivamente sus derechos de propiedad intelectual. Los intentos de violar las características de protección del código de los productos Microchip están estrictamente prohibidos y pueden violar la Ley de Derechos de Autor del Milenio Digital.
- Ni Microchip ni ningún otro fabricante de semiconductores puede garantizar la seguridad de su código. La protección del código no significa que garanticemos que el producto sea “irrompible”. La protección del código evoluciona constantemente. Microchip se compromete a mejorar continuamente las características de protección del código de nuestros productos.
Documentos / Recursos
![]() |
Unidad de punto flotante CoreFPU de MICROCHIP [pdf] Guía del usuario v3.0, v2.1, v2.0, v1.0, CoreFPU Unidad de punto flotante central, Unidad de punto flotante central, Unidad de punto flotante, Unidad de punto |

