Line 25... |
Line 25... |
my $top_ip=ip_gen->top_gen_new();
|
my $top_ip=ip_gen->top_gen_new();
|
if(!defined $soc_name){$soc_name='soc'};
|
if(!defined $soc_name){$soc_name='soc'};
|
|
|
my @instances=$soc->soc_get_all_instances();
|
my @instances=$soc->soc_get_all_instances();
|
my $io_sim_v;
|
my $io_sim_v;
|
|
my $io_top_sim_v;
|
my $core_id= $soc->object_get_attribute('global_param','CORE_ID');
|
my $core_id= $soc->object_get_attribute('global_param','CORE_ID');
|
$core_id= 0 if(!defined $core_id);
|
$core_id= 0 if(!defined $core_id);
|
my $param_as_in_v="\tparameter\tCORE_ID=$core_id,
|
my $param_as_in_v="\tparameter\tCORE_ID=$core_id,
|
\tparameter\tSW_LOC=\"$sw_path\"";
|
\tparameter\tSW_LOC=\"$sw_path\"";
|
|
|
Line 36... |
Line 37... |
|
|
|
|
my $param_pass_v="\t.CORE_ID(CORE_ID),\n\t.SW_LOC(SW_LOC)";
|
my $param_pass_v="\t.CORE_ID(CORE_ID),\n\t.SW_LOC(SW_LOC)";
|
my $body_v;
|
my $body_v;
|
|
|
my ($param_v_all, $local_param_v_all, $wire_def_v_all, $inst_v_all, $plugs_assign_v_all, $sockets_assign_v_all,$io_full_v_all);
|
my ($param_v_all, $local_param_v_all, $wire_def_v_all, $inst_v_all, $plugs_assign_v_all, $sockets_assign_v_all,$io_full_v_all,$io_top_full_v_all);
|
my $wires=soc->new_wires();
|
my $wires=soc->new_wires();
|
my $intfc=interface->interface_new();
|
my $intfc=interface->interface_new();
|
|
|
foreach my $id (@instances){
|
foreach my $id (@instances){
|
my ($param_v, $local_param_v, $wire_def_v, $inst_v, $plugs_assign_v, $sockets_assign_v,$io_full_v)=gen_module_inst($id,$soc,\$io_sim_v,\$param_as_in_v,$top_ip,$intfc,$wires,\$param_pass_v);
|
my ($param_v, $local_param_v, $wire_def_v, $inst_v, $plugs_assign_v, $sockets_assign_v,$io_full_v,$io_top_full_v)=gen_module_inst($id,$soc,\$io_sim_v,\$io_top_sim_v,\$param_as_in_v,$top_ip,$intfc,$wires,\$param_pass_v);
|
my $inst = $soc->soc_get_instance_name($id);
|
my $inst = $soc->soc_get_instance_name($id);
|
add_text_to_string(\$body_v,"/*******************\n*\n*\t$inst\n*\n*\n*********************/\n");
|
add_text_to_string(\$body_v,"/*******************\n*\n*\t$inst\n*\n*\n*********************/\n");
|
|
|
add_text_to_string(\$local_param_v_all,"$local_param_v\n") if(defined($local_param_v));
|
add_text_to_string(\$local_param_v_all,"$local_param_v\n") if(defined($local_param_v));
|
add_text_to_string(\$wire_def_v_all,"$wire_def_v\n") if(defined($wire_def_v));
|
add_text_to_string(\$wire_def_v_all,"$wire_def_v\n") if(defined($wire_def_v));
|
add_text_to_string(\$inst_v_all,$inst_v) if(defined($inst_v));
|
add_text_to_string(\$inst_v_all,$inst_v) if(defined($inst_v));
|
add_text_to_string(\$plugs_assign_v_all,"$plugs_assign_v\n") if(defined($plugs_assign_v));
|
add_text_to_string(\$plugs_assign_v_all,"$plugs_assign_v\n") if(defined($plugs_assign_v));
|
add_text_to_string(\$sockets_assign_v_all,"$sockets_assign_v\n")if(defined($sockets_assign_v));
|
add_text_to_string(\$sockets_assign_v_all,"$sockets_assign_v\n")if(defined($sockets_assign_v));
|
add_text_to_string(\$io_full_v_all,"$io_full_v\n") if(defined($io_full_v));
|
add_text_to_string(\$io_full_v_all,"$io_full_v\n") if(defined($io_full_v));
|
|
add_text_to_string(\$io_top_full_v_all,"$io_top_full_v\n") if(defined($io_top_full_v));
|
|
|
#print "$param_v $local_param_v $wire_def_v $inst_v $plugs_assign_v $sockets_assign_v $io_full_v";
|
#print "$param_v $local_param_v $wire_def_v $inst_v $plugs_assign_v $sockets_assign_v $io_full_v";
|
|
|
}
|
}
|
my ($addr_map,$addr_localparam,$module_addr_localparam)= generate_address_cmp($soc,$wires);
|
my ($addr_map,$addr_localparam,$module_addr_localparam)= generate_address_cmp($soc,$wires);
|
Line 88... |
Line 90... |
$soc->object_add_attribute('top_ip',undef,$top_ip);
|
$soc->object_add_attribute('top_ip',undef,$top_ip);
|
#print @assigned_wires;
|
#print @assigned_wires;
|
|
|
#generate topmodule
|
#generate topmodule
|
|
|
my $top_v = (defined $param_as_in_v )? "module ${soc_name}_top #(\n $param_as_in_v\n)(\n$io_sim_v\n);\n": "module ${soc_name}_top (\n $io_sim_v\n);\n";
|
my $top_v = (defined $param_as_in_v )? "module ${soc_name}_top #(\n $param_as_in_v\n)(\n$io_top_sim_v\n);\n": "module ${soc_name}_top (\n $io_top_sim_v\n);\n";
|
my $ins= gen_soc_instance_v($soc,$soc_name,$param_pass_v);
|
my $ins= gen_soc_instance_v($soc,$soc_name,$param_pass_v);
|
add_text_to_string(\$top_v,$functions_all);
|
add_text_to_string(\$top_v,$functions_all);
|
add_text_to_string(\$top_v,$local_param_v_all."\n".$io_full_v_all);
|
add_text_to_string(\$top_v,$local_param_v_all."\n".$io_top_full_v_all);
|
add_text_to_string(\$top_v,$ins);
|
add_text_to_string(\$top_v,$ins);
|
my ($readme,$prog)=gen_system_info($soc,$param_as_in_v);
|
my ($readme,$prog)=gen_system_info($soc,$param_as_in_v);
|
return ("$soc_v",$top_v,$readme,$prog);
|
return ("$soc_v",$top_v,$readme,$prog);
|
|
|
|
|
Line 104... |
Line 106... |
#################
|
#################
|
# gen_module_inst
|
# gen_module_inst
|
###############
|
###############
|
|
|
sub gen_module_inst {
|
sub gen_module_inst {
|
my ($id,$soc,$io_sim_v,$param_as_in_v,$top_ip, $intfc,$wires,$param_pass_v)=@_;
|
my ($id,$soc,$io_sim_v,$io_top_sim_v,$param_as_in_v,$top_ip, $intfc,$wires,$param_pass_v)=@_;
|
my $module =$soc->soc_get_module($id);
|
my $module =$soc->soc_get_module($id);
|
my $module_name =$soc->soc_get_module_name($id);
|
my $module_name =$soc->soc_get_module_name($id);
|
my $category =$soc->soc_get_category($id);
|
my $category =$soc->soc_get_category($id);
|
|
|
my $inst = $soc->soc_get_instance_name($id);
|
my $inst = $soc->soc_get_instance_name($id);
|
my %params = $soc->soc_get_module_param($id);
|
my %params = $soc->soc_get_module_param($id);
|
|
|
my $ip = ip->lib_new ();
|
my $ip = ip->lib_new ();
|
|
|
my @ports=$ip->ip_list_ports($category,$module);
|
my @ports=$ip->ip_list_ports($category,$module);
|
my ($inst_v,$intfc_v,$plugs_assign_v,$sockets_assign_v,$io_full_v);
|
my ($inst_v,$intfc_v,$plugs_assign_v,$sockets_assign_v,$io_full_v,$io_top_full_v);
|
my $wire_def_v="";
|
my $wire_def_v="";
|
$plugs_assign_v="\n";
|
$plugs_assign_v="\n";
|
|
|
my $counter=0;
|
my $counter=0;
|
my @param_order=$soc->soc_get_instance_param_order($id);
|
my @param_order=$soc->soc_get_instance_param_order($id);
|
Line 170... |
Line 172... |
my ($s_type,$s_value,$s_connection_num)=$soc->soc_get_socket_of_instance($id,$i_name);
|
my ($s_type,$s_value,$s_connection_num)=$soc->soc_get_socket_of_instance($id,$i_name);
|
my $v=$soc->soc_get_module_param_value($id,$s_value);
|
my $v=$soc->soc_get_module_param_value($id,$s_value);
|
if ( length( $v || '' )){ $IO='no';} else {$IO='yes';}
|
if ( length( $v || '' )){ $IO='no';} else {$IO='yes';}
|
}
|
}
|
}
|
}
|
|
|
if($NC eq 'yes'){
|
if($NC eq 'yes'){
|
|
|
|
|
}
|
}
|
elsif($IO eq 'yes' || !defined $i_type || !defined $i_name || !defined $i_num){ #its an IO port
|
elsif($IO eq 'yes' || !defined $i_type || !defined $i_name || !defined $i_num){ #its an IO port
|
if($i_port eq 'NC'){
|
if($i_port eq 'NC'){
|
$NC='yes';
|
$NC='yes';
|
}else {
|
}else {
|
$assigned_port="$inst\_$port";
|
$assigned_port="$inst\_$port";
|
$$io_sim_v= (!defined $$io_sim_v)? "\t$assigned_port" : "$$io_sim_v, \n\t$assigned_port";
|
$$io_sim_v= (!defined $$io_sim_v)? "\t$assigned_port" : "$$io_sim_v, \n\t$assigned_port";
|
|
$$io_top_sim_v= (!defined $$io_top_sim_v)? "\t$assigned_port" : "$$io_top_sim_v, \n\t$assigned_port" if ($i_name ne 'RxD_sim');
|
my $new_range = add_instantc_name_to_parameters(\%params,$inst,$range);
|
my $new_range = add_instantc_name_to_parameters(\%params,$inst,$range);
|
my $port_def=(length ($range)>1 )? "\t$type\t [ $new_range ] $assigned_port;\n": "\t$type\t\t\t$assigned_port;\n";
|
my $port_def=(length ($range)>1 )? "\t$type\t [ $new_range ] $assigned_port;\n": "\t$type\t\t\t$assigned_port;\n";
|
add_text_to_string(\$io_full_v,$port_def);
|
add_text_to_string(\$io_full_v,$port_def);
|
|
add_text_to_string(\$io_top_full_v,$port_def) if ($i_name ne 'RxD_sim');
|
# $top_ip->ipgen_add_port($assigned_port, $new_range, $type ,$intfc_name,$i_port);
|
# $top_ip->ipgen_add_port($assigned_port, $new_range, $type ,$intfc_name,$i_port);
|
$top_ip->top_add_port($id,$assigned_port, $new_range, $type ,$intfc_name,$i_port);
|
$top_ip->top_add_port($id,$assigned_port, $new_range, $type ,$intfc_name,$i_port);
|
}
|
}
|
|
|
|
|
Line 294... |
Line 299... |
$inst_v="$inst_v\t);\n";
|
$inst_v="$inst_v\t);\n";
|
|
|
|
|
|
|
|
|
return ($param_v, $local_param_v, $wire_def_v, $inst_v, $plugs_assign_v, $sockets_assign_v,$io_full_v,$param_pass_v);
|
return ($param_v, $local_param_v, $wire_def_v, $inst_v, $plugs_assign_v, $sockets_assign_v,$io_full_v,$io_top_full_v,$param_pass_v);
|
|
|
|
|
}
|
}
|
|
|
|
|
sub add_instantc_name_to_parameters{
|
sub add_instantc_name_to_parameters{
|
my ($params_ref,$inst,$range)=@_;
|
my ($params_ref,$inst,$range)=@_;
|
my $new_range=$range;
|
my $new_range=$range;
|
#print "$new_range\n";
|
#print "$new_range\n";
|
|
return $new_range if(!defined $range);
|
my @list=sort keys%{$params_ref};
|
my @list=sort keys%{$params_ref};
|
foreach my $param (@list){
|
foreach my $param (@list){
|
my $new_param= "$inst\_$param";
|
my $new_param= "$inst\_$param";
|
($new_range=$new_range)=~ s/\b$param\b/$new_param/g;
|
($new_range=$new_range)=~ s/\b$param\b/$new_param/g;
|
#print "$new_range= s/\b$param\b/$new_param/g\n";
|
#print "$new_range= s/\b$param\b/$new_param/g\n";
|
Line 340... |
Line 345... |
|
|
|
|
#print parameters
|
#print parameters
|
foreach my $param (@list){
|
foreach my $param (@list){
|
my $inst_param= "$inst\_$param";
|
my $inst_param= "$inst\_$param";
|
my ($deafult,$type,$content,$info,$vfile_param_type,$redefine_param)= $ip->ip_get_parameter($category,$module,$param);
|
my ($default,$type,$content,$info,$vfile_param_type,$redefine_param)= $ip->ip_get_parameter($category,$module,$param);
|
$vfile_param_type= "Don't include" if (!defined $vfile_param_type );
|
$vfile_param_type= "Don't include" if (!defined $vfile_param_type );
|
$vfile_param_type= "Parameter" if ($vfile_param_type eq 1);
|
$vfile_param_type= "Parameter" if ($vfile_param_type eq 1);
|
$vfile_param_type= "Localparam" if ($vfile_param_type eq 0);
|
$vfile_param_type= "Localparam" if ($vfile_param_type eq 0);
|
$redefine_param=1 if (! defined $redefine_param);
|
$redefine_param=1 if (! defined $redefine_param);
|
$redefine_param=0 if ($vfile_param_type eq "Don't include");
|
$redefine_param=0 if ($vfile_param_type eq "Don't include");
|
Line 603... |
Line 608... |
|
|
}
|
}
|
|
|
|
|
}
|
}
|
|
#RxD_sim
|
|
elsif( $intfc eq 'socket:RxD_sim[0]'){
|
|
#This interface is for simulation only donot include it in top module
|
|
my @ports=$top->top_get_intfc_ports_list($intfc);
|
|
foreach my $p (@ports){
|
|
$mm="$mm," if ($i);
|
|
$mm="$mm\n\t\t.$p( )";
|
|
$i=1;
|
|
}
|
|
|
|
}
|
else {
|
else {
|
#other interface
|
#other interface
|
my @ports=$top->top_get_intfc_ports_list($intfc);
|
my @ports=$top->top_get_intfc_ports_list($intfc);
|
foreach my $p (@ports){
|
foreach my $p (@ports){
|
my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
|
my($inst,$range,$type,$intfc_name,$intfc_port)= $top->top_get_port($p);
|
Line 707... |
Line 723... |
}#foreach my $instance_id
|
}#foreach my $instance_id
|
|
|
#Generate memory programming command
|
#Generate memory programming command
|
my $prog='#!/bin/sh
|
my $prog='#!/bin/sh
|
|
|
JTAG_MAIN="$PRONOC_WORK/toolchain/bin/jtag_main"
|
#JTAG_INTFC="$PRONOC_WORK/toolchain/bin/JTAG_INTFC"
|
|
source ./jtag_intfc.sh
|
|
|
';
|
';
|
|
|
|
|
foreach my $instance_id (@all_instances){
|
foreach my $instance_id (@all_instances){
|
Line 729... |
Line 746... |
$v= $soc->object_get_attribute('global_param',$JTAG_INDEX);
|
$v= $soc->object_get_attribute('global_param',$JTAG_INDEX);
|
$JTAG_INDEX = $v if (defined $v);
|
$JTAG_INDEX = $v if (defined $v);
|
|
|
my $BINFILE=$soc->soc_get_module_param_value($instance_id,'JTAG_MEM_FILE');
|
my $BINFILE=$soc->soc_get_module_param_value($instance_id,'JTAG_MEM_FILE');
|
($BINFILE)=$BINFILE=~ /"([^"]*)"/ if(defined $BINFILE);
|
($BINFILE)=$BINFILE=~ /"([^"]*)"/ if(defined $BINFILE);
|
$BINFILE=(defined $BINFILE) ? $BINFILE.'.bin' : 'ram0.bin';
|
$BINFILE=(defined $BINFILE) ? "./RAM/".$BINFILE.'.bin' : './RAM/ram0.bin';
|
|
|
my $OFSSET="0x00000000";
|
my $OFSSET="0x00000000";
|
my $end=((1 << $aw)*($dw/8))-1;
|
my $end=((1 << $aw)*($dw/8))-1;
|
my $BOUNDRY=sprintf("0x%08x", $end);
|
my $BOUNDRY=sprintf("0x%08x", $end);
|
if($jtag_connect =~ /JTAG_WB/){
|
if($jtag_connect =~ /JTAG_WB/){
|
$prog= "$prog \$JTAG_MAIN -n $JTAG_INDEX -s \"$OFSSET\" -e \"$BOUNDRY\" -i \"$BINFILE\" -c";
|
$prog= "$prog \$JTAG_INTFC -n $JTAG_INDEX -s \"$OFSSET\" -e \"$BOUNDRY\" -i \"$BINFILE\" -c";
|
#print "prog= $prog\n";
|
#print "prog= $prog\n";
|
|
|
}elsif ($jtag_connect eq 'ALTERA_IMCE'){
|
}elsif ($jtag_connect eq 'ALTERA_IMCE'){
|
#TODO add later
|
#TODO add later
|
|
|
Line 753... |
Line 770... |
#print "id=$connect_id\n";
|
#print "id=$connect_id\n";
|
my $JTAG_INDEX= $jtagwb{$connect_id}{'index'};
|
my $JTAG_INDEX= $jtagwb{$connect_id}{'index'};
|
if(defined $JTAG_INDEX){
|
if(defined $JTAG_INDEX){
|
$v= $soc->object_get_attribute('global_param',$JTAG_INDEX);
|
$v= $soc->object_get_attribute('global_param',$JTAG_INDEX);
|
$JTAG_INDEX = $v if (defined $v);
|
$JTAG_INDEX = $v if (defined $v);
|
$prog= "$prog \$JTAG_MAIN -n $JTAG_INDEX -s \"$OFSSET\" -e \"$BOUNDRY\" -i \"$BINFILE\" -c";
|
$prog= "$prog \$JTAG_INTFC -n $JTAG_INDEX -s \"$OFSSET\" -e \"$BOUNDRY\" -i \"$BINFILE\" -c";
|
#print "prog= $prog\n";
|
#print "prog= $prog\n";
|
|
|
}
|
}
|
|
|
}
|
}
|