数字IC实践项目(11)—基于Verilog的IEEE754 FPU设计与验证(开源项目)

前言

  PU(Floating Point Unit,浮点运算单元)是计算机中专门用于执行浮点数运算(如加法、减法、乘法、除法等)的硬件部件。浮点数是一种用于表示非常大或非常小的数字的数值类型,与整数不同,它能够表示小数部分。

  FPU 通过硬件加速浮点数运算,避免了由软件模拟浮点运算带来的性能瓶颈。在没有 FPU 的早期计算机中,浮点运算通常通过程序指令模拟,这使得浮点运算变得非常缓慢。随着硬件发展,FPU 作为计算机的一个独立模块,专门负责浮点数计算,大大提高了性能。

FPU 主要处理以下几种基本的浮点运算:

  1. 加法(Addition)
  2. 减法(Subtraction)
  3. 乘法(Multiplication)
  4. 除法(Division)
  5. 平方根(Square Root)
  6. 三角函数、对数函数等(对于更复杂的数学计算)
    现代的 FPU 还可以处理单精度和双精度 浮点数运算,并支持不同的精度级别和舍入模式。

项目简介

  项目来源于Jonathan P Dawson 设计的可综合FPU模块,源项目采用iverilog完成仿真验证,本项目将其移植为VCS平台,并基于Python完成并行仿真验证脚本,极大降低仿真验证时间。

项目难度:⭐⭐⭐
项目推荐度:⭐⭐
项目推荐天数:3~7天

##项目源地址##

1)项目主要特性

#########################################################
Synthesiseable IEEE 754 floating point library in Verilog.
#########################################################
1) 	Provides Divider, Multiplier and Adder
2)	Provides float_to_int and int_to_float
3)	Supports Denormal Numbers
4)	Round-to-nearest (ties to even)
5)	Optimised for area
6)	Over 100,000,000 test vectors (for each function)

2)源项目文件

  源项目提供加法、乘法、除法以及进制转换共计十余种设计,并附带用testbench, c++ golden model以及python运行脚本,每个设计采用32bit 浮点数定义,以下为源工程示例;

#####
adder
#####
1) 	c_test/test and test.cpp ; c++ 模型,用于产生Golden Vector
2)	adder.v  ; 32bit 浮点加法器设计源文件
3)	file_reader_a.v/file_reader_b.v ; Golden Vector 读取模块,采用三级类CPU结构,用于获取Vector内容
4)	file_write.v; resp 写入文件,便于同预期结果相比较
5)	testbench.v; DUT及外围读写模块整合
6)	testbench_tb.v ;测试平台顶层,产生时钟和复位信号

项目仿真优化

1)仿真环境需求

  源项目基于Python,C++以及icarus verilog 仿真器共同完成FPU的验证;测试平台包括一个 Python 脚本 run_test.py,以及一个作为验证参考的简单 C 语言模型。

  源工程测试向量包括角案例、边缘案例和 100,000,000约束随机向量。该测试套件可能需要几天时间才能完整运行完成,测试时间相对漫长。

2)sim_pool及auto_flow脚本

  本项目主要改进了源工程在测试向量的仿真时间,基于Python搭建了autoflow,并更改为支持VCS仿真平台,脚本执行一键执行,会将Pending太长导致的fail case重新仿真,并收集最终结果;主要工作如下:

Improvement by Devane (优快云 IC Brother) @2024.11.22
============================================================
    1.Modify run_test.py to support vcs simulation flow.
    2.Add sub_test.py to better support random test vectors (100w subtest).
    3.Add sim_pool mechanism to support parallel simulation, which can greatly shorten the simulation time of vectors.

Usage
=========
    cd sim_pool
        ./run
    ##1) sim.pool is the FPU test input file; format: DUT, number of random sub-tests  
    ##2) Parallel testing will schedule all CPU cores, please be careful to evaluate the server loading !!!

   需要注意的是,新增的auto脚本将会并行调用CPU,在测试中CPU占用率将持续维持在100%左右,在并行执行10*11个100w测试向量时,内存占用大概20G。

auto脚本执行时资源占用情况

3)仿真结果

  改进后工程完成一亿随机测试向量时耗时大概15h,较大程度上缩短了验证时间,同时会在终端输出最终结果,并生成summary.log文件,每个子目录包含100W随机测试向量结果,并生成fsdb波形(单次仿真为1W随机向量)

auto脚本执行时间
auto脚本终端输出
summary.log

  仅保留单次仿真波形以减小空间占用,以乘法器为例,仿真结束后可以cd到子目录查看具体波形。

1. cd multiplier/multiplier_0
2. make run_verdi

multiplier_0 waveform

总结

项目学习目的:
(1)熟练掌握IEEE754 Spec;
(2)学习FPU基本结构和基础原理;
(3)熟悉 Verilog HDL仿真以及Python自动化脚本工具;

  项目完善了开源FPU中的相关测试脚本,适用于IC设计初学者掌握Spec > 设计 > 验证的基本流程,可以帮助练习Python脚本, 建立工程flow感知能力。

  改进后的项目及完整的工程文件已经上传到优快云, 供大家学习。

下载链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值