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 25

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

powered by: WebSVN 2.1.0

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