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 48

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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