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_gen.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:         interface.pm
5
# 
6
#
7
###############################################################################
8
use warnings;
9
use strict;
10
 
11
 
12 48 alirezamon
 
13 16 alirezamon
package ip_gen;
14
#use Clone 'clone';
15
 
16
 
17
 
18
sub ip_gen_new {
19
    # be backwards compatible with non-OO call
20
    my $class = ("ARRAY" eq ref $_[0]) ? "ip_gen" : shift;
21
    my $self;
22
 
23
 
24
    $self = {};
25
    $self->{file_name}        = ();
26
    $self->{parameters_order}=[];
27
    $self->{ports_order}=[];
28
    $self->{hdl_files}=[];
29 48 alirezamon
        $self->{hdl_files_ticked}=[];
30 16 alirezamon
 
31
 
32
    bless($self,$class);
33
 
34
 
35
    return $self;
36
}
37
 
38
 
39
 
40
sub ipgen_set_module_list{
41
        my ($self,@list)=@_;
42
        $self->{modules}={};
43
        foreach my $p(@list) {
44
                $self->{modules}{$p}={};
45
        }
46
 
47
}
48
 
49
 
50
 
51
sub ipgen_get_module_list{
52
                my ($self)=@_;
53
                my @modules;
54
                if(exists($self->{modules})){
55
                        @modules=keys %{$self->{modules}};
56
                }
57
                return @modules;
58
}
59
 
60
 
61
 
62
sub ipgen_add_parameter{
63 38 alirezamon
        my ($self,$parameter,$default,$type,$content,$info,$global_param,$redefine)=@_;
64
        $self->{parameters}{$parameter}{"default"}=$default;
65 16 alirezamon
        $self->{parameters}{$parameter}{type}=$type;
66
        $self->{parameters}{$parameter}{content}=$content;
67
        $self->{parameters}{$parameter}{info}=$info;
68
        $self->{parameters}{$parameter}{global_param}=$global_param;
69
        $self->{parameters}{$parameter}{redefine_param}=$redefine;
70
}
71
 
72
 
73
 
74
 
75
 
76
 
77
sub ipgen_push_parameters_order{
78
        my ($self,$param)=@_;
79
        if(defined $param){
80
                push(@{$self->{parameters_order}},$param);
81
        }
82
 
83
}
84
 
85
sub ipgen_remove_parameters_order{
86
        my ($self,$param)=@_;
87
        my @r=@{$self->{parameters_order}};
88
        my @n;
89
        foreach my $p(@r){
90
                if( $p ne $param) {push(@n,$p)};
91
 
92
        }
93
        $self->{parameters_order}=\@n;
94
 
95
}
96
 
97
 
98
sub ipgen_add_ports_order{
99
        my ($self,@ports_order) =@_;
100
        $self->{ports_order}=\@ports_order;
101
}
102
 
103
 
104
 
105
sub ipgen_get_ports_order{
106
        my $self =shift;
107
        my @order=(defined $self->{ports_order})?  @{$self->{ports_order}} : undef;
108
    return  @order;
109
}
110
 
111
 
112
 
113
 
114
sub ipgen_remove_parameter{
115
        my ($self,$parameter)=@_;
116
        if(exists ( $self->{parameters}{$parameter})){
117
                delete $self->{parameters}{$parameter};
118
        }
119
}
120
 
121
sub ipgen_get_parameter_detail{
122
        my ($self,$parameter)=@_;
123 38 alirezamon
        my ($default,$type,$content,$info,$global_param,$redefine);
124 16 alirezamon
        if(exists ($self->{parameters}{$parameter})){
125 38 alirezamon
                $default                =$self->{parameters}{$parameter}{"default"};
126 16 alirezamon
                $type                   =$self->{parameters}{$parameter}{type};
127
                $content                =$self->{parameters}{$parameter}{content};
128
                $info                   =$self->{parameters}{$parameter}{info};
129
                $global_param           =$self->{parameters}{$parameter}{global_param};
130
                $redefine               =$self->{parameters}{$parameter}{redefine_param};
131
 
132
        }
133 38 alirezamon
        return ($default,$type,$content,$info,$global_param,$redefine);
134 16 alirezamon
}
135
 
