高速流水线浮点加法器的FPGA实现
3.2浮点加法运算的实现
浮点加法运算可总结为比较、移位、相加、规范化等四个步骤,分别对应于compare、shift、sum、normalize四个模块。
(1)compare模块
本模块主要完成两输入浮点数的比较,若din_a、din_b为两个输入单精度浮点数,则在一个时钟周期内完成的运算结果如下:
◇大数指数b_exp这里的大数指绝对值的比较;
◇两浮点数的指数差sube,正数;
◇大数尾数b_ma;
◇小数尾数s_ma,该尾数已加入隐含1;
◇和符号c_sgn,为确定输出结果的符号;
◇加减选择add_sub,两输入同符号时为0(相加)、异符号时为1(相减),sum模块中使用实现加减选择。
(2)shift模块
shift模块的作用主要是根据两个输入浮点数的指数差来执行小数尾数(已加入隐含1)向右移动相应的位数,以将输入的两个浮点数指数调整为相同的数(同大数),若b_exp、sube、b_ma、s_ma、c_sgn、add_sub为输入信号(其含义见compare模块),则可输出如下运算结果(在一个时钟周期内完成):
◇大数指数(sft_bexp),将b_exp信号用寄存器延迟一个周期,以实现时序同步;
◇小数尾数(sft_sma),已完成向右移动相应的sube位;
◇大数尾数(sft_bma),将b_ma信号用寄存器延迟一个周期,以实现时序同步;
◇和符号(sft_csgn),将c_sgn信号用寄存器延迟一个周期,以实现时序同步;
◇加减选择(sft_addsub),将add_sub信号用寄存器延迟一个周期,以实现时序同步;
(3)sum模块
本模块可根据加减选择(sft_addsub(信号完成两输入浮点数尾数(已加入隐含1)的加减,若sft_bexp、sft_sma、sft_bma、sft_csgn、sft_addsub为输入信号(其含义见shift模块),则可输出如下运算结果(在一个时钟周期内完成):
◇大数指数(sum_bexp),将sft_bexp信号用寄存器延迟一个周期,以实现时序同步;
◇尾数和(sum_ma),为大数尾数与移位后小数尾数的和,差(两尾数已加入隐含1);
◇和符号(sum_csgn),将sft_csgn信号用寄存器延迟一个周期,以实现时序同步;
(4)normalize模块
normalize模块的作用主要是将前三个模块的运算结果规范为IEEE 754单精度浮点数标准,若sum_bexp、sum_ma、sum_csgn为输入信号(其含义见sum模块),则其输出的运算结果(在一个时钟周期内完成)只有一个和输出(data_out),也就是符合IEEE754浮点数标准的两个输入浮点数的和。
4系统综合与仿真
由于本工程是由compare、shift、sum、normalize四个模块组成的,而这四个模块通过串行方式进行连接,每个模块的操作都在一个时钟周期内完成,因此,整个浮点数加法运算可在四个时钟周期内完成。这使得工程不仅有确定的数据运算时延(latency),便于流水线实现,而且方便占用的时钟周期尽可能减少,从而极大地提高了运算的实时性。
4.1工程综合结果
经过Quartus II综合可知,本设计使用的StratixⅡEP2S15F484C3芯片共使用了641个ALUT(高级查找表)、188个寄存器、0位内存和可达到80 MHz的时钟频率,因此可证明,本系统利用合理的资源实现了高速浮点数加法运算。
4.2工程仿真结果
本工程仿真可使用Quartus II 8.0内嵌式仿真工具来编写Matlab程序,以生成大量随机单精度浮点数(以便于提高仿真代码覆盖率,提高仿真的精确度),然后计算它们相加的结果,并以文本形式存放在磁盘文件中。编写Matlab程序可产生作为仿真输入的*.vec文件,然后通过时序仿真后生成*.tbl文件,再编写Matlab程序提取其中有用的结果数据,并与先前磁盘文件中的结果相比较,以验证设计的正确性。
评论