新闻中心

EEPW首页>嵌入式系统>设计应用> 高速流水线浮点加法器的FPGA实现

高速流水线浮点加法器的FPGA实现

作者: 时间:2010-02-12 来源:网络 收藏

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程序提取其中有用的结果数据,并与先前磁盘文件中的结果相比较,以验证设计的正确性。



评论


相关推荐

技术专区

关闭