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/] [mpsoc_verilog_gen.pl] - Blame information for rev 25

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

Line No. Rev Author Line
1 16 alirezamon
 
2
 
3
use strict;
4
use warnings;
5
use mpsoc;
6
use soc;
7
use ip;
8
use ip_gen;
9
use Cwd;
10
use rvp;
11
 
12
 
13
 
14
sub mpsoc_generate_verilog{
15
        my $mpsoc=shift;
16 25 alirezamon
        my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name');
17 16 alirezamon
        my $io_v="\tclk,\n\treset";
18
        my $io_def_v="
19
//IO
20
\tinput\tclk,reset;\n";
21
        my $param_as_in_v;
22
 
23
        #generate socs_parameter
24
        my $socs_param= gen_socs_param($mpsoc);
25
 
26
        #generate noc_parameter
27 25 alirezamon
        my ($noc_param,$pass_param)=gen_noc_param_v($mpsoc);
28 16 alirezamon
 
29
        #generate the noc
30
        my $noc_v=gen_noc_v();
31
 
32
        #generate socs
33
        my $socs_v=gen_socs_v($mpsoc,\$io_v,\$io_def_v);
34
 
35
        #functions
36
        my $functions=get_functions();
37
 
38
        my $mpsoc_v = (defined $param_as_in_v )? "module $mpsoc_name #(\n $param_as_in_v\n)(\n$io_v\n);\n": "module $mpsoc_name (\n$io_v\n);\n";
39
        add_text_to_string (\$mpsoc_v,$functions);
40
        add_text_to_string (\$mpsoc_v,$socs_param);
41
        add_text_to_string (\$mpsoc_v,$noc_param);
42
        add_text_to_string (\$mpsoc_v,$io_def_v);
43
        add_text_to_string (\$mpsoc_v,$noc_v);
44
        add_text_to_string (\$mpsoc_v,$socs_v);
45
        add_text_to_string (\$mpsoc_v,"\nendmodule\n");
46
 
47
 
48
        return $mpsoc_v;
49
}
50
 
51
sub get_functions{
52
        my $p='
53
//functions
54
        function integer log2;
55
                input integer number; begin
56
                        log2=0;
57
                        while(2**log2<number) begin
58
                                log2=log2+1;
59
                        end
60
        end
61
        endfunction // log2
62
 
63
        function integer CORE_NUM;
64
                input integer x,y;
65
                begin
66
                        CORE_NUM = ((y * NX) +  x);
67
                end
68
        endfunction
69
 
70
 
71
 
72
        localparam      Fw      =   2+V+Fpay,
73 25 alirezamon
                                NC     =        (TOPOLOGY=="RING")? NX    :   NX*NY,    //number of cores
74 16 alirezamon
                                Xw      =   log2(NX),
75
                                Yw      =   log2(NY) ,
76
                                Cw      =   (C>1)? log2(C): 1,
77
                                NCw     =   log2(NC),
78
                                NCV     =   NC  * V,
79
                                NCFw    =   NC  * Fw;
80
        ';
81
 
82
        return $p;
83
 
84
 
85
 
86
}
87
 
88
 
89
sub  gen_socs_param{
90
        my $mpsoc=shift;
91
        my $socs_param="
92
//SOC parameters\n";
93 25 alirezamon
        my $nx= $mpsoc->object_get_attribute('noc_param',"NX");
94
    my $ny= $mpsoc->object_get_attribute('noc_param',"NY");
95 16 alirezamon
    my $processors_en=0;
96
    for (my $y=0;$y<$ny;$y++){
97
                for (my $x=0; $x<$nx;$x++){
98
                        my $tile=($nx*$y)+ $x;
99
                        my ($soc_name,$n,$soc_num)=$mpsoc->mpsoc_get_tile_soc_name($tile);
100
                        if(defined $soc_name) {
101
                                my $param=      gen_soc_param($mpsoc,$soc_name,$soc_num,$tile);
102
                                add_text_to_string(\$socs_param,$param);
103
                        }
104
        }}#x&y
105
        $socs_param="$socs_param \n";
106
        return $socs_param;
107
 
108
}
109
 
110
 
