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 16

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

powered by: WebSVN 2.1.0

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