136
sub ipgen_get_all_parameters_list{
137
        my ($self)=@_;
138
        my @parameters;
139
        if(exists ($self->{parameters})){
140
                foreach my $p ( keys %{$self->{parameters}}){
141
                        push(@parameters,$p);
142
                }
143
        }
144
        return @parameters;
145
}
146
 
147
sub ipgen_remove_all_parameters{
148
        my ($self)=@_;
149
        if (exists ($self->{parameters})){
150
                delete $self->{parameters};
151
        }
152
}
153
 
154
 
155
 
156
sub ipgen_add_port{
157
        my($self,$port,$range,$type,$intfc_name,$intfc_port)=@_;
158
        $self->{ports}{$port}{range}=$range;
159
        $self->{ports}{$port}{type}=$type;
160
        $self->{ports}{$port}{intfc_name}=$intfc_name;
161
        $self->{ports}{$port}{intfc_port}=$intfc_port;
162
}
163
 
164
sub ipgen_get_port{
165
        my($self,$port)=@_;
166
        my($range,$type,$intfc_name,$intfc_port);
167
        if(exists ($self->{ports}{$port})){
168
                $range=$self->{ports}{$port}{range};
169
                $type=$self->{ports}{$port}{type};
170
                $intfc_name=$self->{ports}{$port}{intfc_name};
171
                $intfc_port=$self->{ports}{$port}{intfc_port};
172
        }
173
        return ($range,$type,$intfc_name,$intfc_port);
174
}
175
 
176
 
177
sub ipgen_list_ports{
178
        my($self)=@_;
179
        my @ports;
180
        foreach my $p (keys %{$self->{ports}}){
181
                push (@ports,$p);
182
        }
183
        return @ports;
184
}
185
 
186
 
187
 
188
sub ipgen_remove_all_ports{
189
        my $self=shift;
190
        if (exists ($self->{ports})){
191
                delete $self->{ports};
192
        }
193
 
194
}
195
 
196
sub ipgen_add_soket{
197
        my ($self,$socket,$type,$value,$connection_num)=@_;
198
        $self->{sockets}{$socket}{type}=$type;
199
        if(defined $value) {
200
                $self->{sockets}{$socket}{value}=$value;
201
 
202
        }
203
        if(defined $connection_num) {$self->{sockets}{$socket}{connection_num}=$connection_num;}
204
        if($type eq 'num'){
205
                if($value == 1) {ipgen_set_socket_name($self,$socket,0,$socket);}
206
                else{
207
                                for (my $i=0; $i<$value; $i++){
208
                                        my $name="$socket\_$i";
209
                                        ipgen_set_socket_name($self,$socket,$i,$name);
210
                                }
211
 
212
                }
213
 
214
        }
215
        else{ipgen_set_socket_name($self,$socket,0,$socket);}
216
 
217
        #print "\$self->{sockets}{$socket}{type}=$type;\n"
218
}
219
 
220
sub ipgen_add_plug{
221
        my ($self,$plug,$type,$value)=@_;
222
        $self->{plugs}{$plug}{type}=$type;
223
        if(defined $value){$self->{plugs}{$plug}{value}=$value};
224
        if($type eq 'num'){
225
                if($value == 1) {ipgen_set_plug_name($self,$plug,0,$plug);}
226
                else{
227
                                for (my $i=0; $i<$value; $i++){
228
                                        my $name="$plug\_$i";
229
                                        ipgen_set_plug_name($self,$plug,$i,$name);
230
                                }
231
 
232
                }
233
 
234
        }
235
        else{ipgen_set_plug_name($self,$plug,0,$plug);}
236
 
237
}
238
 
239
sub ipgen_list_sokets{
240
        my ($self)=@_;
241
        my @sokets;
242
 
243
        if(exists ($self->{sockets})){
244
                foreach my $p(keys %{$self->{sockets}}){
245
                        push (@sokets,$p);
246
                }
247
        }
248
        return @sokets;
249
}
250
 
251
 
