新闻中心

EEPW首页 > EDA/PCB > 设计应用 > 一种新的基于FPGA的数据格式转换方法

一种新的基于FPGA的数据格式转换方法

作者:时间:2011-11-16来源:网络收藏

2 在中实现实数到单精度浮点数的流程
2.1 流程
在实际工程应用中,所处理的数据都有一个或大或小的范围,在这个范围内将实数为单精度浮点数会节约芯片资源和降低功耗。故选择在-9 999.999 9~9 999.999 9的范围内完成实数到单精度浮点数的转换,如图2所示。考虑到实际,数值在很多情况下是通过串口获取的,并表现为ASCII形式。故本文中所提到的实数皆为ASCII表示。

本文引用地址:http://www.eepw.com.cn/article/190975.htm

c.JPG


转换过程采用流水线操作,用计数器控制转换进程。ASCII码转换为单精度浮点的如下:
(1)将8位ASCII码所代表的数字字符转为十进制数字(由于硬件电路对数字的表示只有0和1的组合,所以将实数的整数和小数分开表示);
(2)利用程序包里的数据类型转换函数将十进制数转换为二进制数,但小数部分的转换需要单独实现;
(3)对二进制表示的实数进行规格化;
(4)根据符号位ASCII码值确定符号位s,根据规格化移动的位数确定阶码e,将规格化中的小数部分f保留28位;
(5)根据就近舍入原则对保留的28位小数部分的后5位进行判断和舍入。
2.2 关键代码解析
的硬件描述语言中将整数的十进制转换为二进制比较简单,可以调用ISE软件自带的程序包中的转换函数来实现,但如何将小数部分转换为二进制是能否顺利完成从实数到单精度浮点数转换的关键。考虑到要对小数部分进行舍入运算,所以将小数部分转换28位的二进制。要用28位二进制表示小数部分,需利用VHDL语言中变量(variable)被赋值时立即生效的特性,结合FOR循环来实现。部分关键代码如下:
d.JPG
代码中frac_part是小数部分的十进制表示(因为integer类型只能表示整数,所以将小数部分扩大了10 000倍,但不影响结果的正确性),frac_28是小数部分的二进制表示。信号frac_28(27)的权值是2-1,依次以1/2倍率递减,frac_28(0)的权值是2-28。此进程由frac_part发生变化来启动,完成转换的时间是瞬时,也可以认为是一个时钟周期。



评论


相关推荐

技术专区

关闭