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

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:         ip.pm
5
# 
6
#
7
###############################################################################
8
use warnings;
9
use strict;
10
use ip_gen;
11
use Cwd;
12
 
13
 
14
package ip;
15
 
16
 
17
sub lib_new {
18
    my $class = ("ARRAY" eq ref $_[0]) ? "ip" : shift;
19
    my $self;
20
    $self = {};
21
        my $dir = Cwd::getcwd();
22 18 alirezamon
        $dir =~ s/ /\\ /g;
23 25 alirezamon
        my @files = glob "$dir/lib/ip/*/*.IP";
24 16 alirezamon
        for my $p (@files){
25
 
26
                # Read
27
                my  $ipgen;
28
                $ipgen = eval { do $p };
29
                # Might need "no strict;" before and "use strict;" after "do"
30 25 alirezamon
                 if ($@ || !defined $ipgen){
31
                        print  "\n**Warning: skipping  $p file due to error in reading: $@\n";
32
                       next;
33
                }
34
                        add_ip($self,$ipgen);
35 16 alirezamon
 
36
        }
37
 
38
 
39
    bless($self,$class);
40
 
41
 
42
    return $self;
43
}
44
 
45
 
46
sub ip_add_parameter {
47
        my ($self,$category,$module,$parameter,$deafult,$type,$content,$info,$glob_param,$redefine_param)=@_;
48
        if (!defined($category) ) {return 0;}
49
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
50
                $self->{categories}{$category}{names}{$module}{parameters}{$parameter}={};
51
                $self->{categories}{$category}{names}{$module}{parameters}{$parameter}{deafult}=$deafult;
52
                $self->{categories}{$category}{names}{$module}{parameters}{$parameter}{type}=$type;
53
                $self->{categories}{$category}{names}{$module}{parameters}{$parameter}{content}=$content;
54
                $self->{categories}{$category}{names}{$module}{parameters}{$parameter}{info}=$info;
55
                $self->{categories}{$category}{names}{$module}{parameters}{$parameter}{glob_param}=$glob_param;
56
                $self->{categories}{$category}{names}{$module}{parameters}{$parameter}{redefine_param}=$redefine_param;
57
        }
58
}
59
 
60
 
61
sub ip_remove_parameter {
62
        my ($self,$category,$module,$parameter)=@_;
63
        if (!defined($category) ) {return 0;}
64
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
65
                delete $self->{categories}{$category}{names}{$module}{parameters}{$parameter};
66
 
67
        }else{ return 0;}
68
        return 1;
69
}
70
 
71
 
72
 
73
sub ip_get_parameter {
74
        my ($self,$category,$module,$parameter)=@_;
75
        my ($deafult,$type,$content,$info,$glob_param,$redefine_param);
76
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
77
                $deafult        =$self->{categories}{$category}{names}{$module}{parameters}{$parameter}{deafult};
78
                $type           =$self->{categories}{$category}{names}{$module}{parameters}{$parameter}{type};
79
                $content        =$self->{categories}{$category}{names}{$module}{parameters}{$parameter}{content};
80
                $info           =$self->{categories}{$category}{names}{$module}{parameters}{$parameter}{info};
81
                $glob_param     =$self->{categories}{$category}{names}{$module}{parameters}{$parameter}{glob_param};
82
                $redefine_param =$self->{categories}{$category}{names}{$module}{parameters}{$parameter}{redefine_param};
83
        }
84
        return ($deafult,$type,$content,$info,$glob_param,$redefine_param);
85
}
86
 
87
 
88
sub ip_add_socket {
89
        my ($self,$category,$module,$interface,$type,$value,$connection_num)=@_;
90
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
91
                $self->{categories}{$category}{names}{$module}{sockets}{$interface}{type}=$type;
92
                $self->{categories}{$category}{names}{$module}{sockets}{$interface}{value}=$value;
93
                if(defined $connection_num){$self->{categories}{$category}{names}{$module}{sockets}{$interface}{connection_num}=$connection_num;}
94
 
95
 
96
        }
97
}
98
 
99
 
100
sub ip_get_socket {
101
        my ($self,$category,$module,$socket)=@_;
102
        my ($type,$value,$connection_num);
103
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
104
                $type                   =$self->{categories}{$category}{names}{$module}{sockets}{$socket}{type};
105
                $value                  =$self->{categories}{$category}{names}{$module}{sockets}{$socket}{value};
106
                $connection_num =$self->{categories}{$category}{names}{$module}{sockets}{$socket}{connection_num};
107
        }
