在我們做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.