252
sub ipgen_list_plugs{
253
        my ($self)=@_;
254
        my @plugs;
255
        if(exists ($self->{plugs})){
256
                foreach my $p(keys %{$self->{plugs}}){
257
                        push (@plugs,$p);
258
                }
259
        }
260
        return @plugs;
261
}
262
 
263
 
264
 
265
sub ipgen_get_socket{
266
        my ($self,$socket)=@_;
267
        my ($type,$value,$connection_num);
268
        if(exists ($self->{sockets}{$socket})){
269
                $type   =$self->{sockets}{$socket}{type};
270
                $value  =$self->{sockets}{$socket}{value};
271
                $connection_num= $self->{sockets}{$socket}{connection_num};
272
                #print "$type,$value\n"
273
        }
274
        return ($type,$value,$connection_num);
275
}
276
 
277
sub ipgen_get_plug{
278
        my ($self,$plug)=@_;
279
        my ($type,$value,$connection_num);
280
        if(exists ($self->{plugs}{$plug})){
281
                $type   =$self->{plugs}{$plug}{type};
282
                $value  =$self->{plugs}{$plug}{value};
283
                $connection_num=$self->{plugs}{$plug}{connection_num};
284
        }
285
        return ($type,$value,$connection_num);
286
}
287
 
288
sub ipgen_remove_socket{
289
                my ($self,$socket)=@_;
290
                if(exists ($self->{sockets}{$socket})) {
291
                                delete $self->{sockets}{$socket};
292
                }
293
}
294
 
295
sub ipgen_remove_plug{
296
                my ($self,$plug)=@_;
297
                if(exists ($self->{plugs}{$plug})) {
298
                                delete $self->{plugs}{$plug};
299
                }
300
}
301
 
302
 
303
 
304
sub ipgen_set_port_intfc_name{
305
        my ($self,$port,$intfc_name)=@_;
306
        if(exists ($self->{ports}{$port})){
307
                $self->{ports}{$port}{intfc_name}=$intfc_name;
308
        }
309
 
310
}
311
 
312
sub ipgen_get_port_intfc_name{
313
        my ($self,$port)=@_;
314
        my $intfc_name;
315
        if(exists ($self->{ports}{$port}{intfc_name})){
316
                $intfc_name=$self->{ports}{$port}{intfc_name};
317
        }
318
        return ($intfc_name);
319
}
320
 
321
sub ipgen_set_port_intfc_port{
322
        my ($self,$port,$intfc_port)=@_;
323
        if(exists ($self->{ports}{$port})){
324
                $self->{ports}{$port}{intfc_port}=$intfc_port;
325
        }
326
 
327
}
328
 
329
sub ipgen_get_port_intfc_port{
330
        my ($self,$port)=@_;
331
        my $intfc_port;
332
        if(exists ($self->{ports}{$port}{intfc_port})){
333
                $intfc_port=$self->{ports}{$port}{intfc_port};
334
        }
335
        return ($intfc_port);
336
}
337
 
338
 
339
 
340
sub ipgen_save_wb_addr{
341
        my ($self,$plug,$num,$addr,$width)=@_;
342
        $self->{plugs}{$plug}{$num}{addr}=$addr;
343
        $self->{plugs}{$plug}{$num}{width}=$width;
344
 
345
}
346
 
347
sub ipgen_get_wb_addr{
348
        my ($self,$plug,$num)=@_;
349
        my($addr,$width);
350
        if(exists ($self->{plugs}{$plug}{$num})){
351
                $addr= $self->{plugs}{$plug}{$num}{addr};
352
                $width=$self->{plugs}{$plug}{$num}{width};
353
        }
354
        return  ($addr,$width);
355
}
356
 
357
sub ipgen_set_plug_name{
358
        my ($self,$plug,$num,$name)=@_;
359
        if(exists ($self->{plugs}{$plug})){
360
                $self->{plugs}{$plug}{$num}{name}=$name;
361
 
362
        }
363
 
364
}
365
 
366
 
367
sub ipgen_get_plug_name{
368
        my ($self,$plug,$num)=@_;
369
        my $name;
370
        if(exists ($self->{plugs}{$plug}{$num}{name})){
371
                 $name=$self->{plugs}{$plug}{$num}{name};
372
 
373
        }
374
        return  $name;
375
}
376
 