108
        return ($type,$value,$connection_num);
109
}
110
 
111
sub ip_get_module_sockets_list {
112
        my ($self,$category,$module)=@_;
113
        my @r;
114
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
115
                foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{sockets}}){
116
                        push (@r,$p);
117
                }
118
        }
119
        return @r;
120
}
121
 
122
 
123
 
124
sub ip_add_plug {
125
        my ($self,$category,$module,$interface,$type,$value,$connection_num)=@_;
126
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
127
                $self->{categories}{$category}{names}{$module}{plugs}{$interface}{type}=$type;
128
                $self->{categories}{$category}{names}{$module}{plugs}{$interface}{value}=$value;
129
                if(defined $connection_num){ $self->{categories}{$category}{names}{$module}{plugs}{$interface}{connection_num}=$connection_num;}
130
 
131
        }
132
}
133
 
134
sub ip_get_plug {
135
        my ($self,$category,$module,$plug)=@_;
136
        my ($type,$value,$connection_num);
137
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
138
                $type                   =$self->{categories}{$category}{names}{$module}{plugs}{$plug}{type};
139
                $value                  =$self->{categories}{$category}{names}{$module}{plugs}{$plug}{value};
140
                $connection_num =$self->{categories}{$category}{names}{$module}{plugs}{$plug}{connection_num};
141
        }
142
        return ($type,$value,$connection_num);
143
}
144
 
145
sub ip_get_module_plugs_list {
146
        my ($self,$category,$module)=@_;
147
        my @r;
148
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
149
                foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{plugs}}){
150
                        push (@r,$p);
151
                }
152
        }
153
        return @r;
154
}
155
 
156
 
157
 
158
 
159
 
160
sub ip_add_port{
161
        my ($self,$category,$module,$port,$type,$range,$intfc_name,$intfc_port)=@_;
162
        if (!defined($category) ) {return 0;}
163
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
164
                $self->{categories}{$category}{names}{$module}{ports}{$port}={};
165
                $self->{categories}{$category}{names}{$module}{ports}{$port}{type}=$type;
166
                $self->{categories}{$category}{names}{$module}{ports}{$port}{range}=$range;
167
                $self->{categories}{$category}{names}{$module}{ports}{$port}{intfc_name}=$intfc_name;
168
                $self->{categories}{$category}{names}{$module}{ports}{$port}{intfc_port}=$intfc_port;
169
        }
170
}
171
 
172
 
173
sub ip_get_port{
174
        my ($self,$category,$module,$port)=@_;
175
        my ($type,$range,$intfc_name,$intfc_port);
176
        if ( exists ($self->{categories}{$category}{names}{$module}{ports}{$port}) ){
177
                $type           =$self->{categories}{$category}{names}{$module}{ports}{$port}{type};
178
                $range          =$self->{categories}{$category}{names}{$module}{ports}{$port}{range};
179
                $intfc_name     =$self->{categories}{$category}{names}{$module}{ports}{$port}{intfc_name};
180
                $intfc_port     =$self->{categories}{$category}{names}{$module}{ports}{$port}{intfc_port};
181
        }
182
        return ($type,$range,$intfc_name,$intfc_port);
183
}
184
 
185
sub ip_list_ports{
186
        my ($self,$category,$module)=@_;
187
        my @ports;
188
 
189
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
190
 
191
                foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{ports}}){
192
                        push (@ports,$p);
193
                }
194
        }
195
        return @ports;
196
}
197
 
198
 
199
 
200
sub ip_get_categories{
201
        my $self=shift;
202
        my @r;
203
        if  (exists ($self->{categories})){
204
                foreach my $p (sort keys %{$self->{categories}}){
205
                        push (@r,$p);
206
                }
207
        }
208
        return @r;
209
}
210
 
211
 
212
sub get_modules{
213
        my ($self,$category)=@_;
214
        my @r;
215
        if  (exists ($self->{categories}{$category})){
216
                foreach my $p (sort keys %{$self->{categories}{$category}{names}}){
217
                        push (@r,$p);
218
                }
219
        }
220
        return @r;
221
}
222
 
223
 
