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/] [perl_gui/] [lib/] [perl/] [hdr_file_gen.pl] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 17 alirezamon
use lib 'lib/perl';
2
 
3
use strict;
4
use warnings;
5 48 alirezamon
use FindBin;
6
use lib $FindBin::Bin;
7 17 alirezamon
use soc;
8
use ip;
9
 
10
 
11
 
12
##################
13
#     header file gen
14
##################
15
 
16
 
17
 
18 24 alirezamon
sub get_instance_global_variable{
19
        my ($soc,$id)   = @_;
20
        my $module      =$soc->soc_get_module($id);
21
        my $module_name =$soc->soc_get_module_name($id);
22
        my $category    =$soc->soc_get_category($id);
23
        my $inst        =$soc->soc_get_instance_name($id);
24
        my @plugs= $soc->soc_get_all_plugs_of_an_instance($id);
25
        my %params= $soc->soc_get_module_param($id);
26
        #add two extra variable the instance name and base addresses
27 28 alirezamon
        my $core_id= $soc->object_get_attribute('global_param','CORE_ID');
28 25 alirezamon
        $params{CORE_ID}=(defined $core_id)? $core_id: 0;
29 24 alirezamon
        $params{IP}=$inst;
30
        $params{CORE}=$id;
31
        foreach my $plug (@plugs){
32
                my @nums=$soc->soc_list_plug_nums($id,$plug);
33
                foreach my $num (@nums){
34
                        my ($addr,$base,$end,$name,$connect_id,$connect_socket,$connect_socket_num)=$soc->soc_get_plug($id,$plug,$num);
35
                        #wishbone slave address
36
                        if((defined $connect_socket) && ($connect_socket eq 'wb_slave')){
37
                                #print "$addr,$base,$end,$connect_id,$connect_socket,$connect_socket_num\n";
38
                                my $base_hex=sprintf("0X%08x", $base);
39
                                my $end_hex=sprintf("0X%08x", $end);
40
                                my $val="BASE".$num;
41
                                $params{$val}=$base_hex;
42
 
43
                        }
44
 
45
 
46
                }
47
        }
48
        $params{BASE}=$params{BASE0} if(defined $params{BASE0});
49
 
50 17 alirezamon
 
51 24 alirezamon
        return (\%params);
52
}
53
 
54
 
55
sub replace_golb_var{
56
        my ($hdr,$ref)=@_;
57
        my %params= %{$ref};
58
        foreach my $p (sort keys %params){
59
                my $pattern=  '\$\{?' . $p . '(\}|\b)';
60
                ($hdr=$hdr)=~s/$pattern/$params{$p}/g;
61
        }
62
        return $hdr;
63
 
64
}
65
 
66
 
67
 
