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/] [interface.pm] - Blame information for rev 17

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

Line No. Rev Author Line
1 16 alirezamon
#!/usr/bin/perl -w -I ..
2
###############################################################################
3
#
4
# File:         interface.pm
5
# 
6
#
7
###############################################################################
8
use warnings;
9
use strict;
10
use intfc_gen;
11
use Data::Dumper;
12
 
13
use Cwd;
14
 
15
 
16
 
17
package interface;
18
 
19
 
20
 
21
 
22
 
23
sub interface_new {
24
    # be backwards compatible with non-OO call
25
    my $class = ("ARRAY" eq ref $_[0]) ? "interface" : shift;
26
    my $self;
27
 
28
 
29
    $self = {};
30
    $self->{plugs}        = {};
31
    $self->{sockets}      = {};
32
    $self->{categories}   = {};
33
 
34
 
35
        my $dir = Cwd::getcwd();
36
        my @files = glob "$dir/lib/interface/*.ITC";
37
        for my $p (@files){
38
                #print "$p\n"; 
39
                #my $infc_gen = Storable::retrieve($p);
40
        # Read
41
        my  $infc_gen;
42
        $infc_gen = eval { do $p };
43
        # Might need "no strict;" before and "use strict;" after "do"
44
        die "Error reading: $@" if $@;
45
 
46
        add_intfc($self,$infc_gen);
47
        }
48
 
49
 
50
    bless($self,$class);
51
 
52
 
53
    return $self;
54
}
55
 
56
 
57
sub add_category{
58
        my ($self,$category,$intfc_name,$info)=@_;
59
        $self->{categories}{$category}{names}{$intfc_name}{info}=$info;
60
 
61
}
62
 
63
sub get_description{
64
        my ($self,$category,$name)=@_;
65
        my $info;
66
        if(exists ($self->{categories}{$category}{names}{$name})){
67
                $info= $self->{categories}{$category}{names}{$name}{info};
68
        }
69
        return $info;
70
}
71
 
72
 
73
sub add_plug{
74
                my($self,$plug,$info,$category,$connection_num,$connect_to)=@_;
75
                $self->{plugs}{$plug}={};
76
                $self->{plugs}{$plug}{connection_num}=$connection_num;
77
                $self->{plugs}{$plug}{connect_to}=$connect_to;
78
                $self->{plugs}{$plug}{info}=$info;
79
                $self->{plugs}{$plug}{category}=$category;
80
}
81
 
82
sub get_plug{
83
                my($self,$plug)=@_;
84
                my ($connection_num,$connect_to,$info,$category);
85
                if(exists ($self->{plugs}{$plug})){
86
                        $connection_num =$self->{plugs}{$plug}{connection_num};
87
                        $connect_to             =$self->{plugs}{$plug}{connect_to};
88
                        $info                   =$self->{plugs}{$plug}{info};
89
                        $category               =$self->{plugs}{$plug}{category};
90
 
91
                }
92
                return ($connection_num,$connect_to,$info,$category);
93
}
94
 
95
 
96
 
97
sub add_socket{
98
                my($self,$socket,$info,$category,$connection_num,$connect_to)=@_;
99
                $self->{sockets}{$socket}={};
100
                $self->{sockets}{$socket}{connection_num}=$connection_num;
101
                $self->{sockets}{$socket}{connect_to}=$connect_to;
102
                $self->{sockets}{$socket}{info}=$info;
103
                $self->{sockets}{$socket}{category}=$category;
104
}
105
 
106
 
107
sub get_socket{
108
                my($self,$socket)=@_;
109
                my ($connection_num,$connect_to,$info,$category);
110
                if(exists ($self->{sockets}{$socket})){
111
                        $connection_num =$self->{sockets}{$socket}{connection_num};
112
                        $connect_to             =$self->{sockets}{$socket}{connect_to};
113
                        $info                   =$self->{sockets}{$socket}{info};
114
                        $category               =$self->{sockets}{$socket}{category}=$category;
115
                }
116
                return ($connection_num,$connect_to,$info,$category);
117
}
118
 
