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 48

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

Line No. Rev Author Line
1 16 alirezamon
use strict;
2
use warnings;
3 43 alirezamon
use FindBin;
4
use lib $FindBin::Bin;
5
 
6 16 alirezamon
use mpsoc;
7
use soc;
8
use ip;
9
use ip_gen;
10
use Cwd;
11
use rvp;
12
 
13
 
14
sub mpsoc_generate_verilog{
15 48 alirezamon
        my ($mpsoc,$sw_dir,$txview)=@_;
16 25 alirezamon
        my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name');
17 34 alirezamon
        my $top_ip=ip_gen->top_gen_new();
18
 
19 48 alirezamon
 
20 34 alirezamon
 
21 48 alirezamon
 
22 16 alirezamon
        my $param_as_in_v;
23 28 alirezamon
        # generate top 
24 16 alirezamon
 
25 28 alirezamon
 
26 48 alirezamon
 
27 16 alirezamon
        #generate socs_parameter
28
        my $socs_param= gen_socs_param($mpsoc);
29
 
30
        #generate noc_parameter
31 25 alirezamon
        my ($noc_param,$pass_param)=gen_noc_param_v($mpsoc);
32 16 alirezamon
 
33
        #generate the noc
34 43 alirezamon
        my $noc_v=gen_noc_v($mpsoc,$pass_param);
35 16 alirezamon
 
36 48 alirezamon
        #generate socs  
37
        my ($socs_v,$io_short,$io_full,$top_io_short,$top_io_full,$top_io_pass,$href)=gen_socs_v($mpsoc,$top_ip,$sw_dir,$txview);
38
        my %jtag_info=%{$href};
39
        my $jtag_v=add_jtag_ctrl (\%jtag_info,$txview);
40 16 alirezamon
 
41 48 alirezamon
        my ($clk_set, $clk_io_sim,$clk_io_full, $clk_assigned_port)= get_top_clk_setting($mpsoc);
42
 
43
        $top_io_short=$top_io_short.",\n$clk_io_sim" if (defined $clk_io_sim);
44
    $top_io_full=$top_io_full."\n$clk_io_full";
45
    $top_io_pass=$top_io_pass.",\n$clk_assigned_port" if (defined $clk_assigned_port);
46
 
47 16 alirezamon
        #functions
48
        my $functions=get_functions();
49
 
50 48 alirezamon
        my $global_localparam=get_golal_param_v();
51 34 alirezamon
 
52 48 alirezamon
        my $mpsoc_v = (defined $param_as_in_v )? "`timescale     1ns/1ps\nmodule $mpsoc_name\n\t import pronoc_pkg::*;\n\t #(\n $param_as_in_v\n)(\n$io_short\n);\n": "`timescale        1ns/1ps\nmodule $mpsoc_name\n \t import pronoc_pkg::*;\n\t(\n$io_short\n);\n";
53
        $mpsoc_v=$mpsoc_v. "
54
$functions
55
$global_localparam
56
$socs_param
57
$io_full
58
$noc_v
59
$socs_v
60
endmodule
61
";
62 16 alirezamon
 
63 42 alirezamon
 
64 48 alirezamon
        my $top_v = (defined $param_as_in_v )? "`timescale       1ns/1ps\nmodule ${mpsoc_name}_top #(\n $param_as_in_v\n)(\n$top_io_short\n);\n": "`timescale    1ns/1ps\nmodule ${mpsoc_name}_top (\n $top_io_short\n);\n";
65 28 alirezamon
 
66 48 alirezamon
$top_v=$top_v."
67
$global_localparam
68
$socs_param
69
$top_io_full
70
$clk_set
71
$jtag_v
72
\t${mpsoc_name} the_${mpsoc_name} (
73
$top_io_pass
74 28 alirezamon
 
75 48 alirezamon
\t);
76
endmodule
77
";
78
 
79
 
80
 
81 16 alirezamon
 
82 28 alirezamon
 
83 48 alirezamon
#       my $mp=get_top_ip($mpsoc,'mpsoc');
84 28 alirezamon
 
85 48 alirezamon
#       mkpath("$dir/lib/ip/mpsoc/",1,01777);   
86
#       open(FILE,  ">$dir/lib/ip/mpsoc/MPSOC.IP") || die "Can not open: $!";
87
#       print FILE perl_file_header("MPSOC.IP");
88
#       print FILE Data::Dumper->Dump([\%$mp],["ipgen"]);
89
#       close(FILE) || die "Error closing file: $!";
90 28 alirezamon
 
91
 
92 48 alirezamon
#       my ($mp_v,$top_v)=soc_generate_verilog($top_soc,"target_dir/sw1",$txview);
93 28 alirezamon
 
94
 
95
 
96
        #my $ins= gen_mpsoc_instance_v($mpsoc,$mpsoc_name,$param_pass_v);
97
 
98
        #add_text_to_string(\$top_v,$local_param_v_all."\n".$io_full_v_all);
99
        #add_text_to_string(\$top_v,$ins);
100 34 alirezamon
        $mpsoc->object_add_attribute('top_ip',undef,$top_ip);
101 48 alirezamon
 
102
        my @chains = (sort { $b <=> $a } keys  %jtag_info);
103
        $mpsoc->object_add_attribute('JTAG','M_CHAIN',$chains[0]);
104
 
105
        return ($mpsoc_v,$top_v,$noc_param);
106 16 alirezamon
}
107
 
108 48 alirezamon
sub add_sources_to_top_ip{
109
        my ($mpsoc,$top_ip)=@_;
110
        my $sourc_short;
111
        my $source_full="";
112
        my @sources=('clk','reset');
113
        foreach my $s (@sources){
114
                my $num = $mpsoc->object_get_attribute('SOURCE_SET',"${s}_number");
115
                $num=1 if (!defined $num);
116
                for (my $n=0;$n<$num;$n++){
117
                        my $name=$mpsoc->object_get_attribute('SOURCE_SET',"${s}_${n}_name");
118
                        $name=$s if(!defined $name);
119
                        $top_ip->top_add_port('IO',$name,'', 'input' ,"plug:$s\[$n\]","${s}_i");
120
                        $sourc_short= (defined $sourc_short)? $sourc_short.",\n\t$name" : "\t$name";
121
                        #$source_full=$source_full. "// synthesis attribute keep of $name is true;\n" if($s eq 'clk');
122
                        $source_full=$source_full."\tinput $name;\n";
123
                }
124
                #$top_ip->top_add_port('IO','clk','', 'input' ,'plug:clk[0]','clk_i');
125
        }
126
        return ($sourc_short, $source_full);
127
}
128
 
