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/] [soc.pm] - Blame information for rev 42

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 16 alirezamon
#! /usr/bin/perl -w
2
use strict;
3
 
4
package soc;
5
 
6
use ip;
7
 
8
 
9
sub soc_new {
10
    # be backwards compatible with non-OO call
11
    my $class = ("ARRAY" eq ref $_[0]) ? "soc" : shift;
12
    my $self;
13
 
14
    $self = {};
15
    $self->{modules}        = {};
16
    $self->{instance_order}=();
17
    $self->{hdl_files}=();
18
 
19
    bless($self,$class);
20
 
21
    return $self;
22
}
23
 
24
 
25
sub soc_add_instance{
26
        my ($self,$instance_id,$category,$module,$ip) = @_;
27
        if(exists ($self->{instances}{$instance_id})){
28
                return 0;
29
        }
30 24 alirezamon
        my $module_name=$ip->ip_get($category,$module,"module_name");
31 16 alirezamon
        #print "$module_name\n";
32
        $self->{instances}{$instance_id}={};
33
        $self->{instances}{$instance_id}{module}=$module;
34
        $self->{instances}{$instance_id}{module_name}=$module_name;
35
        $self->{instances}{$instance_id}{category}=$category;
36
        $self->{instances}{$instance_id}{instance_name}=$instance_id;
37
        my @sockets=$ip->ip_get_module_sockets_list($category,$module);
38
        foreach my $socket(@sockets){
39
                my ($type,$value,$connection_num)=$ip->ip_get_socket ($category,$module,$socket);
40
                soc_add_socket_to_instance($self,$instance_id,$socket,$type,$value,$connection_num);
41
                #add socket names
42
                my $int_num=($type eq 'num')? $value :1;
43
                for (my $i=0;$i<$int_num;$i++){
44
                        my $name=$ip->ip_get_socket_name($category,$module, $socket,$i);
45
                        $self->{instances}{$instance_id}{sockets}{$socket}{nums}{$i}{name}=$name;
46
                }
47
 
48
 
49
        }
50
        my @plugs=$ip->ip_get_module_plugs_list($category,$module);
51
        foreach my $plug(@plugs){
52
                my ($type,$value,$connection_num)=$ip->ip_get_plug ($category,$module,$plug);
53
                soc_add_plug_to_instance($self,$instance_id,$plug,$type,$value,$connection_num);
54 38 alirezamon
                #add plug names anf Default connection as IO
55 16 alirezamon
                my $int_num=($type eq 'num')? $value :1;
56
                for (my $i=0;$i<$int_num;$i++){
57
                        my $name=$ip->ip_get_plug_name($category,$module, $plug,$i);
58
                        $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$i}{name}=$name;
59
                        soc_add_instance_plug_conection($self,$instance_id,$plug,$i,"IO");
60
                        my ($addr , $width) =$ip->ip_get_wb_addr ($category,$module,$plug,$i);
61
                        if(defined $addr){
62
                                $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$i}{addr}=$addr;
63
                                $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$i}{width}=$width;
64
                        }
65
                }
66
        }
67 34 alirezamon
 
68
 
69
        $self->{instances}{$instance_id}{description_pdf}=$ip->ip_get($category,$module,'description_pdf');
70 16 alirezamon
 
71
        return 1;
72
}
73
 
74
sub soc_add_instance_order{
75
        my ($self,$instance_id)=@_;
76
        push (@{$self->{instance_order}},$instance_id);
77
        #print " @{$self->{instance_order}} \n";        
78
}
79
 
80
sub soc_remove_scolar_from_array{
81
        my ($array_ref,$item)=@_;
82
        my @array=@{$array_ref};
83
        my @new;
84
        foreach my $p (@array){
85
                if($p ne $item ){
86
                        push(@new,$p);
87
                }
88
        }
89
        return @new;
90
}
91
 
92
sub soc_get_scolar_pos{
93
        my ($item,@list)=@_;
94
        my $pos;
95
        my $i=0;
96
        foreach my $c (@list)
97
        {
98
                if(  $c eq $item) {$pos=$i}
99
                $i++;
100
        }
101
        return $pos;
102
}
103
 