224
sub get_param_default{
225
        my ($self,$category,$module)=@_;
226
        my %r;
227
        if (!defined($module) ) {return %r;}
228
        foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{parameters}}){
229
                        $r{$p}=$self->{categories}{$category}{names}{$module}{parameters}{$p}{deafult};
230
                        #print "$p=$r{$p}\n";
231
                }
232
        return %r;
233
 
234
}
235
 
236
 
237
 
238
sub ip_add_socket_names{
239
        my($self,$ipgen,$category,$module, $socket)=@_;
240
        my $num=0;
241
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
242
 
243
                my $name=       $ipgen->ipgen_get_socket_name($socket,$num);
244
                do{
245
                        $self->{categories}{$category}{names}{$module}{sockets}{$socket}{$num}{name}=$name;
246
                        ++$num;
247
                        $name=  $ipgen->ipgen_get_socket_name($socket,$num);
248
                }while(defined $name);
249
 
250
        }
251
}
252
 
253
sub ip_get_socket_name{
254
        my($self,$category,$module, $socket,$num)=@_;
255
        my $name;
256
        if ( exists (   $self->{categories}{$category}{names}{$module}{sockets}{$socket}{$num}{name}) ){
257
                $name=  $self->{categories}{$category}{names}{$module}{sockets}{$socket}{$num}{name};
258
 
259
        }
260
        return $name;
261
}
262
 
263
 
264
 
265
sub ip_add_plug_names{
266
        my($self,$ipgen,$category,$module, $plug)=@_;
267
        my $num=0;
268
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
269
 
270
                my $name=       $ipgen->ipgen_get_plug_name($plug,$num);
271
                do{
272
                        $self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{name}=$name;
273
                        my ($addr,$width)= $ipgen->ipgen_get_wb_addr($plug,$num);
274
                        if (defined $addr){
275
                                        $self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{addr}=$addr;
276
                                        $self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{width}=$width;
277
                        }
278
                        ++$num;
279
                        $name=  $ipgen->ipgen_get_plug_name($plug,$num);
280
 
281
 
282
                }while(defined $name);
283
 
284
        }
285
}
286
 
287
sub ip_get_wb_addr{
288
        my($self,$category,$module,$plug,$num)=@_;
289
        my ($addr , $width);
290
        if(exists($self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{addr})){
291
                $addr  = $self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{addr};
292
                $width = $self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{width};
293
        }
294
        return ($addr , $width);
295
}
296
 
297
 
298
 
299
sub ip_get_plug_name{
300
        my($self,$category,$module, $plug,$num)=@_;
301
        my $name;
302
        if ( exists ($self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{name})){
303
                $name=$self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{name};
304
        }
305
        return $name;
306
}
307
 
308
 
309
 
310
 
311
sub get_module_sokets_value{
312
        my ($self,$category,$module)=@_;
313
        if (!defined($category) ) {return 0;}
314
        my %r;
315
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
316
                foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{sockets}}){
317
                        $r{$p}=$self->{categories}{$category}{names}{$module}{sockets}{$p}{value};
318
                }
319
 
320
        }
321
        return %r;
322
}
323
 
324
 
325
sub get_module_sokets_type{
326
        my ($self,$category,$module)=@_;
327
        if (!defined($category) ) {return 0;}
328
        my %r;
329
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
330
                foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{sockets}}){
331
                        $r{$p}=$self->{categories}{$category}{names}{$module}{sockets}{$p}{type};
332
                }
333
 
334
        }
335
        return %r;
336
}
337
 
338
 
339
sub get_module_plugs_value{
340
        my ($self,$category,$module)=@_;
341
        if (!defined($category) ) {return 0;}
342
        my %r;
343
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
344
                foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{plugs}}){
345
                        $r{$p}=$self->{categories}{$category}{names}{$module}{plugs}{$p}{value};
346
                }
347
 
348
        }
349
        return %r;
350
}
351
 
352
sub ip_get_param_order{
353
        my ($self,$category,$module)=@_;
354
        my @r;
355
        if(exists $self->{categories}{$category}{names}{$module}{parameters_order}) {
356
                @r=@{$self->{categories}{$category}{names}{$module}{parameters_order}};
357
 
358
        }
359
        return @r;
360
}
361
 
362
 
363
 
364
 
365 24 alirezamon
 
366
 
367
 