129
 
130
sub get_clk_constrain_file{
131
        my ($self)=@_;
132
        my $s='clk';
133
        my $num = $self->object_get_attribute('SOURCE_SET',"${s}_number");
134
        my $top_name=$self->object_get_attribute('mpsoc_name');
135
        $top_name=$self->object_get_attribute('soc_name') if(!defined $top_name);
136
        my $xdc="";
137
        return  if (!defined $num);
138
        for (my $n=0;$n<$num;$n++){
139
                my $clk_name=$self->object_get_attribute('SOURCE_SET',"${s}_${n}_name");
140
                my $period=$self->object_get_attribute('SOURCE_SET',"${s}_${n}_period");
141
                my $fall=$self->object_get_attribute('SOURCE_SET',"${s}_${n}_fall");
142
                my $rise=$self->object_get_attribute('SOURCE_SET',"${s}_${n}_rise");
143
                my $fal_ns=  ($period * $fall)/100;
144
                my $rise_ns= ($period * $rise)/100;
145
 
146
                $xdc=$xdc."create_clock -period $period -name internal_clk$n -waveform {$rise_ns $fal_ns} -add \[get_nets uut/the_${top_name}/${clk_name}\]\n";
147
 
148
        }
149
        return $xdc;
150
 
151
}
152
 
153
 
154
 
155
sub add_jtag_ctrl {
156
        my ($ref,$txview)=@_;
157
        my %jtag_info=%{$ref};
158
 
159
        my $jtag_v="\t//Allow software to remote reset/enable the cpu via jtag
160
\twire jtag_cpu_en, jtag_system_reset;
161
";
162
        my @chains = (sort { $b <=> $a } keys  %jtag_info);
163
        my $altera=0;
164
        my $xilinx=0;
165
        my $glob_en;
166
        foreach my $c (@chains){
167
                my $xilinx_jtag_ctrl_in;
168
                my $xilinx_jtag_ctrl_out;
169
                my $r = $jtag_info{$c}{'wire'};
170
                my $index = $jtag_info{$c}{'index'};
171
 
172
                my @array = (defined $r)? @{$r} :();
173
                my $wires_def = join ("\n",@array);
174
                $jtag_v=$jtag_v."\n//\tJtag chain $c Wire def\n$wires_def\n" if(@array);
175
                $r= $jtag_info{$c}{'altera_num'};
176
                @array = (defined $r)? @{$r} :();
177
                my $altera_jtag_ctrl =(@array)? scalar @array : 0;
178
                $r= $jtag_info{$c}{'xilinx_num'};
179
                @array = (defined $r)? @{$r} :();
180
                my $xilinx_jtag_ctrl =(@array)? scalar @array : 0;
181
                $altera+=$altera_jtag_ctrl;
182
                $xilinx+=$xilinx_jtag_ctrl;
183
                if ($xilinx_jtag_ctrl>0){
184
                        $r=$jtag_info{$c}{'input'};
185
                        @array = (defined $r)? @{$r} :();
186
                        $xilinx_jtag_ctrl_in = ($xilinx_jtag_ctrl!=1)? '{'.join(',',@array).'}' : $array[0];
187
                        $r=$jtag_info{$c}{'output'};
188
                        @array = (defined $r)? @{$r} :();
189
                        $xilinx_jtag_ctrl_out= ($xilinx_jtag_ctrl!=1)? '{'.join(',',@array).'}' : $array[0];
190
                        my $ctrl = (defined $glob_en)? "
191
                .system_reset( ),
192
                .cpu_en( ),
193
        " : "//The global reset/enable signals are connected to the tap with the largest jtag chain number
194
                .system_reset(jtag_system_reset),
195
                .cpu_en(jtag_cpu_en),
196
        ";
197
 
198
 
199
 
200
 
201
                        $glob_en=1;
202
                        $jtag_v=$jtag_v."
203
        xilinx_jtag_wb  #(
204
                .JTAG_CHAIN($c),
205
                .JWB_NUM($xilinx_jtag_ctrl)
206
        )
207
        jwb_$c
208
        (
209
                $ctrl
210
                .reset(jtag_debug_reset_in),
211
                .wb_to_jtag_all($xilinx_jtag_ctrl_out),
212
                .jtag_to_wb_all($xilinx_jtag_ctrl_in)
213
        );
214
";
215
 
216
 
217
                }
218
 
219
        }#for
220
 
221
        if($altera>0 && $xilinx>0){
222
                my $r = $jtag_info{0}{'inst'};
223
                my @array = (defined $r)? @{$r} :();
224
                my $inst=join ("\n\t",@array);
225
                add_colored_info($txview,"Found JTAG communication ports from different FPGA vendors:\n$inst.",'red');
226
        }
227
        elsif($altera>0){
228
                $jtag_v=$jtag_v."
229
                jtag_system_en #(
230
                        .FPGA_VENDOR(\"ALTERA\")
231
                ) jtag_en (
232
                        .cpu_en(jtag_cpu_en),
233
                        .system_reset(jtag_system_reset)
234
 
235
                );
236
        ";
237
        }
238
 
239
        elsif($altera==0 && $xilinx==0){
240
                $jtag_v=$jtag_v."
241
        //No jtag connection has found in the design
242
                jtag_system_en #(
243
                        .FPGA_VENDOR(FPGA_VENDOR)
244
                ) jtag_en (
245
                        .cpu_en(jtag_cpu_en),
246
                        .system_reset(jtag_system_reset)
247
 
248
                );
249
";
250
 
251
 
252
        }
253
 
254
return $jtag_v;
255
 
256
}
257
 
258
 
259
 
260
 
261 16 alirezamon
sub get_functions{
262
        my $p='
263
//functions
264
        function integer log2;
265
                input integer number; begin
266
                        log2=0;
267
                        while(2**log2<number) begin
268
                                log2=log2+1;
269
                        end
270
        end
271
        endfunction // log2
272 43 alirezamon
 
273 16 alirezamon
        ';
274
 
275
        return $p;
276
}
277
 
