首页 > 技术文章 > FPGA工程中用C语言对文件进行处理_生成mif文件

sepeng 2016-08-05 09:51 原文

  本博客中有用verilog处理文件数据的代码,本博文采用C 处理文件中的数据。

  有时候要生成一个mif文件—— altera memory  initial file。本次工程中我得到的是一个大型的数据矩阵一样的东西,我需要慢慢靠近把它处理成mif格式。

第一个程序,把文件读进来是这么干的

 1 //date    :2016/07/09
 2 //designer:cobbpeng
 3 //version :00
 4 //function:
 5 
 6 #include "stdio.h"
 7 //#define METHOD1
 8 
 9 void main ()
10 {
11     unsigned int b ; 
12     int i ; 
13     FILE  *fp0 = fopen("test.txt","r+") ; 
14 #ifdef METHOD1
15     while (!feof (fp0)) 
16     {
17         fscanf (fp0,"%x",&b); 
18 #else 
19         while (fscanf (fp0,"%x",&b)!=EOF) 
20 #endif
21         printf ("%x\n",b); 
22 #ifdef METHOD1
23     }
24 #endif 
25     fclose (fp0) ; 
26 }

 

文件读进来了,需要把它格式转换成一行一个的格式,继续修改程序

 1 //date    :2016/07/09
 2 //designer:cobbpeng
 3 //version :01
 4 //***************************************************************************
 5 //function:read the file finger.txt. It show as a array 112*96 in file ,
 6 //            I musk show the data alone at each line
 7 
 8 #include "stdio.h"
 9 #define TEST
10 
11 int main  ()
12 {
13     unsigned int in_data = 0 ; 
14 #ifdef TEST
15     unsigned int i = 0 ; 
16 #endif
17 //open file one for read  and one for write     
18     FILE  *fp0 = fopen("finger.txt","r") ; 
19     FILE  *fp1 = fopen("format.txt","w") ;
20 //********************************************************
21     if ((fp0==NULL)&&(fp1 == NULL)) 
22         printf ("open file  failed !!! \n");
23     else 
24     {
25         printf ("open file success !!! \n");
26 //read data finish until being end of the file 
27         while (fscanf (fp0,"%x",&in_data)!=EOF) 
28         {
29             fprintf(fp1,"%.2x\n",in_data);
30 #ifdef TEST
31             if(i<115) printf ("%.2x\n",in_data) ; 
32             i++ ; 
33             //break ;     
34 #endif
35         }  
36     }
37     fclose (fp0) ; 
38     fclose (fp1) ;     
39 }

 

 

 

 上面的代码只是转换了一个格式对吧,要转换到mif格式还差点。所以有了以下代码

 1 //date    :2016/07/09
 2 //designer:cobbpeng
 3 //version :02
 4 //***************************************************************************
 5 //function:read the file finger.txt. It show as a array 112*96 in file ,
 6 //            I musk show the data alone at each line
 7 
 8 #include "stdio.h"
 9 //#define TEST
10 #define METHOD1
11 
12 int main  ()
13 {
14     unsigned int in_data = 0 ; 
15     unsigned int byte_num =0 ; 
16     char w_num =0 ; 
17     char h_num = 0 ;
18     char str_mif[5] ; 
19     char *s_s;
20     
21 #ifdef TEST
22     unsigned int i = 0 ; 
23 #endif
24 //open file 
25     FILE  *fp0 = fopen("finger.txt","r") ; 
26     FILE  *fp1 = fopen("format.txt","w") ;
27     FILE  *fp2 = fopen("musk_mem.mif","r") ;
28 //********************************************************
29     if ((fp0==NULL)&&(fp1 == NULL)&&(fp2 == NULL)) 
30         printf ("open file  failed !!! \n");
31     else 
32     {
33         printf ("open file success !!! \n");
34 //read data finish until being end of the file 
35         while (fscanf (fp0,"%x",&in_data)!=EOF) 
36         {
37             byte_num++; 
38             fprintf(fp1,"%.2x,\n",in_data);
39             w_num++;         
40 #ifdef TEST
41             if(i<115) printf ("%.2x\n",in_data) ; 
42             i++ ; 
43             //break ;     
44 #endif
45         }
46         printf ("data num = %ld",byte_num);
47 //***************************************************************    
48 #ifdef METHOD1    
49     while (fscanf (fp2,"%c",&str_mif[0])!=EOF) 
50         {
51 #else 
52     while(!feof(fp2))
53         {
54             str_mif[0]=fgetc(fp2) ;
55 #endif 
56             //printf ("%c\n",str_mif[0]);
57 
58             if((str_mif[0]=='N')&&(str_mif[1]=='I')&&(str_mif[2]=='G')&&(str_mif[3]=='E')&&(str_mif[4]=='B'))
59             {
60                 printf ("\nfind string\n");
61                 break ; 
62             }
63             else 
64             {
65                 str_mif[4]=str_mif[3] ;
66                 str_mif[3]=str_mif[2] ;
67                 str_mif[2]=str_mif[1] ;
68                 str_mif[1]=str_mif[0] ;
69             }
70         }
71         
72     }
73     fclose (fp0) ; 
74     fclose (fp1) ;     
75     fclose (fp2) ; 
76 }

上面的程序也只是去寻找一个节点:以BEGIN为结尾的地方。—— 因为mif文件中begin后面跟随的是数据。并没有做其他的东西。—— 用C语言去追踪文件中的特定字符还真是有些麻烦。

当我做到这里的时候发现

 

把数据导入excel,再在excel中复制数据到Q中开启的mif文件中 —— 几个快捷键就搞定了。我去,让我凑了一整天的C 代码。

 

猜到了开头,却没有猜到结尾。

 

 

欢迎加入: FPGA广东交流群:162664354

      FPGA开发者联盟: 485678884

推荐阅读