Felix

技术源于积累,成功始于执着!

FPGA定点小数计算(Verilog版)第五篇——浮点小数转换为定点小数

0
阅读(189) 评论(1)

用FPGA实现定点运算,相对于浮点运算来说,开销要小很多(时间上和空间上的)。但是在某些特定的场合,如多机协同处理等,要求FPGA的输入数据(或者是输出数据)为浮点形式的数据,这是就需要我们来做一个浮点小数与定点小数之间的转换了。

本文为本次定点小数相关博文连载的第五篇,后面的写作计划分别为:第六篇——平方根运算(查表法);第七篇——平方根运算(牛顿迭代法,使用John Carmack方法)。


和前面一样的套路,开始贴图模式:

首先是float2fixed.v:

image.png

image.png

然后是Testbench:

image.png

image.png

image.png

使用Syplify Pro综合获得的RTL视图:(太长了,贴了也看不清楚,所以不贴了!)

使用Diamond得到的:

Design Summary
   Number of registers:    101 out of 83994 (0%)
      PFU registers:           67 out of 83640 (0%)
      PIO registers:           34 out of   354 (10%)
   Number of SLICEs:        75 out of 41820 (0%)
      SLICEs as Logic/ROM:     75 out of 41820 (0%)
      SLICEs as RAM:            0 out of 31365 (0%)
      SLICEs as Carry:          5 out of 41820 (0%)
   Number of LUT4s:        131 out of 83640 (0%)
      Number used as logic LUTs:        121
      Number used as distributed RAM:     0
      Number used as ripple logic:       10
      Number used as shift registers:     0

下面是ActiveHDL的脚本文件:

image.png

功能仿真的波形图如下:

image.png

  1. 前面几篇写的都比较简单,在前面的基础上实现的平方根倒数计算的程序只能运行到50M多一点,为了能够提高运行速度。最近把前面所有的程序全部改写为了流水线设计,预计速度可以到150M以上,甚至更高。而且前面几篇的设计中也存在着一些不合理的地方(包括这一篇),优化过之后的程序,速度更快,latency更小!预计本月底写完,同时完成仿真和时序约束,届时会更新。