377
sub ipgen_set_socket_name {
378
        my ($self,$socket,$num,$name)= @_;
379
        if(exists ($self->{sockets}{$socket})){
380
                $self->{sockets}{$socket}{$num}{name}=$name;
381
 
382
        }
383
 
384
}
385
 
386
sub ipgen_get_socket_name{
387
        my ($self,$socket,$num)=@_;
388
        my $name;
389
        if(exists ($self->{sockets}{$socket}{$num}{name})){
390
                $name=$self->{sockets}{$socket}{$num}{name};
391
 
392
        }
393
        return $name;
394
 
395
}
396
 
397 24 alirezamon
 
398 16 alirezamon
 
399 24 alirezamon
sub ipgen_add_unused_intfc_port{
400
        my ($self,$intfc_name,$port)=@_;
401
        push(@{$self->{unused}{$intfc_name}},$port);
402
}
403 16 alirezamon
 
404
 
405 24 alirezamon
 
406
 
407
 
408
#add,read,remove object fileds
409
 
410
sub ipgen_add{
411
        my ($self,$filed_name,$filed_data)=@_;
412
        $self->{$filed_name}=$filed_data;
413 16 alirezamon
}
414
 
415 24 alirezamon
sub ipgen_remove{
416
        my ($self,$filed_name)=@_;
417
        $self->{$filed_name}=undef;
418
}
419 17 alirezamon
 
420 24 alirezamon
sub ipgen_get{
421
        my ($self,$filed_name)=@_;
422
        return $self->{$filed_name}
423
}
424 17 alirezamon
 
425 24 alirezamon
sub ipgen_get_list{
426 17 alirezamon
        my ($self,$list_name)=@_;
427 16 alirezamon
        my @l;
428 17 alirezamon
        if ( defined $self->{$list_name} ){
429
                @l=@{$self->{$list_name}};
430 16 alirezamon
        }
431
 
432
        return @l;
433
}
434
 
435
 
436
 
437
 
438
######################################
439
 
440
 
441
 
442
 
443
sub top_gen_new {
444
    # be backwards compatible with non-OO call
445
    my $class =  shift;
446
    my $self;
447
 
448
 
449
    $self = {};
450
    $self->{instance_ids}={};
451
    bless($self,$class);
452
 
453
 
454
    return $self;
455
}
456
 
457
sub top_add_def_to_instance {
458
        my ($self,$inst,$def,$value )=@_;
459
                $self->{instance_ids}{$inst}{$def}=$value;
460
}
461
 
462
sub top_get_def_of_instance {
463
        my ($self,$inst,$def)=@_;
464
        my $val;
465
        $val=$self->{instance_ids}{$inst}{$def} if(exists $self->{instance_ids}{$inst}{$def})   ;
466
        return $val;
467
}
468
 
469
 
470
sub top_add_port{
471
        my($self,$inst,$port,$range,$type,$intfc_name,$intfc_port)=@_;
472
 
473
        #all ports
474
        $self->{ports}{$port}{range}=$range;
475
        $self->{ports}{$port}{type}=$type;
476
        $self->{ports}{$port}{intfc_name}=$intfc_name;
477
        $self->{ports}{$port}{intfc_port}=$intfc_port;
478
        $self->{ports}{$port}{instance_name}=$inst;
479
 
480
 
481
        #based on instance name 
482
        $self->{instance_ids}{$inst}{ports}{$port}{range}=$range;
483
        $self->{instance_ids}{$inst}{ports}{$port}{type}=$type;
484
        $self->{instance_ids}{$inst}{ports}{$port}{intfc_name}=$intfc_name;
485
        $self->{instance_ids}{$inst}{ports}{$port}{intfc_port}=$intfc_port;
486
 
487
        #based on interface name
488
        $self->{interface}{$intfc_name}{ports}{$port}{range}=$range;
489
        $self->{interface}{$intfc_name}{ports}{$port}{type}=$type;
490
        $self->{interface}{$intfc_name}{ports}{$port}{instance_name}=$inst;
491
        $self->{interface}{$intfc_name}{ports}{$port}{intfc_port}=$intfc_port;
492
}
493
 
