在我们做FPGA验证时,通常C语言或者用matlab来产生算法的输入数据。这时候,通常C语言的浮点数据(单精度或者双精度数据)在FPGA中运用时需要转换为IEEE-754的格式。下面本人写了一个C语言小程序,可以将浮点数据转换为内存存储的IEEE-754格式。
// float2int.cpp : 定义控制台应用程序的入口点。
//
#include "stdio.h"
#include <stdlib.h>
#include <stdlib.h>
#include "stdafx.h"
#include<windows.h>
//验证数据转换正确与否的网站
//https://www.h-schmidt.net/FloatConverter/IEEE754.html
//
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fid0 = NULL;
FILE *fid1 = NULL;
float rd_dat[20000];
int rd_dat1;
char rd_d[40];
int num = 0;
fid0 = fopen("E:/proj1_music/david-file/music_out.coe","r+");
fid1 = fopen("E:/proj1_music/david-file/tran_out.coe","w");
fid0 = fopen("E:/proj1_music/david-file/music_out.coe","r+");
//E:\ADBF\David\data
int nlen0 = ftell(fid0);
printf("begin to tansfer");
fprintf(fid1,"MEMORY_INITIALIZATION_RADIX=16;\n");
fprintf(fid1,"MEMORY_INITIALIZATION_VECTOR=\n");
while (!feof(fid0))
{
//fgets(rd_d,40,fid0); //读取一行
fscanf(fid0,"%f",&rd_dat);
//rd_dat = float(rd_d);
printf("%f\n", rd_dat[0]); //输出
rd_dat1 = *(int*)(&rd_dat[0]);
printf("%x\n",rd_dat1);
fprintf(fid1,"%x,\n",rd_dat1);
}
fprintf(fid1,";\n",rd_dat1);
fclose(fid0); //关闭文件
fclose(fid1); //关闭文件
while(1);
return 0;
}
例如:music_out.coe有一个数据是7.5689,那么转换之后的数据就是0x40f2346e.