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 48

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

powered by: WebSVN 2.1.0

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