368
sub ip_add{
369
        my ($self,$category,$module,$filed_name,$filed_data)=@_;
370
        $self->{categories}{$category}{names}{$module}{$filed_name}=$filed_data;
371 16 alirezamon
}
372
 
373
 
374 24 alirezamon
sub ip_get{
375
        my ($self,$category,$module,$filed_name)=@_;
376
        return $self->{categories}{$category}{names}{$module}{$filed_name};
377
}
378
 
379
 
380
sub ip_get_list{
381
        my ($self,$category,$module,$filed_name)=@_;
382 16 alirezamon
        my @l;
383 24 alirezamon
        if( defined $self->{categories}{$category}{names}{$module}{$filed_name}){
384
                @l=@{$self->{categories}{$category}{names}{$module}{$filed_name}};
385
        }
386
        return @l;
387 16 alirezamon
}
388
 
389 17 alirezamon
 
390 24 alirezamon
sub ip_remove{
391
        my ($self,$category,$module,$filed_name)=@_;
392
        delete  $self->{categories}{$category}{names}{$module}{$filed_name};
393 17 alirezamon
}
394
 
395 24 alirezamon
 
396
 
397
 
398 16 alirezamon
sub add_ip{
399
 
400
        my ($self,$ipgen) =@_;
401
        my $module;
402 24 alirezamon
        $module =       $ipgen->ipgen_get("ip_name");
403
        my $module_name =$ipgen->ipgen_get("module_name");
404 16 alirezamon
        if(!defined $module){ $module   =       $module_name}
405 24 alirezamon
        my $category=   $ipgen->ipgen_get("category");
406 16 alirezamon
 
407 24 alirezamon
 
408 16 alirezamon
        $self->{categories}{$category}{names}{$module}={};
409 24 alirezamon
 
410 16 alirezamon
        $self->{categories}{$category}{names}{$module}{module_name}=$module_name;
411
        my @plugs= $ipgen->ipgen_list_plugs();
412
        #print "$module:@plugs\n";
413
        foreach my $plug (@plugs){
414
                my ($type,$value,$connection_num)= $ipgen->ipgen_get_plug($plug);
415
                ip_add_plug($self,$category,$module,$plug,$type,$value,$connection_num);
416
                ip_add_plug_names($self,$ipgen,$category,$module, $plug);
417
 
418
        }
419
        my @sockets= $ipgen->ipgen_list_sokets();
420
        #print "$module:@sockets\n";
421
        foreach my $socket (@sockets){
422
                my ($type,$value,$connection_num)= $ipgen->ipgen_get_socket($socket);
423
                ip_add_socket($self,$category,$module, $socket,$type,$value,$connection_num);
424
                ip_add_socket_names($self,$ipgen,$category,$module, $socket);
425
        }
426
        my @parameters=  $ipgen->ipgen_get_all_parameters_list();
427
        foreach my $param (@parameters){
428
                my ($deafult,$type,$content,$info,$glob_param,$redefine_param)=$ipgen->ipgen_get_parameter_detail($param);
429
                ip_add_parameter($self,$category,$module,$param,$deafult,$type,$content,$info,$glob_param,$redefine_param);
430
 
431
        }
432 24 alirezamon
 
433 16 alirezamon
        my @ports= $ipgen->ipgen_list_ports();
434
        foreach my $port (@ports){
435
                my($range,$type,$intfc_name,$intfc_port)=$ipgen->ipgen_get_port($port);
436
                ip_add_port($self,$category,$module,$port,$type,$range,$intfc_name,$intfc_port);
437
        }
438
 
439 24 alirezamon
        my @fileds =("system_h","hdl_files","sw_files","gen_sw_files","sw_params_list","unused","parameters_order","description");
440
        foreach my $p (@fileds){
441
                my $val=$ipgen->ipgen_get($p);
442
                $self->{categories}{$category}{names}{$module}{$p}=$ipgen->ipgen_get($p) if(defined $val );
443
        }
444 16 alirezamon
 
445 17 alirezamon
 
446
 
447 16 alirezamon
}
448
 
449
 
450
 
451
 
452
 
453
 
454
 
455
 
456
 
457
 
458
 
459
 
460
 
461
 
462
 
463
 
464
 
465
 
466
 
467
 
468
 
469
 
470
 
471
 
472
 
473
 
474
 
475
 
476
 
477
 
478
1

powered by: WebSVN 2.1.0

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