104
sub soc_remove_from_instance_order{
105
        my ($self,$instance_id)=@_;
106
        my @a=soc_remove_scolar_from_array($self->{instance_order},$instance_id);
107
        $self->{instance_order}=\@a;
108
        #print " @{$self->{instance_order}} \n";        
109
}
110
 
111
sub soc_get_instance_order{
112
        my $self=shift;
113
        my @order;
114
        @order = @{$self->{instance_order}} if (defined $self->{instance_order});
115
        return @order;
116
}
117
 
118
sub soc_increase_instance_order{
119
        my ($self,$item)=@_;
120
        my @order;
121
        if (defined $self->{instance_order}){
122
                @order = @{$self->{instance_order}};
123
                my $pos=soc_get_scolar_pos($item,@order);
124
                if(defined $order[$pos+1] ){
125
                        $order[$pos]=$order[$pos+1];
126
                        $order[$pos+1]=$item;
127
                        $self->{instance_order}=\@order;
128
                }
129
        }
130
}
131
 
132
sub soc_decrease_instance_order{
133
        my ($self,$item)=@_;
134
        my @order;
135
        if (defined $self->{instance_order}){
136
                @order = @{$self->{instance_order}};
137
                my $pos=soc_get_scolar_pos($item,@order);
138
                if($pos !=0 ){
139
                        $order[$pos]=$order[$pos-1];
140
                        $order[$pos-1]=$item;
141
                        $self->{instance_order}=\@order;
142
                }
143
        }
144
}
145
 
146
sub soc_get_module_name{
147
        my ($self,$instance_id)=@_;
148
        my $module_name;
149
        if(exists ($self->{instances}{$instance_id}{module_name})){
150
                $module_name= $self->{instances}{$instance_id}{module_name};
151
        }
152
        return $module_name;
153
}
154
 
155
 
156 34 alirezamon
sub soc_get_description_pdf{
157
        my ($self,$instance_id)=@_;
158
        return $self->{instances}{$instance_id}{description_pdf};
159
}
160
 
161 16 alirezamon
sub soc_get_plug_name {
162
        my ($self,$instance_id,$plug,$num)=@_;
163
        my $name;
164
        if(exists($self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{name})){
165
                $name=$self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{name};
166
        }
167
        return $name;
168
}
169
 
170
sub soc_get_plug_addr {
171
        my ($self,$instance_id,$plug,$num)=@_;
172
        my ($addr , $width);
173
        if(exists($self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{addr})){
174
                $addr=  $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{addr};
175
                $width= $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{width};
176
        }
177
        return ($addr , $width);
178
}
179
 
180
 
181
sub soc_get_socket_name {
182
        my ($self,$instance_id,$socket,$num)=@_;
183
        my $name;
184
        if(exists($self->{instances}{$instance_id}{sockets}{$socket}{nums}{$num})){
185
                $name=$self->{instances}{$instance_id}{sockets}{$socket}{nums}{$num}{name};
186
        }
187
        return $name;
188
}
189
 
190
sub soc_remove_instance{
191
        my ($self,$instance_id)=@_;
192
        if ( exists( $self->{instances}{$instance_id} )) {
193
             delete( $self->{instances}{$instance_id} );
194
        }
195
 
196
 
197
}
198
 
199
 
200
sub soc_add_socket_to_instance{
201
        my ($self,$instance_id,$socket,$type,$value,$connection_num)=@_;
202
        if ( exists( $self->{instances}{$instance_id} )){
203
                $self->{instances}{$instance_id}{sockets}{$socket}{type}=$type;
204
                $self->{instances}{$instance_id}{sockets}{$socket}{value}=$value;
205
                $self->{instances}{$instance_id}{sockets}{$socket}{connection_num}=$connection_num;
206
 
207
        }
208
}
209
 
