MICROCHIP CoreFPU 核心浮点单元
介绍
- 核心浮点单元 (CoreFPU) 专为单精度和双精度浮点数的浮点运算和转换操作而设计。CoreFPU 支持定点到浮点、浮点到定点的转换以及浮点加法、减法和乘法运算。IEEE® 浮点运算标准 (IEEE 754) 是浮点计算的技术标准。
- 重要:CoreFPU 仅支持使用规范化数字进行计算,并且仅支持 Verilog 语言;不支持 VHDL。
概括
下表总结了 CoreFPU 的特性。
表 1. CoreFPU 特性
核心版 | 本文档适用于CoreFPU v3.0。 |
支持的设备系列 |
|
支持的工具流程 | 需要 Libero® SoC v12.6 或更高版本。 |
许可 | CoreFPU 没有许可证锁定。 |
安装说明 | CoreFPU 必须通过 IP Catalog 更新功能自动安装到 Libero SoC 的 IP Catalog 中。或者,也可以从目录中手动下载 CoreFPU。IP 核安装完成后
安装后,它会在 SmartDesign 中配置、生成和实例化,以包含在项目中。 |
设备利用率和性能 | 设备资源利用率和性能中列出了 CoreFPU 的利用率和性能信息摘要。 |
CoreFPU 变更日志信息
本节提供了一个全面的view 从最新版本开始,新增功能已包含在内。有关已解决问题的更多信息,请参阅“已解决的问题”部分。
版本 | 什么是新的 |
v3.0 | 实施额外的输出标志来增强 IP 的准确性 |
v2.1 | 增加了双精度功能 |
v2.0 | 更新了时序波形 |
v1.0 | CoreFPU 的第一个生产版本 |
1. 特点
CoreFPU具有以下主要特点:
- 支持符合 IEEE-754 标准的单精度和双精度浮点数
- 支持列出的转换:
- 定点到浮点的转换
- 浮点到定点的转换
- 支持下列算术运算:
- 浮点加法
- 浮点减法
- 浮点乘法
- 仅为算术运算提供舍入方案(四舍五入到最接近的偶数)
- 为浮点数提供溢出、下溢、无穷大(正无穷大、负无穷大)、安静 NaN(QNaN)和信号 NaN(SNaN)的标志。
- 支持算术运算的完全流水线实现
- 提供配置核心以满足设计要求
功能描述
- IEEE 浮点运算标准 (IEEE 754) 是浮点计算的技术标准。术语“浮点”指的是数字的基数点(小数点或二进制小数点),该小数点相对于数字的有效数字位于任意位置。
浮点数通常以科学计数法表示,由分数 (F) 和特定基数 (r) 的指数 (E) 组成,形式为 F × r^E。十进制数以 10 为基数 (F × 10^E);而二进制数以 2 为基数 (F × 2^E)。 - 浮点数的表示形式并不唯一。例如amp例如,55.66 表示为 5.566 × 10^1、0.5566 × 10^2、0.05566 × 10^3,依此类推。小数部分已标准化。标准化后,小数点前只有一个非零数字。例如amp例如,十进制数 123.4567 标准化为 1.234567 × 10^2;二进制数 1010.1011B 标准化为 1.0101011B × 2^3。
- 值得注意的是,浮点数用固定位数表示时会损失精度(例如ample,32 位或 64 位)。这是因为实数的数量是无限的(即使在 0.0 到 0.1 的小范围内也是如此)。另一方面,
n 位二进制模式表示有限的 2^n 个不同数字。因此,并非所有实数都能被表示出来。取而代之的是使用最接近的近似值,这会导致精度损失。
单精度浮点数表示如下:
- 符号位:1位
- 指数宽度:8位
- 有效数字精度:24 位(其中 23 位是显式存储的)
图 2-1. 32 位帧
双精度浮点数表示如下:
- 符号位:1位
- 指数宽度:11位
- 有效数字精度:53 位(其中 52 位是显式存储的)
图 2-2. 64 位帧 CoreFPU 是两个转换模块(定点转浮点和浮点转定点)和三个算术运算模块(浮点加法、浮点减法和浮点乘法)的顶层集成。用户可以根据需求配置任意一种运算,以便将资源用于所选的运算。
下图显示了带有端口的顶层 CoreFPU 框图。
图 2-3. CoreFPU 端口框图
下表列出了输入和输出端口的宽度。表2-1. 输入和输出端口宽度
信号 | 单精度宽度 | 双精度宽度 |
艾因 | [31:0] | [63:0] |
垃圾桶 | [31:0] | [63:0] |
出 | [31:0] | [63:0] |
噘 | [31:0] | [63:0] |
定点到浮点(转换)
配置为定点转浮点的 CoreFPU 会推断出定点转浮点转换模块。CoreFPU 的输入 (ain) 是包含整数和小数位的任意定点数。CoreFPU 配置器可以选择输入整数和小数的宽度。输入在 di_valid 信号上有效,输出在 do_valid 信号上有效。定点转浮点运算的输出 (aout) 为单精度或双精度浮点格式。
Examp定点到浮点转换运算的 le 如下表所列。
表 2-2。 前任ample 用于定点到浮点的转换
定点数 | 浮点数 | |||||
艾因 | 整数 | 分数 | 出 | 符号 | 指数 | 尾数 |
0x12153524(32 位) | 00010010000101010 | 011010100100100 | 0x4610a9a9 | 0 | 10001100 | 00100001010100110101001 |
0x0000000000008CCC
(64 位) |
0000000000000000000000000000000000000000000000001 | 000110011001100 | 0x3FF199999999999A | 0 | 01111111111 | 0001100110011001100110011001100110011001100110011010 |
浮点到定点(转换)
配置为浮点转定点的 CoreFPU 会推断浮点转定点转换模块。CoreFPU 的输入 (ain) 可以是任意单精度或双精度浮点数,并产生包含整数和小数位的定点格式的输出 (aout)。输入在 di_valid 信号上有效,输出在 do_valid 信号上有效。CoreFPU 配置器提供选择输出整数和小数位宽度的选项。
Examp浮点到定点转换运算的 le 如下表所列。
表 2-3。 前任ample 用于浮点到定点的转换
浮点数 | 定点数 | |||||
艾因 | 符号 | 指数 | 尾数 | 出 | 整数 | 分数 |
0x41bd6783(32 位) | 0 | 10000011 | 01111010110011110000011 | 0x000bd678 | 00000000000010111 | 101011001111000 |
0x4002094c447c30d3
(64 位) |
0 | 10000000000 | 0010000010010100110001000100011111000011000011010011 | 0x0000000000012095 | 0000000000000000000000000000000000000000000000010 | 010000010010101 |
浮点加法(算术运算)
配置为 FP ADD 的 CoreFPU 会推断浮点加法模块。它将两个浮点数(ain 和 bin)相加,并以浮点格式提供输出 (pout)。输入和输出均为单精度或双精度浮点数。输入在 di_valid 信号上有效,输出在 do_valid 信号上有效。核心会根据加法运算生成 ovfl_fg(溢出)、qnan_fg(非数字静默)、snan_fg(非数字信号)、pinf_fg(正无穷)和 ninf_fg(负无穷)标志。
Examp浮点加法运算的文件如下表所列。
表 2-4。 前任ample 用于浮点加法运算(32 位)
浮点值 | 符号 | 指数 | 尾数 |
浮点输入1 ain(0x4e989680) | 0 | 10011101 | 00110001001011010000000 |
浮点输入2 bin(0x4f191b40) | 0 | 10011110 | 00110010001101101000000 |
浮点加法输出pout(0x4f656680) | 0 | 10011110 | 11001010110011010000000 |
表 2-5。 前任ample 用于浮点加法运算(64 位)
浮点值 | 符号 | 指数 | 尾数 |
浮点输入 1
ain (0x3ff4106ee30caa32) |
0 | 01111111111 | 0100000100000110111011100011000011001010101000110010 |
浮点输入 2
bin (0x40020b2a78798e61) |
0 | 10000000000 | 0010000010110010101001111000011110011000111001100001 |
浮点加法输出pout(0x400c1361e9ffe37a) | 0 | 10000000000 | 1100000100110110000111101001111111111110001101111010 |
浮点减法(算术运算)
配置为 FP SUB 的 CoreFPU 会推断浮点减法模块。它将两个浮点数(ain 和 bin)相减,并以浮点格式提供输出 (pout)。输入和输出均为单精度或双精度浮点数。输入在 di_valid 信号上有效,输出在 do_valid 信号上有效。内核会根据减法运算生成 ovfl_fg(溢出)、unfl_fg(下溢)、qnan_fg(非数字静默)、snan_fg(非数字信号)、pinf_fg(正无穷)和 ninf_fg(负无穷)标志。
Examp浮点减法运算的文件如下表所列。
表 2-6。 前任ample 表示浮点减法运算(32 位)
浮点值 | 符号 | 指数 | 尾数 |
浮点输入1 ain(0xac85465f) | 1 | 01011001 | 00001010100011001011111 |
浮点输入 2 bin(0x2f516779) | 0 | 01011110 | 10100010110011101111001 |
浮点减法输出pout(0xaf5591ac) | 1 | 01011110 | 10101011001000110101011 |
浮点值 | 符号 | 指数 | 尾数 |
浮点输入 1
艾恩 (0x405569764adff823) |
0 | 10000000101 | 0101011010010111011001001010110111111111100000100011 |
浮点输入 2
bin (0x4057d04e78dee3fc) |
0 | 10000000101 | 0111110100000100111001111000110111101110001111111100 |
浮点减法输出pout(0xc02336c16ff75ec8) | 1 | 10000000010 | 0011001101101100000101101111111101110101111011001000 |
浮点乘法(算术运算)
配置为 FP MULT 的 CoreFPU 可推断浮点乘法模块。它将两个浮点数(ain 和 bin)相乘,并以浮点格式提供输出 (pout)。输入和输出均为单精度或双精度浮点数。输入在 di_valid 信号上有效,输出在 do_valid 信号上有效。核心根据乘法运算生成 ovfl_fg(溢出)、unfl_fg(下溢)、qnan_fg(非数字静默)、snan_fg(非数字信号)、pinf_fg(正无穷)和 ninf_fg(负无穷)标志。
Examp浮点乘法运算的文件如下表所示。
表 2-8。 前任ample 用于浮点乘法运算(32 位)
浮点值 | 符号 | 指数 | 尾数 |
浮点输入1 ain(0x1ec7a735) | 0 | 00111101 | 10001111010011100110101 |
浮点输入2 bin(0x6ecf15e8) | 0 | 11011101 | 10011110001010111101000 |
浮点乘法输出 pout (0x4e21814a) | 0 | 10011100 | 01000011000000101001010 |
浮点值 | 符号 | 指数 | 尾数 |
浮点输入 1
ain (0x40c1f5a9930be0df) |
0 | 10000001100 | 0001111101011010100110010011000010111110000011011111 |
浮点输入 2
bin (0x400a0866c962b501) |
0 | 10000000000 | 1010000010000110011011001001011000101011010100000001 |
浮点乘法输出pout(0x40dd38a1c3e2cae9) | 0 | 10000001101 | 1101001110001010000111000011111000101100101011101001 |
加法和减法真值表
以下真值表列出了加法和减法运算的值。表 2-10. 加法真值表
数据A | 数据B | 符号位 | 结果 | 溢出 | 下溢 | 斯纳恩 | 问题NaN | PINF | NINF |
QNaN/SNaN | x | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
x | QNaN/SNaN | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
零 | 零 | 0 | 波兹泽罗 | 0 | 0 | 0 | 0 | 0 | 0 |
零 | 正有限(y) | 0 | 正有限(y) | 0 | 0 | 0 | 0 | 0 | 0 |
零 | 负有限(y) | 1 | 负有限(y) | 0 | 0 | 0 | 0 | 0 | 0 |
零 | 正无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
零 | 负无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
正有限(y) | 零 | 0 | 正有限(y) | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 正无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
桌子 2-10。 加法真值表(续) | |||||||||
数据A | 数据B | 符号位 | 结果 | 溢出 | 下溢 | 斯纳恩 | 问题NaN | PINF | NINF |
正有限 | 负无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负有限(y) | 零 | 1 | 负有限(y) | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 正无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
负数 | 负无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
正无穷 | 零 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 正有限 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 负数 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 正无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 负无穷 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
负无穷 | 零 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负无穷 | 正有限 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负无穷 | 负数 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负无穷 | 正无穷 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
负无穷 | 负无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
正有限 | 正有限 | 0 | 正有限 | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 正有限 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正有限 | 正有限 | 0/1 | 问题NaN | 0 | 0 | 0 | 1 | 0 | 0 |
正有限 | 正有限 | 0/1 | 斯纳恩 | 0 | 0 | 1 | 0 | 0 | 0 |
正有限 | 正有限 | 0 | 波斯纳 | 1 | 0 | 1 | 0 | 0 | 0 |
正有限 | 负数 | 0 | 正有限 | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 负数 | 1 | 负数 | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 负数 | 0 | 波斯纳 | 0 | 1 | 1 | 0 | 0 | 0 |
负数 | 正有限 | 0 | 正有限 | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 正有限 | 1 | 负数 | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 正有限 | 0 | 波斯纳 | 0 | 1 | 1 | 0 | 0 | 0 |
负数 | 负数 | 1 | 负数 | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 负数 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负数 | 负数 | 0/1 | 问题NaN | 0 | 0 | 0 | 1 | 0 | 0 |
负数 | 负数 | 0/1 | 斯纳恩 | 0 | 0 | 1 | 0 | 0 | 0 |
负数 | 负数 | 0 | 波斯纳 | 1 | 0 | 1 | 0 | 0 | 0 |
数据A | 数据B | 符号位 | 结果 | 溢出 | 下溢 | 斯纳恩 | 问题NaN | PINF | NINF |
QNaN/SNaN | x | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
x | QNaN/SNaN | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
零 | 零 | 0 | 波兹泽罗 | 0 | 0 | 0 | 0 | 0 | 0 |
零 | 正有限(y) | 1 | 负有限(y) | 0 | 0 | 0 | 0 | 0 | 0 |
零 | 负有限(y) | 0 | 正有限(y) | 0 | 0 | 0 | 0 | 0 | 0 |
零 | 正无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
零 | 负无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正有限(y) | 零 | 0 | 正有限(y) | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 正无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
正有限 | 负无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
负有限(y) | 零 | 1 | 负有限(y) | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 正无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
桌子 2-11。 减法真值表(续) | |||||||||
数据A | 数据B | 符号位 | 结果 | 溢出 | 下溢 | 斯纳恩 | 问题NaN | PINF | NINF |
负数 | 负无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 零 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 正有限 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 负数 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 正无穷 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
正无穷 | 负无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
负无穷 | 零 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负无穷 | 正有限 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负无穷 | 负数 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负无穷 | 正无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负无穷 | 负无穷 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
正有限 | 正有限 | 0 | 正有限 | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 正有限 | 1 | 负数 | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 正有限 | 0 | 波斯纳 | 0 | 1 | 1 | 0 | 0 | 0 |
正有限 | 负数 | 0 | 正有限 | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 负数 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正有限 | 负数 | 0/1 | 问题NaN | 0 | 0 | 0 | 1 | 0 | 0 |
正有限 | 负数 | 0/1 | 斯纳恩 | 0 | 0 | 1 | 0 | 0 | 0 |
正有限 | 负数 | 0 | 波斯纳 | 1 | 0 | 1 | 0 | 0 | 0 |
负数 | 正有限 | 1 | 负数 | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 正有限 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负数 | 正有限 | 0/1 | 问题NaN | 0 | 0 | 0 | 1 | 0 | 0 |
负数 | 正有限 | 0/1 | 斯纳恩 | 0 | 0 | 1 | 0 | 0 | 0 |
负数 | 正有限 | 0 | 波斯纳 | 1 | 0 | 1 | 0 | 0 | 0 |
负数 | 负数 | 0 | 正有限 | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 负数 | 1 | 负数 | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 负数 | 0 | 波斯纳 | 0 | 1 | 1 | 0 | 0 | 0 |
重要的:
- 前表中的“它们”表示任意数字。
- 上表中的 表示不关心的情况。
乘法真值表
下表列出了乘法运算的值。
表 2-12. 乘法真值表
数据A | 数据B | 符号位 | 结果 | 溢出 | 下溢 | 斯纳恩 | 问题NaN | PINF | NINF |
QNaN/SNaN | x | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
x | QNaN/SNaN | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
零 | 零 | 0 | 波兹泽罗 | 0 | 0 | 0 | 0 | 0 | 0 |
零 | 正有限 | 0 | 波兹泽罗 | 0 | 0 | 0 | 0 | 0 | 0 |
零 | 负数 | 0 | 波兹泽罗 | 0 | 0 | 0 | 0 | 0 | 0 |
零 | 正无穷 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
零 | 负无穷 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
桌子 2-12。 乘法真值表(续) | |||||||||
数据A | 数据B | 符号位 | 结果 | 溢出 | 下溢 | 斯纳恩 | 问题NaN | PINF | NINF |
正有限 | 零 | 0 | 波兹泽罗 | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 正无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正有限 | 负无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负数 | 零 | 0 | 波兹泽罗 | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 正无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负数 | 负无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 零 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
正无穷 | 正有限 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 负数 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
正无穷 | 正无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正无穷 | 负无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负无穷 | 零 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
负无穷 | 正有限 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负无穷 | 负数 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
负无穷 | 正无穷 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负无穷 | 负无穷 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正有限 | 正有限 | 0 | 正有限 | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 正有限 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
正有限 | 正有限 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
正有限 | 正有限 | 0 | 波斯纳 | 0 | 0 | 1 | 0 | 0 | 0 |
正有限 | 正有限 | 0 | 波斯纳 | 1 | 0 | 1 | 0 | 0 | 0 |
正有限 | 正有限 | 0 | 波斯纳 | 0 | 1 | 1 | 0 | 0 | 0 |
正有限 | 负数 | 1 | 负数 | 0 | 0 | 0 | 0 | 0 | 0 |
正有限 | 负数 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
正有限 | 负数 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
正有限 | 负数 | 0 | 波斯纳 | 0 | 0 | 1 | 0 | 0 | 0 |
正有限 | 负数 | 0 | 波斯纳 | 1 | 0 | 1 | 0 | 0 | 0 |
正有限 | 负数 | 0 | 波斯纳 | 0 | 1 | 1 | 0 | 0 | 0 |
负数 | 正有限 | 1 | 负数 | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 正有限 | 1 | 负无穷 | 0 | 0 | 0 | 0 | 0 | 1 |
负数 | 正有限 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
负数 | 正有限 | 0 | 波斯纳 | 0 | 0 | 1 | 0 | 0 | 0 |
负数 | 正有限 | 0 | 波斯纳 | 1 | 0 | 1 | 0 | 0 | 0 |
负数 | 正有限 | 0 | 波斯纳 | 0 | 1 | 1 | 0 | 0 | 0 |
负数 | 负数 | 0 | 正有限 | 0 | 0 | 0 | 0 | 0 | 0 |
负数 | 负数 | 0 | 正无穷 | 0 | 0 | 0 | 0 | 1 | 0 |
负数 | 负数 | 0 | POSQNaN | 0 | 0 | 0 | 1 | 0 | 0 |
负数 | 负数 | 0 | POSQNaN | 0 | 0 | 1 | 0 | 0 | 0 |
负数 | 负数 | 0 | POSQNaN | 1 | 0 | 1 | 0 | 0 | 0 |
负数 | 负数 | 0 | POSQNaN | 0 | 1 | 1 | 0 | 0 | 0 |
重要的:
符号位‘0’定义正输出,‘1’定义负输出。
上表中的 x 表示不关心条件。
CoreFPU参数和接口信号
本节讨论 CoreFPU 配置器设置和 I/O 信号中的参数。
配置 GUI 参数
下表列出了适用于 FPU 单元的可配置选项数量。如果需要非默认配置,请使用配置对话框为可配置选项选择合适的值。
表 3-1. CoreFPU 配置 GUI 参数
参数名称 | 默认 | 描述 |
精确 | 单身的 | 根据需要选择操作:
单精度 |
转换类型 | 定点到浮点的转换 | 根据需要选择操作:
|
输入分数宽度1 | 15 | 配置输入 ain 和 bin 信号中的小数点
有效范围是 31–1 |
输出分数宽度2 | 15 | 配置输出 aout 信号中的小数点
有效范围是 51–1 |
重要的:
- 此参数仅在定点到浮点转换期间可配置。
- 此参数仅在浮点到定点转换期间可配置。
输入和输出信号(提问)
下表列出了CoreFPU的输入输出端口信号。
表 3-2. 端口说明
信号名称 | 宽度 | 类型 | 描述 |
时钟 | 1 | 输入 | 主系统时钟 |
恢复时间 | 1 | 输入 | 低电平有效异步复位 |
di_valid | 1 | 输入 | 高电平有效输入
该信号表示 ain[31:0]、ain[63:0] 和 bin[31:0]、bin[63:0] 上的数据有效。 |
艾因 | 32/64 | 输入 | 输入总线(用于所有操作) |
垃圾桶1 | 32/64 | 输入 | B 输入总线(仅用于算术运算) |
出2 | 32/64 | 输出 | 选择定点到浮点或浮点到定点转换操作时的输出值。 |
噘1 | 32/64 | 输出 | 选择加法、减法或乘法运算时的输出值。 |
桌子 3-2。 端口描述(续) | |||
信号名称 | 宽度 | 类型 | 描述 |
执行有效 | 1 | 输出 | 高电平有效信号
该信号表示 pout/aout 数据总线上的数据有效。 |
ovfl_fg3 | 1 | 输出 | 高电平有效信号
该信号表示浮点运算期间溢出。 |
unfl_fg | 1 | 输出 | 高电平有效信号
该信号表示浮点运算期间的下溢。 |
qnan_fg3 | 1 | 输出 | 高电平有效信号
该信号表示浮点运算期间的安静非数 (QNaN)。 |
snan_fg | 1 | 输出 | 高电平有效信号
该信号表示浮点运算期间发出非数字信号 (SNaN)。 |
pinf_fg3 | 1 | 输出 | 高电平有效信号
该信号表示浮点运算期间的正无穷大。 |
ninf_fg | 1 | 输出 | 高电平有效信号
该信号表示浮点运算期间的负无穷大。 |
重要的:
- 此端口仅适用于浮点加法、减法或乘法运算。
- 此端口仅适用于定点到浮点和浮点到定点的转换操作。
- 该端口可用于浮点到定点、浮点加法、浮点减法和浮点乘法。
Libero Design Suite 中 CoreFPU 的实现
本节介绍Libero Design Suite中CoreFPU的实现。
智能设计
CoreFPU 可通过 Libero IP 目录下载 web 存储库。一旦将其列入目录,即可使用 SmartDesign 流程实例化核心。有关使用 SmartDesign 配置、连接和生成核心的信息,请参阅 Libero SoC 在线帮助。
配置并生成核心实例后,使用 CoreFPU 附带的测试平台进行基本功能仿真。测试平台参数会自动根据 CoreFPU 配置进行调整。CoreFPU 将被实例化为更大设计的一个组件。
图4-1. 用于算术运算的SmartDesign CoreFPU实例
图4-2. 用于转换操作的SmartDesign CoreFPU实例
定点到浮点的转换
在定点到浮点的转换过程中,输入分数宽度是可配置的。输出宽度默认设置为单精度 32 位,双精度浮点 64 位。
要从定点转换为浮点,请选择定点到浮点转换类型,如下图所示。
浮点到定点
在浮点到定点的转换过程中,输出小数宽度是可配置的,输入宽度默认设置为单精度 32 位、双精度浮点 64 位。
要从浮点转换为定点,请选择浮点到定点转换类型,如下图所示。
图 4-4. 用于浮点到定点的 CoreFPU 配置器 浮点加法/减法/乘法
在浮点加法、减法和乘法运算期间,输入分数宽度和输出分数宽度不可配置,因为这些是浮点算术运算,并且输入/输出宽度默认设置为 32 位单精度和 64 位双精度浮点。
下图显示了用于浮点减法运算的 CoreFPU 配置器。
图 4-5. 用于浮点减法的 CoreFPU 配置器模拟(提问)
要运行仿真,请在核心配置窗口中选择“用户测试台”。生成 CoreFPU 后,综合前测试台硬件描述语言 (HDL) file安装在 Libero 中。
仿真波形(提问)
本节讨论 CoreFPU 的模拟波形。
下图显示了 32 位和 64 位定点到浮点转换的波形。
系统集成
下图显示了一个前amp使用核心的 le。在这个例子中amp例如,设计 UART 用作设计与主机 PC 之间的通信通道。信号 ain 和 bin(分别为 32 位或 64 位宽度)是从 UART 到设计的输入。CoreFPU 接收到 di_valid 信号后,计算结果。计算结果后,do_valid 信号变为高电平并将结果(aout/pout 数据)存储在输出缓冲区中。此过程同样适用于转换和算术运算。对于转换运算,仅输入 ain 即可;而对于算术运算,则需要 ain 和 bin 输入。输出 aout 启用用于转换运算,pout 端口启用用于算术运算。
图 4-16。 前任ampCoreFPU 系统
- 综合(提问)
要在 CoreFPU 上运行综合,请将设计根设置为 IP 组件实例,然后从 Libero 设计流程窗格运行综合工具。
布局布线(提问)
设计综合完成后,运行布局布线工具。CoreFPU 无需特殊的布局布线设置。 - 用户测试台(提问)
CoreFPU IP 版本附带用户测试平台。您可以使用此测试平台验证 CoreFPU 的功能行为。
下图显示了用户测试台的简化框图。用户测试台实例化了已配置的 CoreFPU 设计 (UUT),并包含行为测试数据生成器、必要的时钟和复位信号。
图 4-17. CoreFPU 用户测试台
重要提示:您必须监控 ModelSim 模拟器中的输出信号,请参阅模拟部分。
附加参考(提问)
本节提供了附加信息的列表。
有关软件、设备和硬件的更新和其他信息,请访问
Microchip FPGA 和 PLD 的知识产权页面 web地点。
- 已知问题和解决方法(提出问题)
CoreFPU v3.0 没有已知问题和解决方法。 - 已停产的功能和设备(提问)
此 IP 版本中没有已停止使用的功能和设备。
词汇表
以下是本文件中使用的术语和定义的列表。
表 6-1. 术语和定义
学期 | 定义 |
浮点运算单元 | 浮点单元 |
FP 添加 | 浮点加法 |
FP子 | 浮点减法 |
FP 多重 | 浮点乘法 |
已解决的问题
下表列出了各个 CoreFPU 版本的所有已解决的问题。
表 7-1。已解决的问题
发布 | 描述 |
3.0 | 以下是 v3.0 版本中所有已解决问题的列表:
案件编号:01420387 和 01422128 添加了舍入方案逻辑(四舍五入到最接近的偶数)。 |
2.1 | 以下是 v2.1 版本中所有已解决问题的列表: 当实例化多个核心时,由于存在重复模块,设计会遇到问题。 重命名 CoreFPU IP 实例会导致“未定义模块”错误。 |
1.0 | 初始版本 |
设备资源利用率和性能
CoreFPU 宏在下表列出的系列中实现。
表 8-1. 32 位 FPU PolarFire 单元设备利用率
FPGA 资源 | 利用率 | |||||||
家庭 | 4个查找表 | 数字化光纤 | 全部的 | 数学块 | 设备 | 百分比tage | 表现 | 延迟 |
定点到浮点 | ||||||||
极地火® | 260 | 104 | 364 | 0 | 强积金300T | 0.12 | 310兆赫 | 3 |
浮点到定点 | ||||||||
PolarFire | 591 | 102 | 693 | 0 | 强积金300T | 0.23 | 160兆赫 | 3 |
浮点加法 | ||||||||
PolarFire | 1575 | 1551 | 3126 | 0 | 强积金300T | 1.06 | 340兆赫 | 16 |
浮点减法 | ||||||||
PolarFire | 1561 | 1549 | 3110 | 0 | 强积金300T | 1.04 | 345兆赫 | 16 |
浮点乘法 | ||||||||
PolarFire | 465 | 847 | 1312 | 4 | 强积金300T | 0.44 | 385兆赫 | 14 |
FPGA 资源 | 利用率 | |||||||
家庭 | 4个查找表 | 数字化光纤 | 全部的 | 数学块 | 设备 | 百分比tage | 表现 | 延迟 |
定点到浮点 | ||||||||
RTG4™ | 264 | 104 | 368 | 0 | RT4G150 | 0.24 | 160兆赫 | 3 |
浮点到定点 | ||||||||
RTG4 | 439 | 112 | 551 | 0 | RT4G150 | 0.36 | 105兆赫 | 3 |
浮点加法 | ||||||||
RTG4 | 1733 | 1551 | 3284 | 0 | RT4G150 | 1.16 | 195兆赫 | 16 |
浮点减法 | ||||||||
RTG4 | 1729 | 1549 | 3258 | 0 | RT4G150 | 1.16 | 190兆赫 | 16 |
浮点乘法 | ||||||||
RTG4 | 468 | 847 | 1315 | 4 | RT4G150 | 0.87 | 175兆赫 | 14 |
FPGA 资源 | 利用率 | |||||||
家庭 | 4个查找表 | 数字化光纤 | 全部的 | 数学块 | 设备 | 百分比tage | 表现 | 延迟 |
定点到浮点 | ||||||||
极地火® | 638 | 201 | 849 | 0 | 强积金300T | 0.28 | 305兆赫 | 3 |
浮点到定点 | ||||||||
PolarFire | 2442 | 203 | 2645 | 0 | 强积金300T | 0.89 | 110兆赫 | 3 |
浮点加法 | ||||||||
PolarFire | 5144 | 4028 | 9172 | 0 | 强积金300T | 3.06 | 240兆赫 | 16 |
浮点减法 | ||||||||
PolarFire | 5153 | 4026 | 9179 | 0 | 强积金300T | 3.06 | 250兆赫 | 16 |
浮点乘法 | ||||||||
PolarFire | 1161 | 3818 | 4979 | 16 | 强积金300T | 1.66 | 340兆赫 | 27 |
FPGA 资源 | 利用率 | |||||||
家庭 | 4个查找表 | 数字化光纤 | 全部的 | 数学块 | 设备 | 百分比tage | 表现 | 延迟 |
定点到浮点 | ||||||||
RTG4™ | 621 | 201 | 822 | 0 | RT4G150 | 0.54 | 140兆赫 | 3 |
浮点到定点 | ||||||||
RTG4 | 1114 | 203 | 1215 | 0 | RT4G150 | 0.86 | 75兆赫 | 3 |
浮点加法 | ||||||||
RTG4 | 4941 | 4028 | 8969 | 0 | RT4G150 | 5.9 | 140兆赫 | 16 |
浮点减法 | ||||||||
RTG4 | 5190 | 4026 | 9216 | 0 | RT4G150 | 6.07 | 130兆赫 | 16 |
浮点乘法 | ||||||||
RTG4 | 1165 | 3818 | 4983 | 16 | RT4G150 | 3.28 | 170兆赫 | 27 |
重要提示:要增加频率,请在综合设置中选择启用重定时选项。
修订历史
修订历史描述了文档中实施的更改。更改按修订列出,从最新发布开始。
微芯片 FPGA 支持
Microchip FPGA 产品组为其产品提供各种支持服务,包括客户服务、客户技术支持中心、 web网站和全球销售办事处。 建议客户在联系支持之前访问 Microchip 在线资源,因为他们的查询很可能已经得到解答。
通过以下方式联系技术支持中心 web网站 www.microchip.com/support. 提及 FPGA 器件部件号,选择合适的案例类别,然后上传设计 files 同时创建技术支持案例。
联系客户服务以获得非技术产品支持,例如产品定价、产品升级、更新信息、订单状态和授权。
- 从北美拨打 800.262.1060
- 从世界其他地方拨打 650.318.4460
- 传真,来自世界各地,650.318.8044
微芯信息
商标
“Microchip”名称和徽标、“M”徽标以及其他名称、徽标和品牌是 Microchip Technology Incorporated 或其附属公司和/或子公司在美国和/或其他国家/地区的注册和非注册商标(“Microchip 商标”)。有关 Microchip 商标的信息可访问 https://www.microchip.com/en-us/about/legal-information/microchip-trademarks
ISBN: 979-8-3371-0947-3
法律声明
本出版物及其信息仅可用于 Microchip 产品,包括设计、测试 Microchip 产品并将其与您的应用程序集成。 以任何其他方式使用此信息均违反这些条款。 有关设备应用程序的信息仅为您提供方便而提供,可能会被更新所取代。 您有责任确保您的应用程序符合您的规范。 如需更多支持,请联系您当地的 Microchip 销售办事处,或通过以下网址获取更多支持 www.microchip.com/en-us/support/design-help/client-support-services
本信息由 MICROCHIP “按原样”提供。MICROCHIP 不作任何明示或暗示、书面或口头、法定或其他形式的陈述或保证,包括但不限于任何不侵权、适销性和适用于特定用途的默示保证,或与其状况、质量或性能相关的保证。
在任何情况下,对于与该信息或其使用有关的任何间接、特殊、惩罚性、偶然或后果性损失、损害、成本或费用,无论其原因如何,即使 MICROCHIP 已被告知发生此类损失的可能性或此类损害是可预见的,MICROCHIP 均不承担任何责任。在法律允许的最大范围内,MICROCHIP 对以任何方式与该信息或其使用有关的所有索赔的总赔偿责任不得超过您为该信息直接向 MICROCHIP 支付的费用(如有)。
在生命支持和/或安全应用中使用 Microchip 设备的风险完全由买方承担,买方同意为 Microchip 辩护、赔偿并免除其因此类使用而导致的任何和所有损害、索赔、诉讼或费用。除非另有说明,否则不会以任何方式(隐含或以其他方式)转让任何 Microchip 知识产权许可。
Microchip 设备代码保护功能
请注意 Microchip 产品的代码保护功能的以下详细信息:
- Microchip 产品符合其特定 Microchip 数据手册中所包含的规格。
- Microchip 相信,其产品系列在按照预期方式、符合操作规范和在正常条件下使用时是安全的。
- Microchip 重视并积极保护其知识产权。严格禁止尝试破坏 Microchip 产品的代码保护功能,否则可能违反《数字千年版权法》。
- Microchip 或任何其他半导体制造商都无法保证其代码的安全性。代码保护并不意味着我们保证产品“牢不可破”。代码保护在不断发展。Microchip 致力于不断改进我们产品的代码保护功能。
文件/资源
![]() |
MICROCHIP CoreFPU 核心浮点单元 [pdf] 用户指南 v3.0、v2.1、v2.0、v1.0、CoreFPU 核心浮点单元、核心浮点单元、浮点单元、点单元 |