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 18

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

powered by: WebSVN 2.1.0

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