278
 
279
sub  gen_socs_param{
280
        my $mpsoc=shift;
281
        my $socs_param="
282
//SOC parameters\n";
283 43 alirezamon
        my ($NE, $NR, $RAw,  $EAw, $Fw) = get_topology_info($mpsoc);
284
        my $processors_en=0;
285
    for (my $tile=0;$tile<$NE;$tile++){
286 16 alirezamon
                        my ($soc_name,$n,$soc_num)=$mpsoc->mpsoc_get_tile_soc_name($tile);
287
                        if(defined $soc_name) {
288
                                my $param=      gen_soc_param($mpsoc,$soc_name,$soc_num,$tile);
289 48 alirezamon
                                $socs_param=$socs_param.$param;
290 16 alirezamon
                        }
291 43 alirezamon
        }#$tile
292 16 alirezamon
        $socs_param="$socs_param \n";
293 43 alirezamon
        return $socs_param;
294 16 alirezamon
}
295
 
296
 
297
sub  gen_soc_param {
298 48 alirezamon
        my ($mpsoc,$soc_name,$soc_num,$tile_num)=@_;
299 16 alirezamon
        my $top=$mpsoc->mpsoc_get_soc($soc_name);
300 48 alirezamon
        my $setting=$mpsoc->mpsoc_get_tile_param_setting($tile_num);
301 16 alirezamon
        my %params;
302 48 alirezamon
        #if ($setting eq 'Custom'){
303
        %params= $top->top_get_custom_soc_param($tile_num);
304
        #}else{
305
        #        %params=$top->top_get_default_soc_param();
306
        #}
307
        my $params="\n\t //Parameter setting for $soc_name  located in tile: $tile_num \n";
308
        $params{'CORE_ID'}=$tile_num;
309
        foreach my $p (get_param_list_in_order(\%params)){
310
                        $params{$p}=add_instantc_name_to_parameters(\%params,"T$tile_num",$params{$p});
311
 
312
                        $params="$params\t localparam T${tile_num}_$p=$params{$p};\n";
313 16 alirezamon
        }
314
        return $params;
315
}
316
 
317
 
318 48 alirezamon
 
319 16 alirezamon
sub gen_noc_param_v{
320 48 alirezamon
        my ($mpsoc,$sample)=@_;
321 16 alirezamon
        my $param_v="\n\n//NoC parameters\n";
322 48 alirezamon
        my $pass_param="";
323 25 alirezamon
        my @params=$mpsoc->object_get_attribute_order('noc_param');
324 48 alirezamon
        my $custom_topology = $mpsoc->object_get_attribute('noc_param','CUSTOM_TOPOLOGY_NAME');
325
        my %noc_info;
326
        if(defined $sample ){
327
                my $ref=$mpsoc->object_get_attribute($sample,"noc_info");
328
                %noc_info= %$ref;
329
        }
330
 
331 16 alirezamon
        foreach my $p (@params){
332 48 alirezamon
 
333
                my $val= (defined $sample) ? $noc_info{$p} :$mpsoc->object_get_attribute('noc_param',$p);
334
                next if($p eq "CUSTOM_TOPOLOGY_NAME");
335
                $val=$custom_topology if($p eq "TOPOLOGY" && $val eq "\"CUSTOM\"");
336
                $param_v= $param_v."\tlocalparam $p=$val;\n";
337
                $pass_param=$pass_param."\t\t.$p($p),\n";
338 25 alirezamon
                #print "$p:$val\n";
339 16 alirezamon
 
340
        }
341 25 alirezamon
        my $class=$mpsoc->object_get_attribute('noc_param',"C");
342 16 alirezamon
        my $str;
343
        if( $class > 1){
344 30 alirezamon
                for (my $i=0; $i<=$class-1; $i++){
345
                        my $n="Cn_$i";
346
                        my $val=$mpsoc->object_get_attribute('class_param',$n);
347 48 alirezamon
                        $param_v=$param_v."\tlocalparam $n=$val;\n";
348 30 alirezamon
                }
349 16 alirezamon
                $str="CLASS_SETTING={";
350
                for (my $i=$class-1; $i>=0;$i--){
351
                        $str=($i==0)?  "${str}Cn_0};\n " : "${str}Cn_$i,";
352
                }
353
        }else {
354
                $str="CLASS_SETTING={V{1\'b1}};\n";
355
        }
356 48 alirezamon
        $param_v=$param_v."\tlocalparam $str";
357
        $pass_param=$pass_param."\t\t.CLASS_SETTING(CLASS_SETTING),\n";
358 25 alirezamon
        my $v=$mpsoc->object_get_attribute('noc_param',"V")-1;
359
        my $escape=$mpsoc->object_get_attribute('noc_param',"ESCAP_VC_MASK");
360
        if (! defined $escape){
361 48 alirezamon
                $param_v=$param_v."\tlocalparam [$v     :0] ESCAP_VC_MASK=1;\n";
362
                $pass_param=$pass_param.".\t\tESCAP_VC_MASK(ESCAP_VC_MASK),\n";
363 25 alirezamon
        }
364 48 alirezamon
        $param_v=$param_v." \tlocalparam  CVw=(C==0)? V : C * V;\n";
365
        $pass_param=$pass_param."\t\t.CVw(CVw)\n";
366 25 alirezamon
        return ($param_v,$pass_param);
367 16 alirezamon
 
368
}
369
 
370
 