210
sub soc_get_socket_of_instance{
211
        my ($self,$instance_id,$socket)=@_;
212
        my ($type,$value,$connection_num);
213
        if ( exists( $self->{instances}{$instance_id} )){
214
                $type=$self->{instances}{$instance_id}{sockets}{$socket}{type};
215
                $value=$self->{instances}{$instance_id}{sockets}{$socket}{value};
216
                $connection_num=$self->{instances}{$instance_id}{sockets}{$socket}{connection_num};
217
        }
218
        return ($type,$value,$connection_num);
219
}
220
 
221
 
222
 
223
 
224
 
225
sub soc_add_plug_to_instance{
226
        my ($self,$instance_id,$plug,$type,$value,$connection_num)=@_;
227
        if ( exists( $self->{instances}{$instance_id} )){
228
                $self->{instances}{$instance_id}{plugs}{$plug}{type}=$type;
229
                $self->{instances}{$instance_id}{plugs}{$plug}{value}=$value;
230
                $self->{instances}{$instance_id}{plugs}{$plug}{connection_num}=$connection_num;
231
 
232
        }
233
}
234
 
235
sub soc_get_plug_of_instance{
236
        my ($self,$instance_id,$plug)=@_;
237
        my ($type,$value,$connection_num);
238
        if ( exists( $self->{instances}{$instance_id} )){
239
                $type=$self->{instances}{$instance_id}{plugs}{$plug}{type};
240
                $value=$self->{instances}{$instance_id}{plugs}{$plug}{value};
241
                $connection_num=$self->{instances}{$instance_id}{plugs}{$plug}{connection_num};
242
        }
243
        return ($type,$value,$connection_num);
244
}
245
 
246
 
247
 
248
 
249
 
250
 
251
 
252
 
253 25 alirezamon
 
254
 
255 16 alirezamon
sub soc_add_instance_plug_conection{
256
 
257
        my ($self,$instance_id,$plug,$plug_num,$id,$socket,$num)=@_;
258
        if(exists ($self->{instances}{$instance_id}{plugs}{$plug})){
259
                $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$plug_num}{connect_id}=$id;
260
                $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$plug_num}{connect_socket}=$socket;
261
                $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$plug_num}{connect_socket_num}=$num;
262
        }
263
 
264
}
265
 
266
sub soc_get_module_plug_conection{
267
        my ($self,$instance_id,$plug,$plug_num)=@_;
268
        my ($id,$socket,$num);
269
        if(exists($self->{instances}{$instance_id}{plugs}{$plug}{nums}{$plug_num})){
270
                $id =   $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$plug_num}{connect_id};
271
                $socket=        $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$plug_num}{connect_socket};
272
                $num=   $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$plug_num}{connect_socket_num};
273
        }
274
        return  ($id,$socket,$num);
275
}
276
 
277
sub soc_get_all_plugs_of_an_instance{
278
        my ($self,$instance_id)=@_;
279
        my @list;
280
 
281
        if(exists ($self->{instances}{$instance_id}{plugs})){
282
                foreach my $p (sort keys %{$self->{instances}{$instance_id}{plugs}}){
283
                push (@list,$p);
284
 
285
                }
286
        }
287
        return @list;
288
 
289 34 alirezamon
}
290 16 alirezamon
 
291 34 alirezamon
sub soc_get_all_sockets_of_an_instance{
292
        my ($self,$instance_id)=@_;
293
        my @list;
294
 
295
        if(exists ($self->{instances}{$instance_id}{sockets})){
296
                foreach my $p (sort keys %{$self->{instances}{$instance_id}{sockets}}){
297
                push (@list,$p);
298
 
299
                }
300
        }
301
        return @list;
302
 
303
}
304 16 alirezamon
 
305 34 alirezamon
 