494
 
495 48 alirezamon
sub top_get_interface{
496
        my($self,$intfc_name,$port)=@_;
497
        my $range= $self->{interface}{$intfc_name}{ports}{$port}{range};
498
        my $type=  $self->{interface}{$intfc_name}{ports}{$port}{type};
499
        my $inst = $self->{interface}{$intfc_name}{ports}{$port}{instance_name};
500
        my $intfc_port=$self->{interface}{$intfc_name}{ports}{$port}{intfc_port};
501
        return ($range,$type,$inst,$intfc_port);
502
}
503 16 alirezamon
 
504
 
505
sub top_get_port{
506
        my($self,$port)=@_;
507
        my($inst,$range,$type,$intfc_name,$intfc_port);
508
        $inst           =$self->{ports}{$port}{instance_name};
509
        $range          =$self->{ports}{$port}{range};
510
        $type           =$self->{ports}{$port}{type};
511
        $intfc_name     =$self->{ports}{$port}{intfc_name};
512
        $intfc_port     =$self->{ports}{$port}{intfc_port};
513
        return ($inst,$range,$type,$intfc_name,$intfc_port);
514
}
515
 
516
sub top_get_port_list{
517
        my$self=shift;
518
        my @l;
519
        if(exists $self->{ports}){
520
                @l= sort keys %{$self->{ports}};
521
        }
522
        return @l;
523
}
524
 
525
 
526
 
527
sub top_add_parameter{
528 38 alirezamon
        my ($self,$inst,$parameter,$default,$type,$content,$info,$global_param,$redefine)=@_;
529
        $self->{instance_ids}{$inst}{parameters}{$parameter}{"default"}=$default;
530 16 alirezamon
        $self->{instance_ids}{$inst}{parameters}{$parameter}{type}=$type;
531
        $self->{instance_ids}{$inst}{parameters}{$parameter}{content}=$content;
532
        $self->{instance_ids}{$inst}{parameters}{$parameter}{info}=$info;
533
        $self->{instance_ids}{$inst}{parameters}{$parameter}{global_param}=$global_param;
534
        $self->{instance_ids}{$inst}{parameters}{$parameter}{redefine_param}=$redefine;
535
}
536
 
537 42 alirezamon
sub top_add_localparam{
538
        my ($self,$inst,$parameter,$default,$type,$content,$info,$global_param,$redefine)=@_;
539
        $self->{instance_ids}{$inst}{localparam}{$parameter}{"default"}=$default;
540
        $self->{instance_ids}{$inst}{localparam}{$parameter}{type}=$type;
541
        $self->{instance_ids}{$inst}{localparam}{$parameter}{content}=$content;
542
        $self->{instance_ids}{$inst}{localparam}{$parameter}{info}=$info;
543
        $self->{instance_ids}{$inst}{localparam}{$parameter}{global_param}=$global_param;
544
        $self->{instance_ids}{$inst}{localparam}{$parameter}{redefine_param}=$redefine;
545
}
546
 
547
 
548 16 alirezamon
sub top_get_parameter{
549
        my ($self,$inst,$parameter)=@_;
550 38 alirezamon
        my ($default,$type,$content,$info,$global_param,$redefine);
551
        $default=$self->{instance_ids}{$inst}{parameters}{$parameter}{"default"};
552 16 alirezamon
        $type=$self->{instance_ids}{$inst}{parameters}{$parameter}{type};
553
        $content=$self->{instance_ids}{$inst}{parameters}{$parameter}{content};
554
        $info=$self->{instance_ids}{$inst}{parameters}{$parameter}{info};
555
        $global_param=$self->{instance_ids}{$inst}{parameters}{$parameter}{global_param};
556
        $redefine=$self->{instance_ids}{$inst}{parameters}{$parameter}{redefine_param};
557 38 alirezamon
        return  ($default,$type,$content,$info,$global_param,$redefine);
558 16 alirezamon
}
559
 
560
sub top_get_parameter_list{
561
        my($self,$inst)=@_;
562
        my @l;
563
        if(exists $self->{instance_ids}{$inst}{parameters}){
564
                @l= sort keys %{$self->{instance_ids}{$inst}{parameters}};
565
        }
566
        return @l;
567
}
568
 