119
 
120
sub add_param_to_plug{
121
                my($self,$interface,$param,$value)=@_;
122
                $self->{plugs}{$interface}{parameters}{$param}=$value;
123
 
124
}
125
 
126
 
127
sub add_param_to_socket{
128
                my($self,$interface,$param,$value)=@_;
129
                $self->{sockets}{$interface}{parameters}{$param}=$value;
130
 
131
}
132
 
133
 
134
 
135
sub add_port_to_plug{
136 17 alirezamon
        my($self,$interface,$port,$range,$type,$outport_type,$connect,$default_out)=@_;
137 16 alirezamon
        $self->{plugs}{$interface}{ports}{$port}={};
138
        $self->{plugs}{$interface}{ports}{$port}{range}=$range;
139
        $self->{plugs}{$interface}{ports}{$port}{type}=$type;
140
        $self->{plugs}{$interface}{ports}{$port}{outport_type}=$outport_type;
141
        $self->{plugs}{$interface}{ports}{$port}{connect}=$connect;
142 17 alirezamon
        $self->{plugs}{$interface}{ports}{$port}{default_out}=$default_out;
143 16 alirezamon
 
144
}
145
 
146
 
147
sub get_port_info_of_socket{
148
        my($self,$socket,$port)=@_;
149 17 alirezamon
        my($range,$type,$connect,$default_out);
150 16 alirezamon
        if(exists ($self->{sockets}{$socket}{ports}{$port})){
151
                $range=$self->{sockets}{$socket}{ports}{$port}{range};
152
                $type=$self->{sockets}{$socket}{ports}{$port}{type};
153
                $connect=$self->{sockets}{$socket}{ports}{$port}{connect};
154 17 alirezamon
                $default_out=$self->{sockets}{$socket}{ports}{$port}{default_out};
155 16 alirezamon
        }
156 17 alirezamon
        return ($range,$type,$connect,$default_out);
157 16 alirezamon
}
158
 
159
sub get_port_info_of_plug{
160
        my($self,$plug,$port)=@_;
161 17 alirezamon
        my($range,$type,$connect,$default_out);
162 16 alirezamon
        if(exists ($self->{plugs}{$plug}{ports}{$port})){
163
                $range=$self->{plugs}{$plug}{ports}{$port}{range};
164
                $type=$self->{plugs}{$plug}{ports}{$port}{type};
165
                $connect=$self->{plugs}{$plug}{ports}{$port}{connect};
166 17 alirezamon
                $default_out=$self->{plugs}{$plug}{ports}{$port}{default_out};
167
 
168 16 alirezamon
        }
169 17 alirezamon
        return ($range,$type,$connect,$default_out);
170 16 alirezamon
}
171
 
172
 
173
sub add_port_to_socket{
174 17 alirezamon
        my($self,$socket,$port,$range,$type,$outport_type,$connect,$default_out)=@_;
175 16 alirezamon
        $self->{sockets}{$socket}{ports}{$port}={};
176
        $self->{sockets}{$socket}{ports}{$port}{range}=$range;
177
        $self->{sockets}{$socket}{ports}{$port}{type}=$type;
178
        $self->{sockets}{$socket}{ports}{$port}{outport_type}=$outport_type;
179
        $self->{sockets}{$socket}{ports}{$port}{connect}=$connect;
180 17 alirezamon
        $self->{sockets}{$socket}{ports}{$port}{default_out}=$default_out;
181 16 alirezamon
 
182
}
183
 
184
 
185
sub get_socket_port_list{
186
        my($self,$socket)=@_;
187
        my @ports;
188
        if(exists ($self->{sockets}{$socket}{ports})){
189
                foreach my $p(keys %{$self->{sockets}{$socket}{ports}}){
190
                        push (@ports,$p);
191
                }
192
        }
193
        return @ports;
194
}
195
 
196
sub get_plug_port_list{
197
        my($self,$plug)=@_;
198
        my @ports;
199
        if(exists ($self->{plugs}{$plug}{ports})){
200
                foreach my $p(keys %{$self->{plugs}{$plug}{ports}}){
201
                        push (@ports,$p);
202
                }
203
        }
204
        return @ports;
205
}
206
 
