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/] [verilog_gen.pl] - Diff between revs 34 and 38

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 34 Rev 38
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";
 
 
                                                }
                                                }
 
 
                                }
                                }

powered by: WebSVN 2.1.0

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