306 16 alirezamon
##############################################
307
sub soc_get_modules_plug_connected_to_socket{
308
        my ($self,$id,$socket,$socket_num)=@_;
309
        my %plugs;
310
        my %plug_nums;
311
        my @instances=soc_get_all_instances($self);
312
        foreach my $instance_id (@instances){
313
                        my @plugs=soc_get_all_plugs_of_an_instance($self,$instance_id);
314
                        foreach my $plug (@plugs){
315
                                foreach my $plug_num (keys %{$self->{instances}{$instance_id}{plugs}{$plug}{nums}}){
316
                                        my $id_ =       $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$plug_num}{connect_id};
317
                                        my $socket_=    $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$plug_num}{connect_socket};
318
                                        my $socket_num_=        $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$plug_num}{connect_socket_num};
319
                                        #print "if($id_ eq $id && $socket_ eq $socket &&  $socket_num_ eq $socket_num )\n";
320
                                        if($id_ eq $id && $socket_ eq $socket &&  $socket_num_ eq $socket_num ) {
321
                                                $plugs{$instance_id}=$plug;
322
                                                $plug_nums{$instance_id}=$plug_num;
323
 
324
                                        }
325
                                }
326
                        }
327
 
328
        }
329
 
330
 
331
 
332
        return (\%plugs, \%plug_nums);
333
 
334
}
335
 
336
 
337
 
338
 
339
 
340
 
341
 
342
 
343
 
344
 
345
 
346
 
347
 
348
sub get_modules_have_this_socket{
349
        my ($self,$socket)=@_;
350
        my %r;
351
        my @instances=soc_get_all_instances($self);
352
        if(!defined $socket ){return %r;}
353
        foreach my $p (@instances)
354
        {
355
                        if(exists ($self->{instances}{$p}{sockets}{$socket})) {
356
                                $r{$p}=$self->{instances}{$p}{sockets}{$socket}{value};
357
 
358
                        }
359
 
360
        }
361
        return %r;
362
 
363
}
364
 
365
 
366
 
367
 
368
sub soc_get_all_instances{
369
        my ($self)=@_;
370
        my @list;
371
        foreach my $p (sort keys %{$self->{instances}}){
372
                push (@list,$p);
373
        }
374
        return @list;
375
}
376
 
377
sub soc_get_all_instances_of_module{
378
        my ($self,$category,$module)=@_;
379
        my @list;
380
        my @m_list;
381
        @list=soc_get_all_instances($self);
382
 
383
        foreach my $p (@list){
384
                #printf "\$p=$p  \& $self->{instances}{$p}{module}\n";
385
                if(($self->{instances}{$p}{module} eq $module) &&
386
                   ($self->{instances}{$p}{category} eq $category)){
387
                        push(@m_list,$p);
388
                }
389
        }
390
        return @m_list;
391
}
392
 
393
 
394
 
395
sub soc_add_instance_param{
396
                my ($self,$instance_id,$param_ref)=@_;
397
                if(exists ($self->{instances}{$instance_id})){
398
                        my %param=%$param_ref;
399
                        foreach my $p (sort keys %param){
400
                                my $value = $param{$p};
401
                                $self->{instances}{$instance_id}{parameters}{$p}{value}=$value;
402
                                #print "lllllllll:$value\n";
403
                        }
404
                        return 1;
405
                }
406
                return 0;
407
}
408
 
409
 
410
sub soc_add_instance_param_order{
411
                my ($self,$instance_id,$param_ref)=@_;
412
                if(exists ($self->{instances}{$instance_id})){
413
                        $self->{instances}{$instance_id}{parameters_order}=$param_ref;
414
                        return 1;
415
                }
416
                return 0;
417
}
418
 
419
sub soc_get_instance_param_order{
420
                my ($self,$instance_id)=@_;
421
                my @r;
422
                if(defined ($self->{instances}{$instance_id}{parameters_order}) ){
423
                        @r=@{$self->{instances}{$instance_id}{parameters_order}};
424
 
425
                }
426
                return @r;
427
}
428
 
429
 
430
 
431
sub soc_get_module_param{
432
                my ($self,$instance_id)=@_;
433
                my %param;
434
                if(exists ($self->{instances}{$instance_id}{parameters}))
435
                {
436
                        foreach my $p (sort keys %{$self->{instances}{$instance_id}{parameters}})
437
                        {
438
                                $param{$p}=$self->{instances}{$instance_id}{parameters}{$p}{value};
439
                        }
440
                }
441
                return %param;
442
}
443
 
