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 24

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
 
233
sub get_param_default{
234
        my ($self,$category,$module)=@_;
235
        my %r;
236
        if (!defined($module) ) {return %r;}
237
        foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{parameters}}){
238
                        $r{$p}=$self->{categories}{$category}{names}{$module}{parameters}{$p}{deafult};
239
                        #print "$p=$r{$p}\n";
240
                }
241
        return %r;
242
 
243
}
244
 
245
 
246
 
247
sub ip_add_socket_names{
248
        my($self,$ipgen,$category,$module, $socket)=@_;
249
        my $num=0;
250
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
251
 
252
                my $name=       $ipgen->ipgen_get_socket_name($socket,$num);
253
                do{
254
                        $self->{categories}{$category}{names}{$module}{sockets}{$socket}{$num}{name}=$name;
255
                        ++$num;
256
                        $name=  $ipgen->ipgen_get_socket_name($socket,$num);
257
                }while(defined $name);
258
 
259
        }
260
}
261
 
262
sub ip_get_socket_name{
263
        my($self,$category,$module, $socket,$num)=@_;
264
        my $name;
265
        if ( exists (   $self->{categories}{$category}{names}{$module}{sockets}{$socket}{$num}{name}) ){
266
                $name=  $self->{categories}{$category}{names}{$module}{sockets}{$socket}{$num}{name};
267
 
268
        }
269
        return $name;
270
}
271
 
272
 
273
 
274
sub ip_add_plug_names{
275
        my($self,$ipgen,$category,$module, $plug)=@_;
276
        my $num=0;
277
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
278
 
279
                my $name=       $ipgen->ipgen_get_plug_name($plug,$num);
280
                do{
281
                        $self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{name}=$name;
282
                        my ($addr,$width)= $ipgen->ipgen_get_wb_addr($plug,$num);
283
                        if (defined $addr){
284
                                        $self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{addr}=$addr;
285
                                        $self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{width}=$width;
286
                        }
287
                        ++$num;
288
                        $name=  $ipgen->ipgen_get_plug_name($plug,$num);
289
 
290
 
291
                }while(defined $name);
292
 
293
        }
294
}
295
 
296
sub ip_get_wb_addr{
297
        my($self,$category,$module,$plug,$num)=@_;
298
        my ($addr , $width);
299
        if(exists($self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{addr})){
300
                $addr  = $self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{addr};
301
                $width = $self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{width};
302
        }
303
        return ($addr , $width);
304
}
305
 
306
 
307
 
308
sub ip_get_plug_name{
309
        my($self,$category,$module, $plug,$num)=@_;
310
        my $name;
311
        if ( exists ($self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{name})){
312
                $name=$self->{categories}{$category}{names}{$module}{plugs}{$plug}{$num}{name};
313
        }
314
        return $name;
315
}
316
 
317
 
318
 
319
 
320
sub get_module_sokets_value{
321
        my ($self,$category,$module)=@_;
322
        if (!defined($category) ) {return 0;}
323
        my %r;
324
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
325
                foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{sockets}}){
326
                        $r{$p}=$self->{categories}{$category}{names}{$module}{sockets}{$p}{value};
327
                }
328
 
329
        }
330
        return %r;
331
}
332
 
333
 
334
sub get_module_sokets_type{
335
        my ($self,$category,$module)=@_;
336
        if (!defined($category) ) {return 0;}
337
        my %r;
338
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
339
                foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{sockets}}){
340
                        $r{$p}=$self->{categories}{$category}{names}{$module}{sockets}{$p}{type};
341
                }
342
 
343
        }
344
        return %r;
345
}
346
 
347
 
348
sub get_module_plugs_value{
349
        my ($self,$category,$module)=@_;
350
        if (!defined($category) ) {return 0;}
351
        my %r;
352
        if ( exists ($self->{categories}{$category}{names}{$module}) ){
353
                foreach my $p (sort keys %{$self->{categories}{$category}{names}{$module}{plugs}}){
354
                        $r{$p}=$self->{categories}{$category}{names}{$module}{plugs}{$p}{value};
355
                }
356
 
357
        }
358
        return %r;
359
}
360
 
361
sub ip_get_param_order{
362
        my ($self,$category,$module)=@_;
363
        my @r;
364
        if(exists $self->{categories}{$category}{names}{$module}{parameters_order}) {
365
                @r=@{$self->{categories}{$category}{names}{$module}{parameters_order}};
366
 
367
        }
368
        return @r;
369
}
370
 