371 32 alirezamon
sub gen_noc_param_h{
372
        my $mpsoc=shift;
373
        my $param_h="\n\n//NoC parameters\n";
374
 
375 48 alirezamon
        my $topology = $mpsoc->object_get_attribute('noc_param','TOPOLOGY');
376
        $topology =~ s/"//g;
377
        $param_h.="\t#define  IS_${topology}\n";
378
 
379
 
380 32 alirezamon
        my @params=$mpsoc->object_get_attribute_order('noc_param');
381 48 alirezamon
        my $custom_topology = $mpsoc->object_get_attribute('noc_param','CUSTOM_TOPOLOGY_NAME');
382 32 alirezamon
        foreach my $p (@params){
383
                my $val=$mpsoc->object_get_attribute('noc_param',$p);
384 48 alirezamon
                next if($p eq "CUSTOM_TOPOLOGY_NAME");
385
                $val=$custom_topology if($p eq "TOPOLOGY" && $val eq "\"CUSTOM\"");
386
                $param_h=$param_h."\t#define $p\t$val\n";
387 32 alirezamon
 
388
                #print "$p:$val\n";
389
 
390
        }
391
        my $class=$mpsoc->object_get_attribute('noc_param',"C");
392
        my $str;
393
        if( $class > 1){
394
                for (my $i=0; $i<=$class-1; $i++){
395
                        my $n="Cn_$i";
396
                        my $val=$mpsoc->object_get_attribute('class_param',$n);
397 48 alirezamon
                        $param_h=$param_h."\t#define $n\t$val\n";
398 32 alirezamon
                }
399
                $str="CLASS_SETTING  {";
400
                for (my $i=$class-1; $i>=0;$i--){
401
                        $str=($i==0)?  "${str}Cn_0};\n " : "${str}Cn_$i,";
402
                }
403
        }else {
404
                $str="CLASS_SETTING={V{1\'b1}}\n";
405
        }
406
        #add_text_to_string (\$param_h,"\t#define $str");
407
 
408
        my $v=$mpsoc->object_get_attribute('noc_param',"V")-1;
409
        my $escape=$mpsoc->object_get_attribute('noc_param',"ESCAP_VC_MASK");
410
        if (! defined $escape){
411
                #add_text_to_string (\$param_h,"\tlocalparam [$v        :0] ESCAP_VC_MASK=1;\n");
412
                #add_text_to_string (\$pass_param,".ESCAP_VC_MASK(ESCAP_VC_MASK),\n"); 
413
        }
414
        #add_text_to_string (\$param_h," \tlocalparam  CVw=(C==0)? V : C * V;\n");
415
        #add_text_to_string (\$pass_param,".CVw(CVw)\n");
416
 
417
 
418
 
419
 
420 48 alirezamon
        return  $param_h;
421 32 alirezamon
}
422 16 alirezamon
 
423
 
424 32 alirezamon
 
425
 
426
 
427 16 alirezamon
sub gen_noc_v{
428 43 alirezamon
        my ($mpsoc,$pass_param) = @_;
429
        my ($NE, $NR, $RAw, $EAw, $Fw) = get_topology_info($mpsoc);
430 16 alirezamon
 
431 48 alirezamon
 
432
    my $noc_clk   =  $mpsoc->object_get_attribute('SOURCE_SET_CONNECT',"NoC_clk");
433
        my $noc_reset =  $mpsoc->object_get_attribute('SOURCE_SET_CONNECT',"NoC_reset");
434
        $noc_clk   = 'clk0'   if(!defined $noc_clk  );
435
        $noc_reset = 'reset0' if(!defined $noc_reset);
436
 
437 43 alirezamon
        my $noc_v="
438
 
439
        //connection wire to NoC
440 48 alirezamon
        smartflit_chanel_t ni_chan_in  [NE-1 : 0];
441
        smartflit_chanel_t ni_chan_out [NE-1 : 0];
442 16 alirezamon
 
443 48 alirezamon
        wire                                    noc_clk_in,noc_reset_in;
444
 
445
    //NoC
446
        noc_top the_noc
447
        (
448
                .reset(noc_reset_in),
449
                .clk(noc_clk_in),
450
                .chan_in_all(ni_chan_out),
451
                .chan_out_all(ni_chan_in)
452
        );
453
 
454 16 alirezamon
 
455 43 alirezamon
 
456
 
457 16 alirezamon
        clk_source  src         (
458 48 alirezamon
                .clk_in($noc_clk),
459
                .clk_out(noc_clk_in),
460
                .reset_in($noc_reset),
461
                .reset_out(noc_reset_in)
462 16 alirezamon
        );
463 48 alirezamon
";
464 16 alirezamon
 
465 48 alirezamon
;
466 16 alirezamon
        return $noc_v;
467
 
468
}
469
 
470
 
471
 
472
 