444
 
445
 
446
sub soc_get_module_param_value{
447
                my ($self,$instance_id,$param)=@_;
448
                my $value;
449
                if(exists ($self->{instances}{$instance_id}{parameters}{$param})){
450
                        $value= $self->{instances}{$instance_id}{parameters}{$param}{value};
451
                }
452
                return $value;
453
}
454
 
455
 
456
 
457
 
458
 
459
sub soc_get_all_instance_name{
460
        my ($self)=@_;
461
        my @instance_names;
462
        my @instances=$self->soc_get_all_instances();
463
        foreach my $instance_id (@instances){
464
                        my $name= $self->{instances}{$instance_id}{instance_name};
465
                        push(@instance_names,$name);
466
 
467
        }
468
        return @instance_names;
469
}
470
 
471
 
472
sub soc_set_instance_name{
473
        my ($self,$instance_id,$instance_name)=@_;
474
        if ( exists( $self->{instances}{$instance_id} )){
475
                $self->{instances}{$instance_id}{instance_name}=$instance_name;
476
        }
477
 
478
}
479
 
480
sub soc_get_instance_name{
481
        my ($self,$instance_id)=@_;
482
        my $instance_name;
483
        if ( exists( $self->{instances}{$instance_id} )){
484
                 $instance_name=$self->{instances}{$instance_id}{instance_name};
485
        }
486
        return $instance_name;
487
 
488
}
489
 
490
 
491
sub soc_get_instance_id{
492
        my ($self,$intance_name)=@_;
493
        foreach my $id (sort keys %{$self->{instances}}){
494
                my $p=$self->{instances}{$id}{instance_name};
495
                if ($p eq $intance_name) {return $id;}
496
 
497
        }
498
        return;
499
}
500
 
501
sub soc_get_module{
502
        my ($self,$instance_id) = @_;
503
        my $module;
504
        if ( exists( $self->{instances}{$instance_id} )){
505
                $module=$self->{instances}{$instance_id}{module};
506
        }
507
        return $module;
508
}
509
 
510
sub soc_get_category{
511
        my ($self,$instance_id) = @_;
512
        my $category;
513
        if ( exists( $self->{instances}{$instance_id} )){
514
                $category=$self->{instances}{$instance_id}{category};
515
        }
516
        return $category;
517
}
518
 
519
sub soc_add_plug_base_addr{
520
        my($self,$instance_id,$plug,$num,$base,$end)=@_;
521
        if(exists ($self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num})){
522
                $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{base}=$base;
523
                $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{end}=$end;
524
        }
525
}
526
 
527
 
528
 
529
sub soc_list_base_addreses{
530
                my ($self,$id) = @_;
531
                my %bases;
532
                my @all_instances=soc_get_all_instances($self);
533
                foreach my $instance_id (@all_instances){
534
                        my @plugs=soc_get_all_plugs_of_an_instance($self,$instance_id);
535
                        foreach my $plug (@plugs){
536
                                foreach my $num (sort keys  %{$self->{instances}{$instance_id}{plugs}{$plug}{nums}}){
537
                                        my $base=$self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{base};
538
                                        my $end=$self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{end};
539
                                        my $connect_id=$self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{connect_id};
540
                                        if(defined $base && ($connect_id eq $id)){
541
                                                $bases{$end}=$base;
542
 
543
                                        }
544
                                }
545
                        }
546
                }
547
                return %bases;
548
 
549
}
550
 
551
 
552
sub soc_list_plug_nums{
553
        my ($self,$instance_id,$plug)=@_;
554
        my @list;
555
        if(exists($self->{instances}{$instance_id}{plugs}{$plug})){
556
                foreach my $num (sort keys  %{$self->{instances}{$instance_id}{plugs}{$plug}{nums}}){
557
                        push (@list,$num);
558
                }
559
        }
560
        return @list;
561 34 alirezamon
}
562
 