371
 
372
 
373
 
374 24 alirezamon
 
375
 
376
 
377
sub ip_add{
378
        my ($self,$category,$module,$filed_name,$filed_data)=@_;
379
        $self->{categories}{$category}{names}{$module}{$filed_name}=$filed_data;
380 16 alirezamon
}
381
 
382
 
383 24 alirezamon
sub ip_get{
384
        my ($self,$category,$module,$filed_name)=@_;
385
        return $self->{categories}{$category}{names}{$module}{$filed_name};
386
}
387
 
388
 
389
sub ip_get_list{
390
        my ($self,$category,$module,$filed_name)=@_;
391 16 alirezamon
        my @l;
392 24 alirezamon
        if( defined $self->{categories}{$category}{names}{$module}{$filed_name}){
393
                @l=@{$self->{categories}{$category}{names}{$module}{$filed_name}};
394
        }
395
        return @l;
396 16 alirezamon
}
397
 
398 17 alirezamon
 
399 24 alirezamon
sub ip_remove{
400
        my ($self,$category,$module,$filed_name)=@_;
401
        delete  $self->{categories}{$category}{names}{$module}{$filed_name};
402 17 alirezamon
}
403
 
404 24 alirezamon
 
405
 
406
 
407 16 alirezamon
sub add_ip{
408
 
409
        my ($self,$ipgen) =@_;
410
        my $module;
411 24 alirezamon
        $module =       $ipgen->ipgen_get("ip_name");
412
        my $module_name =$ipgen->ipgen_get("module_name");
413 16 alirezamon
        if(!defined $module){ $module   =       $module_name}
414 24 alirezamon
        my $category=   $ipgen->ipgen_get("category");
415 16 alirezamon
 
416 24 alirezamon
 
417 16 alirezamon
        $self->{categories}{$category}{names}{$module}={};
418 24 alirezamon
 
419 16 alirezamon
        $self->{categories}{$category}{names}{$module}{module_name}=$module_name;
420
        my @plugs= $ipgen->ipgen_list_plugs();
421
        #print "$module:@plugs\n";
422
        foreach my $plug (@plugs){
423
                my ($type,$value,$connection_num)= $ipgen->ipgen_get_plug($plug);
424
                ip_add_plug($self,$category,$module,$plug,$type,$value,$connection_num);
425
                ip_add_plug_names($self,$ipgen,$category,$module, $plug);
426
 
427
        }
428
        my @sockets= $ipgen->ipgen_list_sokets();
429
        #print "$module:@sockets\n";
430
        foreach my $socket (@sockets){
431
                my ($type,$value,$connection_num)= $ipgen->ipgen_get_socket($socket);
432
                ip_add_socket($self,$category,$module, $socket,$type,$value,$connection_num);
433
                ip_add_socket_names($self,$ipgen,$category,$module, $socket);
434
        }
435
        my @parameters=  $ipgen->ipgen_get_all_parameters_list();
436
        foreach my $param (@parameters){
437
                my ($deafult,$type,$content,$info,$glob_param,$redefine_param)=$ipgen->ipgen_get_parameter_detail($param);
438
                ip_add_parameter($self,$category,$module,$param,$deafult,$type,$content,$info,$glob_param,$redefine_param);
439
 
440
        }
441 24 alirezamon
 
442 16 alirezamon
        my @ports= $ipgen->ipgen_list_ports();
443
        foreach my $port (@ports){
444
                my($range,$type,$intfc_name,$intfc_port)=$ipgen->ipgen_get_port($port);
445
                ip_add_port($self,$category,$module,$port,$type,$range,$intfc_name,$intfc_port);
446
        }
447
 
448 24 alirezamon
        my @fileds =("system_h","hdl_files","sw_files","gen_sw_files","sw_params_list","unused","parameters_order","description");
449
        foreach my $p (@fileds){
450
                my $val=$ipgen->ipgen_get($p);
451
                $self->{categories}{$category}{names}{$module}{$p}=$ipgen->ipgen_get($p) if(defined $val );
452
        }
453 16 alirezamon
 
454 17 alirezamon
 
455
 
456 16 alirezamon
}
457
 
458
 
459
 
460
 
461
 
462
 
463
 
464
 
465
 
466
 
467
 
468
 
469
 
470
 
471
 
472
 
473
 
474
 
475
 
476
 
477
 
478
 
479
 
480
 
481
 
482
 
483
 
484
 
485
 
486
 
487
1

powered by: WebSVN 2.1.0

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