569 42 alirezamon
 
570
 
571
 
572 16 alirezamon
sub top_add_default_soc_param{
573
        my ($self,$param_ref)=@_;
574
        my %l=%{$param_ref};
575
        foreach my $p (sort keys %l){
576
                $self->{parameters}{$p}=$l{$p};
577
                #print"$self->{parameters}{$p}=$l{$p};\n";
578
        }
579
}
580
 
581
sub top_get_default_soc_param{
582
        my $self=shift;
583
        my %l;
584
        if(exists $self->{parameters}){
585
                 %l=%{$self->{parameters}};
586
        }
587
        return  %l;
588
}
589
 
590
 
591
sub top_get_all_instances{
592
        my ($self)=shift;
593
        my @r= keys %{$self->{instance_ids}};
594
        return @r;
595
 
596
}
597
 
598
 
599
sub top_get_intfc_list{
600
        my ($self)=shift;
601
        my @intfcs;
602
        if(exists $self->{interface}){
603
                @intfcs= sort keys %{$self->{interface}};
604
        }
605
 
606
        return  @intfcs;
607
}
608
 
609
 
610 42 alirezamon
 
611
 
612 16 alirezamon
sub top_get_intfc_ports_list{
613
        my($self,$intfc_name)=@_;
614
        my @ports;
615
        if( exists $self->{interface}{$intfc_name}{ports}){
616
                @ports= sort keys %{$self->{interface}{$intfc_name}{ports}};
617
        }
618
        return @ports;
619
}
620
 
621
 
622
sub top_add_custom_soc_param{
623
        my ($self,$param_ref,$tile)=@_;
624
        my %l=%{$param_ref};
625
        foreach my $p (sort keys %l){
626
                $self->{tiles}{$tile}{parameters}{$p}=$l{$p};
627
                #print"$self->{parameters}{$p}=$l{$p};\n";
628
        }
629
}
630 48 alirezamon
 
631
 
632
sub top_get_custom_tile_list{
633
        my ($self)=@_;
634
        my %tiles_hash;
635
        %tiles_hash=%{$self->{'tiles'}} if(defined $self->{'tiles'} );
636
        my @tiles = sort keys %tiles_hash;
637
        return  @tiles;
638
}
639
 
640
 
641
 
642 16 alirezamon
 
643 48 alirezamon
 
644
 
645
 
646 16 alirezamon
sub top_get_custom_soc_param{
647
        my ($self,$tile)=@_;
648
        my %l;
649
        if(exists $self->{tiles}{$tile}{parameters}){#get custom param
650
                 %l=%{$self->{tiles}{$tile}{parameters}};
651
        }elsif (exists $self->{parameters}){#get default param
652
                 %l=%{$self->{parameters}};
653
        }
654
        return  %l;
655
 
656
}
657 25 alirezamon
 
658
 
659
 
660
sub object_add_attribute{
661
        my ($self,$attribute1,$attribute2,$value)=@_;
662
        if(!defined $attribute2){$self->{$attribute1}=$value;}
663
        else {$self->{$attribute1}{$attribute2}=$value;}
664
 
665
}
666
 
667
sub object_get_attribute{
668
        my ($self,$attribute1,$attribute2)=@_;
669
        if(!defined $attribute2) {return $self->{$attribute1};}
670
        return $self->{$attribute1}{$attribute2};
671
 
672
 
673
}
674
 
675
sub object_add_attribute_order{
676
        my ($self,$attribute,@param)=@_;
677 48 alirezamon
        my $r = $self->{'parameters_order'}{$attribute};
678
        my @a;
679
        @a = @{$r} if(defined $r);
680
        push (@a,@param);
681
        @a=List::MoreUtils(@a);
682
        $self->{'parameters_order'}{$attribute} =\@a;
683 25 alirezamon
}
684
 
685
sub object_get_attribute_order{
686
        my ($self,$attribute)=@_;
687
        return @{$self->{parameters_order}{$attribute}};
688
}
689 16 alirezamon
 
690
 
691
 
692
        1

powered by: WebSVN 2.1.0

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