这是一个基于 Chisel 实现的 FP8 浮点运算单元,支持 8 个 FP8 数的并行乘加运算。
src/main/scala/fpu/
├── core/ # 核心模块
│ ├── Fpu.scala # 主 FPU 模块
│ ├── FP32Accumulator.scala # FP32 累加器
│ ├── Multiplier.scala # FP8 乘法器
│ ├── FiveBitsAdder.scala # 5位加法器
│ ├── RightShifter.scala # 右移器
│ ├── NormalizationShifter.scala # 规格化移位器
│ └── Reduction.scala # 归约模块
├── Parameters.scala # 全局参数定义
└── Float32.scala # FP32 相关定义
- 支持 8 个 FP8 数的并行乘加运算
- 支持 FP32 累加器
- 支持动态缩放因子
- 流水线化设计
- 支持规格化和舍入
- 1 位符号位
- 4 位指数位
- 3 位尾数位
- 1 位符号位
- 8 位指数位
- 23 位尾数位
主模块,实现 8 个 FP8 数的并行乘加运算。包含以下处理阶段:
- FP8 乘法运算
- 指数对齐
- 多级归约(8→4→2→1)
- FP32 累加
- 结果规格化
实现 FP32 累加器,支持动态缩放和清零功能。
实现 FP8 乘法运算,处理符号位和尾数乘法。
实现 5 位加法器,用于指数计算。
实现右移操作,用于指数对齐。
实现规格化移位,处理舍入。
实现多级归约,将多个输入归约为单个输出。
a: 8个 FP8 输入b: 8个 FP8 输入scale: 缩放因子 (SInt<7>)accIn: FP32 累加器输入clear: 清零信号
out: FP32 输出结果
- 确保已安装 Chisel 开发环境
- 克隆项目到本地
- 运行测试:
mill FP8fpu.test.testOnly fpu.core.FpuTest
- 输入数据需要符合 FP8 格式
- 缩放因子范围为 [-63, 63]
- 累加器支持动态清零