111
sub  gen_soc_param {
112
        my ($mpsoc,$soc_name,$soc_num,$tile)=@_;
113
        my $top=$mpsoc->mpsoc_get_soc($soc_name);
114
        my $setting=$mpsoc->mpsoc_get_tile_param_setting($tile);
115
        my %params;
116
        if ($setting eq 'Custom'){
117
                 %params= $top->top_get_custom_soc_param($tile);
118
        }else{
119
                 %params=$top->top_get_default_soc_param();
120
        }
121
        my $params="\n\t //Parameter setting for $soc_name  located in tile: $tile \n";
122
        foreach my $p (sort keys %params){
123
                        $params="$params\t localparam ${soc_name}_${soc_num}_$p=$params{$p};\n";
124
        }
125
 
126
 
127
 
128
        return $params;
129
}
130
 
131
 
132
sub gen_noc_param_v{
133
        my $mpsoc=shift;
134
        my $param_v="\n\n//NoC parameters\n";
135 25 alirezamon
        my $pass_param;
136
        my @params=$mpsoc->object_get_attribute_order('noc_param');
137 16 alirezamon
        foreach my $p (@params){
138 25 alirezamon
                my $val=$mpsoc->object_get_attribute('noc_param',$p);
139 16 alirezamon
                add_text_to_string (\$param_v,"\tlocalparam $p=$val;\n");
140 25 alirezamon
                add_text_to_string (\$pass_param,".$p($p),\n");
141
                #print "$p:$val\n";
142 16 alirezamon
 
143
        }
144 25 alirezamon
        my $class=$mpsoc->object_get_attribute('noc_param',"C");
145 16 alirezamon
        my $str;
146
        if( $class > 1){
147
                $str="CLASS_SETTING={";
148
                for (my $i=$class-1; $i>=0;$i--){
149
                        $str=($i==0)?  "${str}Cn_0};\n " : "${str}Cn_$i,";
150
                }
151
        }else {
152
                $str="CLASS_SETTING={V{1\'b1}};\n";
153
        }
154
        add_text_to_string (\$param_v,"\tlocalparam $str");
155 25 alirezamon
        add_text_to_string (\$pass_param,".CLASS_SETTING(CLASS_SETTING),\n");
156
        my $v=$mpsoc->object_get_attribute('noc_param',"V")-1;
157
        my $escape=$mpsoc->object_get_attribute('noc_param',"ESCAP_VC_MASK");
158
        if (! defined $escape){
159
                add_text_to_string (\$param_v,"\tlocalparam [$v :0] ESCAP_VC_MASK=1;\n");
160
                add_text_to_string (\$pass_param,".ESCAP_VC_MASK(ESCAP_VC_MASK),\n");
161
        }
162 16 alirezamon
        add_text_to_string (\$param_v," \tlocalparam  CVw=(C==0)? V : C * V;\n");
163 25 alirezamon
        add_text_to_string (\$pass_param,".CVw(CVw)\n");
164 16 alirezamon
 
165
 
166 25 alirezamon
        return ($param_v,$pass_param);
167 16 alirezamon
 
168
 
169
 
170
}
171
 
172
 
173
 
174
 