68 17 alirezamon
sub generate_header_file{
69 38 alirezamon
        my ($soc,$project_dir,$sw_path,$hw_path,$dir)= @_;
70 25 alirezamon
        my $soc_name=$soc->object_get_attribute('soc_name');
71 17 alirezamon
        $soc_name = uc($soc_name);
72
        if(!defined $soc_name){$soc_name='soc'};
73
 
74 48 alirezamon
        my $name=$soc->object_get_attribute('soc_name');
75
 
76 17 alirezamon
        my @instances=$soc->soc_get_all_instances();
77
        my $system_h="#ifndef $soc_name\_SYSTEM_H\n\t#define $soc_name\_SYSTEM_H\n";
78 48 alirezamon
        my $system_c="#include \"$name.h\"\n\n";
79
 
80 17 alirezamon
        #add_text_to_string(\$system_h, "\n #include <stdio.h> \n #include <stdlib.h> \n #include \"aemb/core.hh\"");
81
 
82
 
83
        my $ip = ip->lib_new ();
84
 
85
 
86
        foreach my $id (@instances){
87
                my $module              =$soc->soc_get_module($id);
88
                my $module_name =$soc->soc_get_module_name($id);
89
                my $category    =$soc->soc_get_category($id);
90
                my $inst                =$soc->soc_get_instance_name($id);
91 24 alirezamon
 
92 48 alirezamon
                add_text_to_string(\$system_h,"\n \n /*  $inst   */ \n");
93
                $system_c = $system_c . "\n \n /*  $inst   */ \n";
94
 
95 25 alirezamon
                #$inst=uc($inst);
96 17 alirezamon
                # print base address
97
                my @plugs= $soc->soc_get_all_plugs_of_an_instance($id);
98 24 alirezamon
 
99
 
100
                my %params= %{get_instance_global_variable($soc,$id)};
101
 
102
 
103 17 alirezamon
                foreach my $plug (@plugs){
104
                        my @nums=$soc->soc_list_plug_nums($id,$plug);
105
                        foreach my $num (@nums){
106
                                my ($addr,$base,$end,$name,$connect_id,$connect_socket,$connect_socket_num)=$soc->soc_get_plug($id,$plug,$num);
107
                                        #intrrupt 
108
                                        if((defined $connect_socket) && ($connect_socket eq 'interrupt_peripheral')){
109
                                                add_text_to_string(\$system_h,"//intrrupt flag location\n");
110
                                                add_text_to_string(\$system_h," #define $inst\_INT (1<<$connect_socket_num)\n") if(scalar (@nums)==1);
111
                                                add_text_to_string(\$system_h," #define $inst\_$num\_INT    (1<<$connect_socket_num)\n") if(scalar (@nums)>1);
112 48 alirezamon
                                                add_text_to_string(\$system_h," #define $inst\_INT_PIN $connect_socket_num\n") if(scalar (@nums)==1);
113
                                                add_text_to_string(\$system_h," #define $inst\_$num\_INT_PIN    $connect_socket_num\n") if(scalar (@nums)>1);
114 17 alirezamon
                                        }
115
 
116
                        }
117
                }
118
 
119
 
120 48 alirezamon
                my $hdr_h=$ip->ip_get($category,$module,"system_h");
121
                if(defined $hdr_h){
122
                        $hdr_h=replace_golb_var($hdr_h,\%params);
123
                        add_text_to_string(\$system_h,"$hdr_h\n");
124
                }
125 24 alirezamon
 
126
 
127 48 alirezamon
                my $hdr_c=$ip->ip_get($category,$module,"system_c");
128
                if(defined $hdr_c){
129
                        $hdr_c=replace_golb_var($hdr_c,\%params);
130
                        $system_c=$system_c."$hdr_c\n";
131 24 alirezamon
                }
132 48 alirezamon
 
133 17 alirezamon
 
134 24 alirezamon
                # Write Software gen files
135
                my @sw_file_gen = $ip->ip_get_list($category,$module,"gen_sw_files");
136
                foreach my $file (@sw_file_gen){
137
                        if(defined $file ){
138
                                my ($path,$rename)=split('frename_sep_t',$file);
139
                                $rename=replace_golb_var($rename,\%params);
140
                                #read the file content
141
                                my $content=read_file_cntent($path,$project_dir);
142
                                $content=replace_golb_var($content,\%params);
143
 
144 48 alirezamon
                                if(defined $rename){
145
                                        open(FILE,  ">$sw_path/$rename") || die "Can not open: $!";
146 24 alirezamon
                                        print FILE $content;
147 48 alirezamon
                                        close(FILE) || die "Error closing file: $!";
148 24 alirezamon
                                }
149
                        }
150 17 alirezamon
                }
151 24 alirezamon
 
152 38 alirezamon
                # Write Hardware gen files
153
                my @hw_file_gen = $ip->ip_get_list($category,$module,"gen_hw_files");
154
                foreach my $file (@hw_file_gen){
155
                        if(defined $file ){
156
                                my ($path,$rename)=split('frename_sep_t',$file);
157
                                $rename=replace_golb_var($rename,\%params);
158
                                #read the file content
159
                                my $content=read_file_cntent($path,$project_dir);
160
                                $content=replace_golb_var($content,\%params);
161
 
162 48 alirezamon
                                if(defined $rename){
163
                                        open(FILE,  ">$hw_path/$rename") || die "Can not open: $!";
164 38 alirezamon
                                        print FILE $content;
165 48 alirezamon
                                        close(FILE) || die "Error closing file: $!";
166 38 alirezamon
                                }
167
                        }
168
                }
169
 
170
 
171 17 alirezamon
 
172
        }
173
 
174
        add_text_to_string(\$system_h,"#endif\n");
175 48 alirezamon
 
176
        #write sytem.h file
177
        open(FILE,  ">$sw_path/$name.h") || die "Can not open: $!";
178
        print FILE $system_h;
179
        close(FILE) || die "Error closing file: $!";
180 17 alirezamon
 
181 48 alirezamon
        #write system.c file
182
        open(FILE,  ">$sw_path/$name.c") || die "Can not open: $!";
183
        print FILE $system_c;
184
        close(FILE) || die "Error closing file: $!";
185 24 alirezamon
 
186 48 alirezamon
 
187
 
188 24 alirezamon
 
189 48 alirezamon
 
190 17 alirezamon
}
191
 
192
 
193
1

powered by: WebSVN 2.1.0

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