207
 
208
 
209
sub get_interfaces{
210
        my $self=shift;
211
        my @interfaces;
212
        if(exists ($self->{plugs})){
213
                foreach my $p (sort keys %{$self->{plugs}}){
214
                        push (@interfaces,$p);
215
                }
216
        }
217
        return @interfaces;
218
 
219
 
220
}
221
 
222
sub get_categories{
223
        my $self=shift;
224
        my @categories;
225
        if(exists ($self->{categories})){
226
                foreach my $p (sort keys %{$self->{categories}}){
227
                        push (@categories,$p);
228
                }
229
        }
230
        return @categories;
231
 
232
}
233
 
234
sub get_intfcs_of_category{
235
        my ($self,$category)=@_;
236
        my @list;
237
        if(exists ($self->{categories}{$category}{names})){
238
                foreach my $p (sort keys %{$self->{categories}{$category}{names}}){
239
                        push (@list,$p);
240
                }
241
 
242
        }
243
        return @list;
244
}
245
 
246
 
247
sub add_intfc{
248
 
249
        my ($self,$infc_gen) =@_;
250
 
251
        my $intfc_name=$infc_gen->intfc_get_interface_name();
252
        my $connection_num=$infc_gen->intfc_get_connection_num();
253
        my $intfc_type=$infc_gen->intfc_get_interface_type();
254
        my $intfc_info=$infc_gen->intfc_get_description();
255
        my $intfc_category=$infc_gen->intfc_get_category();
256
 
257
 
258 17 alirezamon
        my(%types,%ranges,%names,%connect_types,%connect_ranges,%connect_names,%outport_types,%default_outs);
259 16 alirezamon
 
260
 
261
        add_socket($self,$intfc_name,$intfc_info,$intfc_category,$connection_num,$intfc_name);
262
        add_plug($self,$intfc_name,$intfc_info,$intfc_category,$connection_num,$intfc_name);
263
 
264
        add_category($self,$intfc_category,$intfc_name,$intfc_info);
265
 
266
 
267 17 alirezamon
        $infc_gen->intfc_get_ports(\%types,\%ranges,\%names,\%connect_types,\%connect_ranges,\%connect_names,\%outport_types,\%default_outs);
268 16 alirezamon
        foreach my $id (sort keys %ranges){
269
                        my $type=$types{$id};
270
                        my $range=$ranges{$id};
271
                        my $name=$names{$id};
272
                        my $connect_type=$connect_types{$id};
273
                        my $connect_range=$connect_ranges{$id};
274
                        my $connect_name=$connect_names{$id};
275
                        my $outport_type=$outport_types{$id};
276 17 alirezamon
                        my $default_out=$default_outs{$id};
277 16 alirezamon
                        if($intfc_type eq 'plug'){
278
 
279
                                 #my($self,$interface,$port,$range,$type,$outport_type)
280 17 alirezamon
                                add_port_to_plug        ($self,$intfc_name,$name,$range,$type,$outport_type,$connect_name,$default_out);
281 16 alirezamon
                                #print "add_port_to_plug(\$self,$intfc_name,$name,$range,$type,,$outport_type);\n";
282 17 alirezamon
                                add_port_to_socket      ($self,$intfc_name,$connect_name,$connect_range,$connect_type,$outport_type,$name,$default_out);
283 16 alirezamon
                                #print "add_port_to_socket(\$self,$connect_name,$connect_range,$connect_type);\n";
284
                        }
285
                        else{
286 17 alirezamon
                                add_port_to_socket($self,$intfc_name,$name,$range,$type,$outport_type,$connect_name,$default_out);
287
                                add_port_to_plug($self,$intfc_name,$connect_name,$connect_range,$connect_type,$outport_type,$name,$default_out);
288 16 alirezamon
                        }
289
        }
290
 
291
}
292
 
293
 
294
 
295
 
296
 
297
 
298
 
299
 
300
 
301
 
302
1

powered by: WebSVN 2.1.0

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