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

powered by: WebSVN 2.1.0

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