175
sub gen_noc_v{
176
 
177
 
178
        my $noc =  read_file("../src_noc/noc.v");
179
        my @noc_param=$noc->get_modules_parameters_not_local_order('noc');
180
 
181
 
182
        my $noc_v='
183
 
184
//NoC ports
185
        wire [Fw-1      :   0]  ni_flit_out                 [NC-1           :0];
186
        wire [NC-1      :   0]  ni_flit_out_wr;
187
        wire [V-1       :   0]  ni_credit_in                [NC-1           :0];
188
        wire [Fw-1      :   0]  ni_flit_in                  [NC-1           :0];
189
        wire [NC-1      :   0]  ni_flit_in_wr;
190
        wire [V-1       :   0]  ni_credit_out               [NC-1           :0];
191
        wire [NCFw-1    :   0]  flit_out_all;
192
        wire [NC-1      :   0]  flit_out_wr_all;
193
        wire [NCV-1     :   0]  credit_in_all;
194
        wire [NCFw-1    :   0]  flit_in_all;
195
        wire [NC-1      :   0]  flit_in_wr_all;
196
        wire [NCV-1     :   0]  credit_out_all;
197
        wire                                    noc_clk,noc_reset;
198
 
199
    ';
200
 
201
 
202
 
203
        $noc_v="$noc_v
204
//NoC\n \tnoc #(\n";
205
        my $i=0;
206
        foreach my $p (@noc_param){
207
                my $param=($i==0)?  "\t\t.$p($p)":",\n\t\t.$p($p)";
208
                $i=1;
209
                add_text_to_string(\$noc_v,$param);
210
        }
211
        add_text_to_string(\$noc_v,"\n\t)\n\tthe_noc\n\t(\n");
212
 
213
        my @ports= $noc->get_module_ports_order('noc');
214
        $i=0;
215
        foreach my $p (@ports){
216
                my $port;
217
                if($p eq 'reset' ){
218
                        $port=($i==0)?  "\t\t.$p(noc_reset)":",\n\t\t.$p(noc_reset)";
219
                }elsif( $p eq 'clk'){
220
                        $port=($i==0)?  "\t\t.$p(noc_clk)":",\n\t\t.$p(noc_clk)";
221
                }else {
222
                        $port=($i==0)?  "\t\t.$p($p)":",\n\t\t.$p($p)";
223
                }
224
                $i=1;
225
                add_text_to_string(\$noc_v,$port);
226
        }
227
        add_text_to_string(\$noc_v,"\n\t);\n\n");
228
 
229
add_text_to_string(\$noc_v,'
230
        clk_source  src         (
231
                .clk_in(clk),
232
                .clk_out(noc_clk),
233
                .reset_in(reset),
234
                .reset_out(noc_reset)
235
        );
236
');
237
 
238
 
239
 
240
 
241
add_text_to_string(\$noc_v,'
242
 
243
//NoC port assignment
244
  genvar x,y;
245
  generate
246
    for (x=0;   x<NX; x=x+1) begin :x_loop1
247
        for (y=0;   y<NY;   y=y+1) begin: y_loop1
248
                localparam IP_NUM   =   ((y * NX) +  x);
249
 
250
 
251
            assign  ni_flit_in      [IP_NUM] =   flit_out_all    [(IP_NUM+1)*Fw-1    : IP_NUM*Fw];
252
            assign  ni_flit_in_wr   [IP_NUM] =   flit_out_wr_all [IP_NUM];
253
            assign  credit_in_all   [(IP_NUM+1)*V-1 : IP_NUM*V]     =   ni_credit_out   [IP_NUM];
254
            assign  flit_in_all     [(IP_NUM+1)*Fw-1    : IP_NUM*Fw]    =   ni_flit_out     [IP_NUM];
255
            assign  flit_in_wr_all  [IP_NUM] =   ni_flit_out_wr  [IP_NUM];
256
            assign  ni_credit_in    [IP_NUM] =   credit_out_all  [(IP_NUM+1)*V-1 : IP_NUM*V];
257
 
258
 
259
 
260
 
261
 
262
        end
263
    end
264
endgenerate
265
 
266
'
267
);
268
 
269
 
270
 
271
 
272
 
273
 
274
 
275
 
276
 
277
 
278
 
279
 
280
 
281
 
282
 
283
 
284
 
285
 
286
 
287
 
288
        return $noc_v;
289
 
290
}
291
 
292
 
293
 
294
 
295
sub gen_socs_v{
296
        my ($mpsoc,$io_v_ref,$io_def_v)=@_;
297
        #generate loop
298
 
299
#       my $socs_v='
300
#       genvar x,y;    
301
#    
302
#    generate 
303
#    for (x=0;   x<NX; x=x+1) begin :x_loop1
304
#        for (y=0;   y<NY;   y=y+1) begin: y_loop1
305
#                localparam IP_NUM   =   CORE_NUM(x,y);'  ;     
306
 
307
 
308
 
309
#       my @socs= $mpsoc->mpsoc_get_soc_list();
310
#       foreach my $soc (@socs){
311
 
312
#       #tile num condition
313
#               my @tiles= $mpsoc->mpsoc_get_soc_tiles_num($soc);
314
#       if(scalar @tiles>0){
315
#               my $condition="\n\t\tif(";
316
#               my $s=compress_nums( @tiles);
317
#               my @sep=split(',',$s);
318
#                       my $i=0;
319
#                       foreach my $p (@sep){
320
#                               my @range=split(':',$p);
321
#                               my $tt;
322
#                               if($i==0){
323
#                                       $tt= (scalar @range>1)? "(IP_NUM>=$range[0] && IP_NUM<=$range[1])":"(IP_NUM==$range[0])" ;
324
#                               }else{
325
#                               }
326
#                               add_text_to_string(\$condition,$tt);
327
#                               $i=1;
328
#                       }
329
#                       add_text_to_string(\$condition,") begin :${soc}_if\n ");        
330
#                       #soc instance
331
#                       my $soc_v= gen_soc_v($mpsoc,$soc);
332
#         
333
#                       add_text_to_string(\$socs_v,$condition );
334
#                       add_text_to_string(\$socs_v,$soc_v);
335
#                       add_text_to_string(\$socs_v,"\t\tend // ${soc}_if \n");
336
#               }#scalar @tile  
337
# }     #froeach soc
338
 
339
 
340
 
341
 my $socs_v;
342
 
343 25 alirezamon
   my $nx= $mpsoc->object_get_attribute('noc_param',"NX");
344
   my $ny= $mpsoc->object_get_attribute('noc_param',"NY");
345 16 alirezamon
   my $processors_en=0;
346
   for (my $y=0;$y<$ny;$y++){
347
                for (my $x=0; $x<$nx;$x++){
348
                        my $tile_num=($nx*$y)+ $x;
349
 
350
                        my ($soc_name,$n,$soc_num)=$mpsoc->mpsoc_get_tile_soc_name($tile_num);
351
 
352
                        if(defined $soc_name) {
353
                                my ($soc_v,$en)= gen_soc_v($mpsoc,$soc_name,$tile_num,$x,$y,$soc_num,$io_v_ref,$io_def_v);
354
                                add_text_to_string(\$socs_v,$soc_v);
355
                                $processors_en|=$en;
356
                        }else{
357
                                #this tile is not connected to any ip. the noc input ports will be connected to ground
358
                                my $soc_v="\n\n // Tile:$tile_num (x=$x,y=$y)   is not assigned to any ip\n";
359
                                $soc_v="$soc_v
360
 
361
        assign ni_credit_out[$tile_num]={V{1'b0}};
362
        assign ni_flit_out[$tile_num]={Fw{1'b0}};
363
        assign ni_flit_out_wr[$tile_num]=1'b0;
364
        ";
365
                add_text_to_string(\$socs_v,$soc_v);
366
 
367
                        }
368
 
369
        }}
370
 
371
    if($processors_en){
372
        add_text_to_string($io_v_ref,",\n\tprocessors_en");
373
        add_text_to_string($io_def_v,"\t input processors_en;");
374
 
375
    }
376
 
377
 
378
        return $socs_v;
379
 
380
}
381
 
382
##############
383
#       gen_soc_v
384
##############
385
 
386
 
387
 
388
sub   gen_soc_v{
389
        my ($mpsoc,$soc_name,$tile_num,$x,$y,$soc_num,$io_v_ref,$io_def_v)=@_;
390
        my $soc_v;
391
        my $processor_en=0;
392 25 alirezamon
        my $xw= log2($mpsoc->object_get_attribute('noc_param',"NX"));
393
        my $yw= log2($mpsoc->object_get_attribute('noc_param',"NY"));
394 16 alirezamon
        $soc_v="\n\n // Tile:$tile_num (x=$x,y=$y)\n   \t$soc_name #(\n";
395
 
396
        # core id
397
        add_text_to_string(\$soc_v,"\t\t.CORE_ID($tile_num)");
398
 
399
        # ni parameter
400
        my $top=$mpsoc->mpsoc_get_soc($soc_name);
401
        my @noc_param=$top->top_get_parameter_list('ni0');
402
        my $inst_name=$top->top_get_def_of_instance('ni0','instance');
403
 
404
        #other parameters
405
        my %params=$top->top_get_default_soc_param();
406
 
407
        foreach my $p (@noc_param){
408
                my $parm_next = $p;
409
                $parm_next =~ s/${inst_name}_//;
410
                my $param=  ",\n\t\t.$p($parm_next)";
411
                add_text_to_string(\$soc_v,$param);
412
        }
413
        foreach my $p (sort keys %params){
414
                my $parm_next= "${soc_name}_${soc_num}_$p";
415
                my $param=  ",\n\t\t.$p($parm_next)";
416
                add_text_to_string(\$soc_v,$param);
417
 
418
        }
419
 
420
        add_text_to_string(\$soc_v,"\n\t)the_${soc_name}_$soc_num(\n");
421
 
422
        my @intfcs=$top->top_get_intfc_list();
423
 
424
        my $i=0;
425 25 alirezamon
 
426
        my $dir = Cwd::getcwd();
427
        my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name');
428
        my $project_dir   = abs_path("$dir/../../");
429
        my $target_dir  = "$project_dir/mpsoc_work/MPSOC/$mpsoc_name";
430
        my $soc_file="$target_dir/src_verilog/tiles/$soc_name.v";
431
 
432
        my $vdb =read_file($soc_file);
433
 
434
        my %soc_localparam = $vdb->get_modules_parameters($soc_name);
435
 
436
 
437 16 alirezamon
        foreach my $intfc (@intfcs){
438
 
439
                # ni intfc      
440
                if( $intfc eq 'socket:ni[0]'){
441
                        my @ports=$top->top_get_intfc_ports_list($intfc);
442
 
443
                        foreach my $p (@ports){
444
                                my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
445
                                my $q=($intfc_port eq "current_x")? "$xw\'d$x" :
446
                                                                  ($intfc_port eq "current_y")? "$yw\'d$y" :"ni_$intfc_port\[$tile_num\]";
447
                                add_text_to_string(\$soc_v,',') if ($i);
448
                                add_text_to_string(\$soc_v,"\n\t\t.$p($q)");
449
                                $i=1;
450
 
451
 
452
                        }
453
                }
454
                # clk source
455
                elsif( $intfc eq 'plug:clk[0]'){
456
                        my @ports=$top->top_get_intfc_ports_list($intfc);
457
                        foreach my $p (@ports){
458
                                my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
459
                                add_text_to_string(\$soc_v,',') if ($i);
460
                            add_text_to_string(\$soc_v,"\n\t\t.$p(clk)");
461
                            $i=1;
462
 
463
                        }
464
                }
465
                #reset
466
                elsif( $intfc eq 'plug:reset[0]'){
467
                        my @ports=$top->top_get_intfc_ports_list($intfc);
468
                        foreach my $p (@ports){
469
                                my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
470
                                add_text_to_string(\$soc_v,',') if ($i);
471
                            add_text_to_string(\$soc_v,"\n\t\t.$p(reset)");
472
                            $i=1;
473
 
474
                        }
475
 
476
 
477
 
478
                }
479
                elsif( $intfc eq 'plug:enable[0]'){
480
                        my @ports=$top->top_get_intfc_ports_list($intfc);
481
                        foreach my $p (@ports){
482
                                my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
483
                                add_text_to_string(\$soc_v,',') if ($i);
484
                            add_text_to_string(\$soc_v,"\n\t\t.$p(processors_en)");
485
                            $processor_en=1;
486
                            $i=1;
487
 
488
                        }
489
 
490
 
491
                }
492
                else {
493
                #other interface
494
                        my @ports=$top->top_get_intfc_ports_list($intfc);
495
                        foreach my $p (@ports){
496
                        my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
497
                        my $io_port="${soc_name}_${soc_num}_${p}";
498 25 alirezamon
                        #resolve range parameter
499
                        if (defined $range ){
500
                                my @a= split (/\b/,$range);
501
                                foreach my $l (@a){
502
                                        #if defined in parameter list ignore it
503
                                        next  if(defined $params{$l});
504
                                        ($range=$range)=~ s/\b$l\b/$soc_localparam{$l}/g      if(defined $soc_localparam{$l});
505
                                        #else s
506
 
507
                                        #print "$l\n";
508
                                }
509
 
510
                        }
511 16 alirezamon
                        #io name 
512
                        add_text_to_string($io_v_ref,",\n\t$io_port");
513
                        #io definition
514
                        my $new_range = add_instantc_name_to_parameters(\%params,"${soc_name}_$soc_num",$range);
515
                        #my $new_range=$range;
516
                        my $port_def=(length ($range)>1 )?      "\t$type\t [ $new_range    ] $io_port;\n": "\t$type\t\t\t$io_port;\n";
517
 
518
 
519
                        add_text_to_string($io_def_v,"$port_def");
520
                        add_text_to_string(\$soc_v,',') if ($i);
521
                        add_text_to_string(\$soc_v,"\n\t\t.$p($io_port)");
522
                        $i=1;
523
 
524
                        }
525
 
526
 
527
                }
528
 
529
 
530
        }
531
 
532
        add_text_to_string(\$soc_v,"\n\t);\n");
533
 
534
 
535
 
536
 
537
 
538
 
539
 
540
 
541
 
542
 
543
        return ($soc_v,$processor_en);
544
 
545
}
546
 
547
 
548
sub log2{
549
        my $num=shift;
550
        my $log=0;
551 25 alirezamon
        while( (1<< $log)  < $num) {
552 16 alirezamon
                                $log++;
553
        }
554
        return  $log;
555
}
556
 
557
 
558 25 alirezamon
 
559
sub gen_emulate_top_v{
560
                my $emulate=shift;
561
                my ($localparam, $pass_param)=gen_noc_param_v( $emulate);
562
                my $top_v="
563
 
564
module  emulator_top (
565
        output [0:0]LEDR,
566
        output [0:0]LEDG,
567
        input  [0:0]KEY,
568
        input  CLOCK_50
569
);
570
 
571
 
572
 
573
 
574
        $localparam
575
 
576
 
577
        wire reset_in,jtag_reset,reset,reset_sync;
578
 
579
        assign  reset_in        =       ~KEY[0];
580
        assign  LEDG[0]         =       reset;
581
        assign  reset           =       (jtag_reset | reset_in);
582
        wire done;
583
        reg[31:0]time_cnt;
584
 
585
        // a reset source which can be controled using jtag
586
        jtag_source_probe #(
587
                .VJTAG_INDEX(127),
588
                .Dw(1)  //source/probe width in bits
589
        )the_reset(
590
                .probe(done),
591
                .source(jtag_reset)
592
        );
593
 
594
        altera_reset_synchronizer rst_sync
595
        (
596
                .reset_in(reset),
597
                .clk(CLOCK_50),
598
                .reset_out(reset_sync)
599
        );
600
 
601
 
602
 
603
        noc_emulator #(
604
                $pass_param
605
 
606
                    // simulation
607
                   // parameter MAX_PCK_NUM=2560000,
608
                   // parameter MAX_SIM_CLKs=1000000,
609
                  //  parameter MAX_PCK_SIZ=10,
610
                 //   parameter TIMSTMP_FIFO_NUM=16
611
        )
612
        emulate_top
613
        (
614
                .reset(reset_sync),
615
                .clk(CLOCK_50),
616
                .done(done)
617
        );
618
 
619
 
620
         jtag_source_probe #(
621
                .VJTAG_INDEX(126),
622
                .Dw(32) //source/probe width in bits
623
 
624
 
625
        )
626
        src_pb
627
        (
628
                .probe(time_cnt),
629
                .source()
630
        );
631
 
632
 
633
        always @(posedge CLOCK_50 or posedge reset)begin
634
                if(reset) begin
635
                        time_cnt<=0;
636
                end else begin
637
                         if(!done) time_cnt<=time_cnt+1;
638
                end
639
        end
640
 
641
 
642
 assign LEDR[0]=done;
643
 
644
 
645
endmodule
646
 
647
 
648
                ";
649
                return $top_v;
650
 
651
 
652
 
653
 
654
}
655
 
656
 
657 16 alirezamon
1

powered by: WebSVN 2.1.0

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