OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [src_c/] [ihex2mif/] [main.c] - Blame information for rev 19

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 19 alirezamon
#include "ihex.c"
2
#include <unistd.h>
3
#include <stdlib.h>
4
 
5
#define DEFAULT_OUT_FILE_NAME           "out.mif"
6
#define DEAFULT_END_SIZE                "1FFF"
7
 
8
int     memory[65536];          /* the memory is global */
9
unsigned int    end_addr_int;
10
FILE * in, * out;
11
char *file_name, *end_addr, *out_file_name ;
12
 
13
void usage (void)
14
{
15
        printf("Usage: ./ihex2mif  <options>  \n");
16
        printf("\nOptions: \n");
17
        printf("         -e <end memory address> : end memory address .\n");
18
        printf("         -f <file name>: input ihex file  .\n");
19
 
20
}
21
 
22
void processArgs (int argc, char **argv )
23
{
24
   char c;
25
 
26
     opterr = 0;
27
 
28
   while ((c = getopt (argc, argv, "e:f:o:h")) != -1)
29
      {
30
         switch (c)
31
            {
32
                case 'e':
33
                        end_addr = optarg;
34
                        break;
35
                case 'f':
36
                        file_name = optarg;
37
                        break;
38
                case 'o':
39
                        out_file_name =  optarg;
40
                        break;
41
                case 'h':
42
                        usage();
43
                        exit(1);
44
                        break;
45
                case '?':
46
                  if (isprint (optopt))
47
                          fprintf (stderr, "Unknown option `-%c'.\n", optopt);
48
                  else
49
                          fprintf (stderr,   "Unknown option character `\\x%x'.\n",   optopt);
50
                default:
51
                        usage();
52
                        exit(1);
53
            }
54
      }
55
}
56
 
57
void update_out_file(void);
58
int main ( int argc, char **argv ){
59
 
60
        processArgs (argc,argv );
61
        if (file_name == NULL) {usage();exit(1);}
62
        if (end_addr  == NULL) end_addr = DEAFULT_END_SIZE;
63
        if (out_file_name == NULL) out_file_name = DEFAULT_OUT_FILE_NAME;
64
        //printf("filename=%s & size=%s\n",file_name, end_addr);
65
        sscanf(end_addr, "%x", &end_addr_int);
66
        //printf("%u\n", end_addr_int);
67
        out=fopen(out_file_name,"wb");
68
        if(out==NULL){printf("Output file cannot be created"); exit(1);}
69
        load_file(file_name);
70
        update_out_file();
71
 
72
 
73
        fclose(out);
74
 
75
return 0;
76
}
77
 
78
 
79
void update_out_file(void){
80
        unsigned int ram_addr=0,zero_count,ram_data,i;
81
        fprintf(out,"-- Copyright (C) 2013 Alireza Monemi\n\n");
82
        fprintf(out,"WIDTH=32;\nDEPTH=%d;\nADDRESS_RADIX=HEX;\nDATA_RADIX=HEX;\n\nCONTENT BEGIN\n", (end_addr_int>>2)+1);
83
        while(ram_addr<end_addr_int){
84
 
85
                zero_count =-1;
86
 
87
                do{
88
                        zero_count++;
89
                        ram_data =0;
90
                        for(i=0;i<4;i++)
91
                        {
92
                                ram_data <<=8;
93
                                ram_data |= memory[ram_addr+ (zero_count<<2)+i];
94
 
95
                        }
96
                        //printf("%u=,%08X\n",ram_addr+ (zero_count<<2), ram_data);
97
 
98
                }while(ram_data==0 && ((ram_addr+ (zero_count<<2))<end_addr_int ));
99
 
100
                if (zero_count == 0) {
101
                         fprintf(out,"\t%08X\t:\t%08X;\n" , ram_addr>>2,ram_data);
102
                }else if (zero_count == 1){
103
                        fprintf(out,"\t%08X\t:\t%08X;\n" , (ram_addr>>2),0);
104
                        if(ram_data!=0)fprintf(out,"\t%08X\t:\t%08X;\n" , (ram_addr>>2)+1,ram_data);
105
 
106
                }
107
                else {
108
                        fprintf(out,"\t[%08X..%08X]\t:\t00000000;\n" ,ram_addr>>2, (ram_addr>>2)+ zero_count-1);
109
                        if(ram_data!=0)fprintf(out,"\t%08X\t:\t%08X;\n" , (ram_addr>>2)+ zero_count,ram_data);
110
                }
111
                ram_addr+=(zero_count<<2)+4;
112
 
113
 
114
 
115
 
116
        }
117
        fprintf(out,"END;");
118
 
119
return;
120
}
121
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.