563
sub soc_list_socket_nums{
564
        my ($self,$instance_id,$socket)=@_;
565
        my @list;
566
        if(exists($self->{instances}{$instance_id}{sockets}{$socket})){
567
                foreach my $num (sort keys  %{$self->{instances}{$instance_id}{sockets}{$socket}{nums}}){
568
                        push (@list,$num);
569
                }
570
        }
571
        return @list;
572 16 alirezamon
}
573 34 alirezamon
 
574 16 alirezamon
 
575
 
576
sub soc_get_plug{
577
        my ($self,$instance_id,$plug,$num) = @_;
578
        my ($addr,$base,$end,$name,$connect_id,$connect_socket,$connect_socket_num);
579
        if(exists($self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num})){
580
                $addr=                          $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{addr};
581
                $base=                          $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{base};
582
                $end=                           $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{end};
583
                $name=                          $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{name};
584
                $connect_id=            $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{connect_id};
585
                $connect_socket=        $self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{connect_socket};
586
                $connect_socket_num=$self->{instances}{$instance_id}{plugs}{$plug}{nums}{$num}{connect_socket_num};
587
 
588
        }
589
        return ($addr,$base,$end,$name,$connect_id,$connect_socket,$connect_socket_num);
590
 
591
}
592
 
593
 
594
 
595
sub soc_add_top{
596
        my ($self,$top_ip)=@_;
597
        $self->{top_ip}=$top_ip;
598
 
599
}
600
 
601
sub soc_get_top{
602
        my $self=shift;
603
        return $self->{top_ip};
604
 
605
}
606
 
607
sub soc_get_hdl_files{
608
        my ($self)=shift;
609
        return @{$self->{hdl_files}};
610
}
611
 
612
 
613
sub soc_add_hdl_files{
614
        my ($self,@hdl_list)=@_;
615
        my @old=@{$self->{hdl_files}};
616
        my @new=(@old,@hdl_list);
617
        $self->{hdl_files}=\@new;
618
}
619
 
620
#a-b
621
sub soc_get_diff_array{
622
        my ($a_ref,$b_ref)=@_;
623
        my @A=@{$a_ref};
624
        my @B=@{$b_ref};
625
        my @C;
626
        foreach my $p (@A){
627
                if( !grep (/^$p$/,@B)){push(@C,$p)};
628
        }
629
        return  @C;
630
 
631
}
632
 
633
sub soc_remove_hdl_files{
634
        my ($self,@hdl_list)=@_;
635
        my @old=@{$self->{hdl_files}};
636
        my @new=soc_get_diff_array(\@old,\@hdl_list);
637
        $self->{hdl_files}=\@new;
638
}
639
 
640
 
641
 
642 17 alirezamon
sub new_wires {
643
                my $class = shift;
644
                my $self;
645
                $self->{assigned_name}={};
646
                bless($self,$class);
647
                return $self;
648
}
649
sub wire_add{
650
        my ($self,$name,$filed,$data)=@_;
651
        $self->{assigned_name}{$name}{$filed}=$data;
652
}
653
 
654
sub wire_get{
655
        my ($self,$name,$filed)=@_;
656
        return  $self->{assigned_name}{$name}{$filed};
657
}
658
 
659
sub wires_list{
660
        my($self)=shift;
661 37 alirezamon
        my @list=       sort keys %{$self->{assigned_name}};
662 17 alirezamon
        return @list;
663
}
664
 
665
 
666 25 alirezamon
 
667
 
668
 
669
 
670
 
671
 
672
 
673
 
674
 
675
sub object_add_attribute{
676
        my ($self,$attribute1,$attribute2,$value)=@_;
677
        if(!defined $attribute2){$self->{$attribute1}=$value;}
678
        else {$self->{$attribute1}{$attribute2}=$value;}
679
 
680
}
681
 
682
sub object_get_attribute{
683
        my ($self,$attribute1,$attribute2)=@_;
684
        if(!defined $attribute2) {return $self->{$attribute1};}
685
        return $self->{$attribute1}{$attribute2};
686
 
687
 
688
}
689
 