473
sub gen_socs_v{
474 48 alirezamon
        my ($mpsoc,$top_ip,$sw_dir,$txview)=@_;
475 28 alirezamon
 
476 48 alirezamon
        #add clk reset signals
477
        my ($sourc_short, $source_full)=add_sources_to_top_ip($mpsoc,$top_ip);
478
 
479
 
480
        my $io_short=$sourc_short;
481
        my $top_io_short="\tjtag_debug_reset_in";
482
 
483
 
484
#       my $jtag_def="// Allow software to remote reset/enable the cpu via jtag
485
#\twire jtag_cpu_en, jtag_system_reset; 
486
#\twire processors_en_anded_jtag = processors_en & jtag_cpu_en;
487
#       
488
#";
489
 
490
        my $io_full=$source_full;
491
        my $top_io_full= "\tinput jtag_debug_reset_in;\n";
492
        my $top_io_pass="//";
493
 
494
        my %jtag_info;
495
        %jtag_info=append_to_hash (\%jtag_info,0,'wire',"wire processors_en_anded_jtag = processors_en & jtag_cpu_en;\n");
496
        #my $altera_jtag_ctrl=0;
497
        #my $xilinx_jtag_ctrl=0; #if it becomes larger than 0 then add jtag to wb module 
498
        #my $jtag_insts="";
499
        #my $xilinx_jtag_ctrl_in="";
500
        #my $xilinx_jtag_ctrl_out=""; 
501
 
502
 
503
        my $socs_v="";
504
        my ($NE, $NR, $RAw, $EAw, $Fw)= get_topology_info ($mpsoc);
505
 
506
 
507 43 alirezamon
        my $processors_en=0;
508 48 alirezamon
        for (my $tile_num=0;$tile_num<$NE;$tile_num++){
509
                        my ($soc_name,$n,$soc_num)=$mpsoc->mpsoc_get_tile_soc_name($tile_num);
510 43 alirezamon
 
511
                        if(defined $soc_name) {
512 48 alirezamon
                                my ($soc_v,$en,$io_short1,$io_full1,$top_io_short1,$top_io_full1,$top_io_pass1,$ref)=
513
                                gen_soc_v($mpsoc,$top_ip,$sw_dir,$soc_name,$tile_num,$soc_num,$txview,\%jtag_info);
514
                                %jtag_info=%{$ref};
515
                                $socs_v=$socs_v.$soc_v;
516
                                $io_short    = $io_short    .$io_short1;
517
                                $io_full     = $io_full     .$io_full1;
518
                                $top_io_short= $top_io_short.$top_io_short1;
519
                                $top_io_full = $top_io_full. $top_io_full1;
520
                                $top_io_pass = $top_io_pass. $top_io_pass1;
521
                        #       $jtag_def    = $jtag_def    .$jtag_def1;
522
                        #       $jtag_insts=$jtag_insts.$jtag_insts1; 
523
                        #       $altera_jtag_ctrl+=$altera_jtag_ctrl1;
524
                        #       $xilinx_jtag_ctrl+=$xilinx_jtag_ctrl1;
525
                        #       $xilinx_jtag_ctrl_in =(length ($xilinx_jtag_ctrl_in )>2)? "$xilinx_jtag_ctrl_in,$xilinx_jtag_ctrl_in1"  : $xilinx_jtag_ctrl_in.$xilinx_jtag_ctrl_in1;
526
                        #       $xilinx_jtag_ctrl_out=(length ($xilinx_jtag_ctrl_out)>2)? "$xilinx_jtag_ctrl_out,$xilinx_jtag_ctrl_out1" :$xilinx_jtag_ctrl_out.$xilinx_jtag_ctrl_out1;
527
 
528 16 alirezamon
                                $processors_en|=$en;
529 28 alirezamon
 
530 16 alirezamon
                        }else{
531
                                #this tile is not connected to any ip. the noc input ports will be connected to ground
532 48 alirezamon
                                my $soc_v="\n\n // Tile:$tile_num    is not assigned to any ip\n";
533 16 alirezamon
                                $soc_v="$soc_v
534
 
535 48 alirezamon
        assign ni_credit_out[$tile_num]={V{1'b0}};
536
        assign ni_flit_out[$tile_num]={Fw{1'b0}};
537
        assign ni_flit_out_wr[$tile_num]=1'b0;
538 16 alirezamon
        ";
539 48 alirezamon
                $socs_v=$socs_v.$soc_v;
540 16 alirezamon
 
541
                        }
542
 
543 43 alirezamon
        }
544 16 alirezamon
 
545
    if($processors_en){
546 48 alirezamon
        $io_short=$io_short.",\n\tprocessors_en";
547
        $io_full=$io_full."\tinput processors_en;";
548
        $top_io_short=$top_io_short.",\n\tprocessors_en";
549
        $top_io_full=$top_io_full."\t input processors_en;";
550
        $top_io_pass=$top_io_pass.",\n\t\t.processors_en(processors_en_anded_jtag)";
551
                $top_ip->top_add_port('IO','processors_en','' ,'input','plug:enable[0]','enable_i');
552 16 alirezamon
 
553
    }
554 48 alirezamon
 
555
 #  $io_short=$io_short.",\n\tjtag_system_reset";
556
 #  $io_full=$io_full."\n\tinput jtag_system_reset;"; 
557
 #  $top_io_pass=$top_io_pass.",\n\t\t.jtag_system_reset(jtag_system_reset)";
558
 
559
 
560
        return ($socs_v,$io_short,$io_full,$top_io_short,$top_io_full,$top_io_pass,\%jtag_info);
561 16 alirezamon
 
562
}
563
 
564 48 alirezamon
 
565
 
566 16 alirezamon
##############
567
#       gen_soc_v
568
##############
569
 
570
 
571 48 alirezamon
#$mpsoc,$top_ip,$sw_dir,$soc_name,$id,$soc_num,$txview
572
sub   gen_soc_v{
573
        my ($mpsoc,$top_ip,$sw_path,$soc_name,$tile_num,$soc_num,$txview,$href)=@_;
574
        my %jtag_info = %{$href};
575
 
576
        my $io_short="";
577
        my $io_full="";
578
        my $top_io_short="";
579
        my $top_io_full="";
580
        my $top_io_pass="";
581 16 alirezamon
 
582 48 alirezamon
 
583
 
584 16 alirezamon
        my $processor_en=0;
585 48 alirezamon
 
586
 
587
 
588
 
589
 
590 43 alirezamon
        my ($NE, $NR, $RAw, $EAw, $Fw)= get_topology_info ($mpsoc);
591
        my $e_addr=endp_addr_encoder($mpsoc,$tile_num);
592
        my $router_num = get_connected_router_id_to_endp($mpsoc,$tile_num);
593
        my $r_addr=router_addr_encoder($mpsoc,$router_num);
594 16 alirezamon
 
595 43 alirezamon
 
596
 
597 48 alirezamon
        my $soc_v="\n\n // Tile:$tile_num ($e_addr)\n   \t$soc_name #(\n";
598
 
599 34 alirezamon
        # Global parameter
600 48 alirezamon
        $soc_v=$soc_v."\t\t.CORE_ID($tile_num),\n\t\t.SW_LOC(\"$sw_path/tile$tile_num\")";
601 16 alirezamon
 
602 43 alirezamon
 
603 16 alirezamon
        # ni parameter
604
        my $top=$mpsoc->mpsoc_get_soc($soc_name);
605 30 alirezamon
        my @nis=get_NI_instance_list($top);
606
        my @noc_param=$top->top_get_parameter_list($nis[0]);
607
        my $inst_name=$top->top_get_def_of_instance($nis[0],'instance');
608 16 alirezamon
 
609
        #other parameters
610
        my %params=$top->top_get_default_soc_param();
611
 
612 43 alirezamon
 
613
 
614 16 alirezamon
        foreach my $p (@noc_param){
615
                my $parm_next = $p;
616
                $parm_next =~ s/${inst_name}_//;
617
                my $param=  ",\n\t\t.$p($parm_next)";
618 48 alirezamon
                $soc_v=$soc_v.$param;
619 16 alirezamon
        }
620
        foreach my $p (sort keys %params){
621 48 alirezamon
                my $parm_next= "T${tile_num}_$p";
622 16 alirezamon
                my $param=  ",\n\t\t.$p($parm_next)";
623 48 alirezamon
                $soc_v=$soc_v.$param;
624 16 alirezamon
 
625
        }
626
 
627 48 alirezamon
        $soc_v=$soc_v."\n\t)the_${soc_name}_$soc_num(\n";
628 16 alirezamon
 
629
        my @intfcs=$top->top_get_intfc_list();
630
 
631
        my $i=0;
632 25 alirezamon
 
633
        my $dir = Cwd::getcwd();
634
        my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name');
635 28 alirezamon
        my $target_dir  = "$ENV{'PRONOC_WORK'}/MPSOC/$mpsoc_name";
636 48 alirezamon
        my $soc_file="$target_dir/src_verilog/tiles/$soc_name.sv";
637 25 alirezamon
 
638 34 alirezamon
        my $vdb =read_verilog_file($soc_file);
639 25 alirezamon
 
640
        my %soc_localparam = $vdb->get_modules_parameters($soc_name);
641
 
642
 
643 16 alirezamon
        foreach my $intfc (@intfcs){
644
 
645
                # ni intfc
646
                if( $intfc eq 'socket:ni[0]'){
647
                        my @ports=$top->top_get_intfc_ports_list($intfc);
648
 
649
                        foreach my $p (@ports){
650
                                my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
651 43 alirezamon
                                my $q=  ($intfc_port eq "current_e_addr")? "$EAw\'d$e_addr" :
652
                                                ($intfc_port eq "current_r_addr")? "$RAw\'d$r_addr" :
653
                                                "ni_$intfc_port\[$tile_num\]";
654 48 alirezamon
                                $soc_v=$soc_v.',' if ($i);
655
                                $soc_v=$soc_v."\n\t\t.$p($q)";
656 16 alirezamon
                                $i=1;
657
 
658
 
659
                        }
660
                }
661
                # clk source
662 48 alirezamon
                elsif( $intfc =~ /plug:clk\[/ ){
663 16 alirezamon
                        my @ports=$top->top_get_intfc_ports_list($intfc);
664
                        foreach my $p (@ports){
665
                                my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
666 48 alirezamon
                                $soc_v=$soc_v.',' if ($i);
667
                                my $src =  $mpsoc->object_get_attribute('SOURCE_SET_CONNECT',"T${tile_num}_$p");
668
                                $src = 'clk0' if(!defined $src);
669
                                $soc_v=$soc_v."\n\t\t.$p($src)";
670 16 alirezamon
                            $i=1;
671
 
672
                        }
673
                }
674
                #reset
675 48 alirezamon
                elsif( $intfc =~ /plug:reset\[/){
676 16 alirezamon
                        my @ports=$top->top_get_intfc_ports_list($intfc);
677
                        foreach my $p (@ports){
678
                                my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
679 48 alirezamon
                                $soc_v=$soc_v.',' if ($i);
680
                                my $src =  $mpsoc->object_get_attribute('SOURCE_SET_CONNECT',"T${tile_num}_$p");
681
                                $src = 'reset0' if(!defined $src);
682
                                $soc_v=$soc_v."\n\t\t.$p(${src} )";#| jtag_system_reset)";
683 16 alirezamon
                            $i=1;
684
 
685 48 alirezamon
                        }
686 16 alirezamon
                }
687 42 alirezamon
                #enable
688 48 alirezamon
                elsif( $intfc =~ /plug:enable\[/){
689 16 alirezamon
                        my @ports=$top->top_get_intfc_ports_list($intfc);
690
                        foreach my $p (@ports){
691
                                my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
692 48 alirezamon
                                $soc_v=$soc_v.',' if ($i);
693
                                $soc_v=$soc_v."\n\t\t.$p(processors_en)";
694 16 alirezamon
                            $processor_en=1;
695 48 alirezamon
                            $i=1;
696
                        }
697 16 alirezamon
                }
698 42 alirezamon
                #RxD_sim
699
                elsif( $intfc eq 'socket:RxD_sim[0]'){
700
                        #This interface is for simulation only donot include it in top module
701
                        my @ports=$top->top_get_intfc_ports_list($intfc);
702
                        foreach my $p (@ports){
703 48 alirezamon
                                $soc_v=$soc_v.',' if ($i);
704
                                $soc_v=$soc_v."\n\t\t.$p( )";
705 42 alirezamon
                                $i=1;
706
                        }
707
 
708 48 alirezamon
                }
709
                #jtag_to_wb
710
                elsif( $intfc =~ /socket:jtag_to_wb\[/){ #check JTAG connect parameter. if it is XILINX then connect it to jtag tap
711
                        my @ports=$top->top_get_intfc_ports_list($intfc);
712
 
713
                        my $setting=$mpsoc->mpsoc_get_tile_param_setting($tile_num);
714
                        my %topparams;
715
                        #if ($setting eq 'Custom'){
716
                                 %topparams= $top->top_get_custom_soc_param($tile_num);
717
                #       }else{
718
                        #        %topparams=$top->top_get_default_soc_param();
719
                        #}
720 42 alirezamon
 
721 48 alirezamon
 
722
                        #my $JTAG_CONNECT=$soc->soc_get_module_param_value ($id,'JTAG_CONNECT');
723
 
724 16 alirezamon
                        foreach my $p (@ports){
725 48 alirezamon
                                my($id,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
726
                                my $inst_name=$top->top_get_def_of_instance($id,'instance');
727
                                my $JTAG_CONNECT=  $topparams{"${inst_name}_JTAG_CONNECT"};
728
                                my $chain=$topparams{"${inst_name}_JTAG_CHAIN"};
729
                                my $index=$topparams{"${inst_name}_JTAG_INDEX"};
730
                                #print Dumper (\%topparams);
731
                                #print "my $JTAG_CONNECT=  \$topparams{${inst_name}_JTAG_CONNECT}\n";
732
 
733
                                #print "$inst,$range,$type,$intfc_name,$intfc_port-> $JTAG_CONNECT;";
734
                                if($JTAG_CONNECT  =~ /XILINX_JTAG_WB/){
735 25 alirezamon
 
736 48 alirezamon
                                        my ($io_port,$type,$new_range,$intfc_name,$intfc_port)= get_top_port_io_info($top,$p,$tile_num,\%params,\%soc_localparam);
737
                                        my $port_def=(length ($new_range)>1 )?  "\t$type\t [ $new_range    ] $io_port;\n": "\t$type\t\t\t$io_port;\n";
738
                                        $top_ip->top_add_port("T${tile_num}" ,$io_port, $new_range ,$type,$intfc_name,$intfc_port);
739
 
740
                                        my $wire_def=(length ($new_range)>1 )?  "\twire\t [ $new_range    ] $io_port;": "\twire\t\t\t$io_port;";
741
                                #       my $new_range = add_instantc_name_to_parameters(\%params,"${soc_name}_$soc_num",$range);
742
 
743
                                #       $jtag_def=$jtag_def."$wire_def";
744
                                        %jtag_info=append_to_hash (\%jtag_info,$chain,'wire',"$wire_def");
745
 
746
 
747
                                        $soc_v=$soc_v.',' if ($i);
748
                                        $soc_v=$soc_v."\n\t\t.$p($io_port)";
749
                                        $i=1;
750
                                        if($type eq 'input'){
751
                                                %jtag_info=check_jtag_indexs(\%jtag_info,$chain,$index,$txview,$inst_name,$tile_num);
752
                                                #$jtag_insts=$jtag_insts."$id XILINX JTAG,";
753
                                                %jtag_info=append_to_hash (\%jtag_info,0,'inst',"$id XILINX JTAG");
754
                                                #$xilinx_jtag_ctrl++;
755
                                                %jtag_info=append_to_hash (\%jtag_info,$chain,'xilinx_num',1);
756
                                                #$xilinx_jtag_ctrl_in=(length ($xilinx_jtag_ctrl_in)>2)? "$xilinx_jtag_ctrl_in,$io_port" : "$io_port";
757
                                                %jtag_info=append_to_hash (\%jtag_info,$chain,'input',$io_port);
758
                                        }else {
759
                                                #$xilinx_jtag_ctrl_out=(length($xilinx_jtag_ctrl_out)>2)? "$xilinx_jtag_ctrl_out,$io_port" : "$io_port";
760
                                                %jtag_info=append_to_hash (\%jtag_info,$chain,'output',$io_port);
761
                                        }
762
                                        $io_short=$io_short.",\n\t$io_port";
763
                                        $io_full=$io_full."$port_def";
764
                                        $top_io_pass=$top_io_pass.",\n\t\t.$io_port($io_port)";
765
#
766
                                }else{#Dont not connect
767
                                        $soc_v=$soc_v.',' if ($i);
768
                                        $soc_v=$soc_v."\n\t\t.$p( )";
769
                                        $i=1;
770 25 alirezamon
                                }
771 16 alirezamon
 
772 48 alirezamon
                                if($JTAG_CONNECT =~ /ALTERA_JTAG_WB/){
773
                                        if($type eq 'input'){
774
                                                #$jtag_insts=$jtag_insts."$id ALTERA JTAG,";
775
                                                #$altera_jtag_ctrl++;
776
                                                %jtag_info=append_to_hash (\%jtag_info,0,'inst',"$id ALTERA JTAG");
777
                                                %jtag_info=append_to_hash (\%jtag_info,0,'altera_num',1);
778
                                                %jtag_info=check_jtag_indexs(\%jtag_info,0,$index,$txview,$inst_name,$tile_num);
779
 
780
                                        }
781
                                }
782 16 alirezamon
 
783
                        }
784
 
785 48 alirezamon
                }
786 16 alirezamon
 
787 48 alirezamon
                else {
788
                #other interface
789
                        my @ports=$top->top_get_intfc_ports_list($intfc);
790
                        foreach my $p (@ports){
791
                                my ($io_port,$type,$new_range,$intfc_name,$intfc_port)= get_top_port_io_info($top,$p,$tile_num,\%params,\%soc_localparam);
792
 
793
                                $io_short=$io_short.",\n\t$io_port";
794
                                $top_io_short=$top_io_short.",\n\t$io_port";
795
                                $top_io_pass=$top_io_pass.",\n\t\t.$io_port($io_port)";
796
                                #io definition
797
                                #my $new_range = add_instantc_name_to_parameters(\%params,"${soc_name}_$soc_num",$range);
798
                                my $port_def=(length ($new_range)>1 )?  "\t$type\t [ $new_range    ] $io_port;\n": "\t$type\t\t\t$io_port;\n";
799
                                $top_ip->top_add_port("T${tile_num}" ,$io_port, $new_range ,$type,$intfc_name,$intfc_port);
800
 
801
                                $io_full=$io_full."$port_def";
802
                                $top_io_full=$top_io_full."$port_def";
803
                                $soc_v=$soc_v.',' if ($i);
804
                                $soc_v=$soc_v."\n\t\t.$p($io_port)";
805
                                $i=1;
806
 
807
                        }
808
                }
809 16 alirezamon
        }
810
 
811
 
812
 
813 48 alirezamon
        $soc_v=$soc_v."\n\t);\n";
814 16 alirezamon
 
815 48 alirezamon
 
816
        return ($soc_v,$processor_en,$io_short,$io_full,$top_io_short,  $top_io_full,$top_io_pass,\%jtag_info);
817 16 alirezamon
 
818
}
819
 
820
 
821 48 alirezamon
sub check_jtag_indexs{
822
        my ($ref,$chain,$index,$txview,$inst_name,$core_id)=@_;
823
        my %jtag_info = %{$ref} if (defined $ref);
824
 
825
        chomp $index;
826
        # replace coreid parameter
827
        ($index=$index)=~ s/CORE_ID/$core_id/g;
828
        $index = eval $index;
829
        my $inst1 =$jtag_info{$chain}{'index'}{$index};
830
        my $id1 = $jtag_info{$chain}{'core_id'}{$index};
831
        if (defined $inst1){
832
                add_colored_info($txview,"Error: The JTAG INDEX number $index in JTAG Chain $chain is not unique. The same index number is used in tile($id1):$inst1  & tile($core_id):$inst_name  IPs. It should be used in only one module.\n",'red');
833 16 alirezamon
        }
834 48 alirezamon
        $jtag_info{$chain}{'index'}{$index}=$inst_name;
835
        $jtag_info{$chain}{'core_id'}{$index}=$core_id;
836
        #print "\$jtag_info{$chain}{'index'}{$index}=$inst_name\n";
837
        return %jtag_info;
838 16 alirezamon
}
839
 
840
 
841 25 alirezamon
 
842 48 alirezamon
sub get_top_clk_setting{
843
        my $mpsoc=shift;
844
    #get mpsoc with clock setting interface
845
        my $dir = Cwd::getcwd();
846
        my $soc =get_source_set_top($mpsoc);
847 25 alirezamon
 
848 48 alirezamon
    my @instances=$soc->soc_get_all_instances();
849
    my $top_ip=ip_gen->top_gen_new();
850
    my $body_v;
851
    my $param_pass_v="";
852
    my $io_sim_v;
853
        my $io_top_sim_v;
854
        my $core_id= 0 ;
855
        my $param_as_in_v="";
856
        my $local_param_v_all="";
857
        my $inst_v_all="";
858
    my $param_v_all="";
859
    my $wire_def_v_all="";
860
        my $plugs_assign_v_all="";
861
        my $sockets_assign_v_all="";
862
        my $io_full_v_all="";
863
        my $io_top_full_v_all="";
864
        my $io_sim_v_all;
865
        my $system_v_all="";
866
 
867
        my $wires=soc->new_wires();
868
        my $intfc=interface->interface_new();
869
        my $clk_assigned_port;
870
    foreach my $id (@instances){
871
        my ($param_v, $local_param_v, $wire_def_v, $inst_v, $plugs_assign_v, $sockets_assign_v,$io_full_v,$io_top_full_v,$io_sim_v,
872
                $top_io_short,$param_as_in_v,$param_pass_v,$system_v,$assigned_ports,$top_io_pass,$src_io_short, $src_io_full)=gen_module_inst($id,$soc,$top_ip,$intfc,$wires);
873
 
874
                #my ($param_v, $local_param_v, $wire_def_v, $inst_v, $plugs_assign_v, $sockets_assign_v,$io_full_v,$io_top_full_v,$system_v,$assigned_ports)=gen_module_inst($id,$soc,\$io_sim_v,\$io_top_sim_v,\$param_as_in_v,$top_ip,$intfc,$wires,\$param_pass_v,\$system_v);
875
                my $inst        = $soc->soc_get_instance_name($id);
876
                if ($id ne 'TOP'){
877
                        add_text_to_string(\$body_v,"/*******************\n*\n*\t$inst\n*\n*\n*********************/\n");
878
                        add_text_to_string(\$system_v_all,"$system_v\n")        if(defined($system_v));
879
                        add_text_to_string(\$local_param_v_all,"$local_param_v\n")      if(defined($local_param_v));
880
                        add_text_to_string(\$wire_def_v_all,"$wire_def_v\n")                    if(defined($wire_def_v));
881
                        add_text_to_string(\$inst_v_all,$inst_v)                                                if(defined($inst_v));
882
                        add_text_to_string(\$plugs_assign_v_all,"$plugs_assign_v\n")    if(defined($plugs_assign_v));
883
                        add_text_to_string(\$sockets_assign_v_all,"$sockets_assign_v\n")if(defined($sockets_assign_v));
884
                        add_text_to_string(\$io_full_v_all,"$io_full_v\n")                              if(length($io_full_v)>3);
885
                        add_text_to_string(\$io_top_full_v_all,"$io_top_full_v\n")              if(length($io_top_full_v)>3);
886
                        $io_sim_v_all     = (defined $io_sim_v_all    )? "$io_sim_v_all,\n$io_sim_v"         : $io_sim_v                if(defined($io_sim_v));
887
                }else{
888
                        add_text_to_string(\$system_v_all,"$system_v\n")        if(defined($system_v));
889
                        add_text_to_string(\$wire_def_v_all,"$wire_def_v\n")                    if(defined($wire_def_v));
890
                        add_text_to_string(\$plugs_assign_v_all,"$plugs_assign_v\n")    if(defined($plugs_assign_v));
891
                        add_text_to_string(\$sockets_assign_v_all,"$sockets_assign_v\n")if(defined($sockets_assign_v));
892
                        add_text_to_string(\$io_full_v_all,"$io_full_v\n")                              if(length($io_full_v)>3);
893
                        $io_sim_v_all     = (defined $io_sim_v_all    )? "$io_sim_v_all,\n$io_sim_v"         : $io_sim_v                if(defined($io_sim_v));
894
                        add_text_to_string(\$io_top_full_v_all,"$io_top_full_v\n")                      if(length($io_top_full_v)>3);
895
                        $clk_assigned_port= (defined $clk_assigned_port)? "$clk_assigned_port,\n$assigned_ports"  : $assigned_ports if(defined $assigned_ports);
896
                }
897
 
898
    }
899
 
900
 
901
 
902
 
903
 
904
 
905
    my $unused_wiers_v=assign_unconnected_wires($wires,$intfc);
906
    $unused_wiers_v= "" if(!defined $unused_wiers_v);
907
 
908
   my $soc_v = "
909
   $system_v_all
910
   $local_param_v_all
911
   $wire_def_v_all
912
   $unused_wiers_v
913
   $inst_v_all
914
   $plugs_assign_v_all
915
   $sockets_assign_v_all
916 25 alirezamon
 
917 48 alirezamon
";
918
        my $clk_io_full= $io_full_v_all;
919
        my $clk_io_sim=$io_sim_v_all;
920
        return ($soc_v,$clk_io_sim,$clk_io_full,$clk_assigned_port);
921 25 alirezamon
 
922 48 alirezamon
}
923 25 alirezamon
 
924 48 alirezamon
sub get_top_port_io_info{
925
        my ($top,$port,$tile_num,$params_ref,$local_param_ref)=@_;
926
        my %params =%{$params_ref} if(defined $params_ref);
927
        my %localparams=%{$local_param_ref} if(defined $local_param_ref);
928
        my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($port);
929
        my $io_port="T${tile_num}_${port}";
930
    #resolve range parameter
931
        if (defined $range ){
932
                        my @a= split (/\b/,$range);
933
                        foreach my $l (@a){
934
                                #if defined in parameter list ignore it
935
                                next  if(defined $params{$l});
936
                                ($range=$range)=~ s/\b$l\b/$localparams{$l}/g      if(defined $localparams{$l});
937
                        }
938
        }
939
        my $new_range = add_instantc_name_to_parameters(\%params,"T${tile_num}",$range);
940
        return ($io_port,$type,$new_range,$intfc_name,$intfc_port);
941
}
942 25 alirezamon
 
943
 
944
 
945
 
946 48 alirezamon
 
947 25 alirezamon
 
948
 
949
 
950 16 alirezamon
1

powered by: WebSVN 2.1.0

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