690
sub object_add_attribute_order{
691
        my ($self,$attribute,@param)=@_;
692
        $self->{'parameters_order'}{$attribute}=[] if (!defined $self->{parameters_order}{$attribute});
693
        foreach my $p (@param){
694
                push (@{$self->{parameters_order}{$attribute}},$p);
695
 
696
        }
697
}
698
 
699
sub object_get_attribute_order{
700
        my ($self,$attribute)=@_;
701
        return @{$self->{parameters_order}{$attribute}};
702
}
703
 
704
 
705 34 alirezamon
sub object_remove_attribute{
706
        my ($self,$attribute1,$attribute2)=@_;
707
        if(!defined $attribute2){
708
                delete $self->{$attribute1} if ( exists( $self->{$attribute1}));
709
        }
710
        else {
711
                delete $self->{$attribute1}{$attribute2} if ( exists( $self->{$attribute1}{$attribute2})); ;
712 25 alirezamon
 
713 34 alirezamon
        }
714 25 alirezamon
 
715 34 alirezamon
}
716 25 alirezamon
 
717
 
718 34 alirezamon
sub board_new {
719
    # be backwards compatible with non-OO call
720
    my $class = ("ARRAY" eq ref $_[0]) ? "soc" : shift;
721
    my $self;
722
 
723
    $self->{'Input'}{'*VCC'}{'*VCC'}   =  ['*undefine*'];
724
    $self->{'Input'}{'*GND'}{'*GND'}   =  ['*undefine*'];
725
    $self->{'Input'}{'*NOCONNECT'}{'*NOCONNECT'}    = ['*undefine*'];
726
    $self->{'Output'}{'*NOCONNECT'}{'*NOCONNECT'}   = ['*undefine*'];
727
    $self->{'Bidir'}{'*NOCONNECT'}{'*NOCONNECT'}    = ['*undefine*'];
728
 
729
    bless($self,$class);
730
 
731
    return $self;
732
}
733 25 alirezamon
 
734
 
735
 
736 34 alirezamon
sub board_add_pin {
737
        my ($self,$direction,$name)=@_;
738
        my ($intfc,$pin_name,$pin_num);
739
        my @f= split('_',$name);
740
        if(!defined $f[1]){ # There is no '_' in pin name
741
 
742
                my @p= split(/\[/,$name);
743
                $intfc=$p[0];
744
                $pin_name=$p[0];
745
                if(defined $p[1]){ #it is an array
746
                        my @q= split(/\]/,$p[1]);
747
                        $pin_num=$q[0]; #save pin num
748
                }else{
749
                        $pin_num='*undefine*';
750
                }
751
        }
752
        else{ # take the word before '_' as interface
753
                $intfc=$f[0];
754
                my @p= split(/\[/,$name);
755
                $pin_name=$p[0];
756
                if(defined $p[1]){
757
                        my @q= split(/\]/,$p[1]);
758
                        $pin_num=$q[0];
759
                }else{
760
                        $pin_num='*undefine*';
761
                }
762
        }
763
 
764
        my @a;
765
        @a=   @{$self->{$direction}{$intfc}{$pin_name}} if(exists $self->{$direction}{$intfc}{$pin_name});
766
        push (@a,$pin_num);
767
        @{$self->{$direction}{$intfc}{$pin_name}}=@a;
768 25 alirezamon
 
769 34 alirezamon
}
770 25 alirezamon
 
771 34 alirezamon
sub board_get_pin {
772
        my ($self,$direction)=@_;
773
        my %p=%{$self->{$direction}};
774
        return %p;
775
 
776
}
777
 
778
sub board_get_pin_range {
779
        my ($self,$direction,$pin_name)=@_;
780
        my @f= split('_',$pin_name);
781
        my $intfc = $f[0];
782
        my $ref =$self->{$direction}{$intfc}{$pin_name};
783
        my @range;
784
        @range= @{$ref} if(defined $ref);
785
        return @range;
786
}
787
 
788
 
789 42 alirezamon
 
790
 
791
 
792 16 alirezamon
1

powered by: WebSVN 2.1.0

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