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] - Diff between revs 32 and 34

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

Rev 32 Rev 34
Line 10... Line 10...
use rvp;
use rvp;
 
 
 
 
 
 
sub mpsoc_generate_verilog{
sub mpsoc_generate_verilog{
        my $mpsoc=shift;
        my ($mpsoc,$sw_dir)=@_;
        my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name');
        my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name');
 
        my $top_ip=ip_gen->top_gen_new();
        my $io_v="\tclk,\n\treset";
        my $io_v="\tclk,\n\treset";
 
 
 
 
 
 
 
        #$top_ip->top_add_port($inst,$port,$range,$type,$intfc_name,$intfc_port);
 
        $top_ip->top_add_port('IO','reset','', 'input' ,'plug:reset[0]','reset_i');
 
        $top_ip->top_add_port('IO','clk','', 'input' ,'plug:clk[0]','clk_i');
 
 
        my $io_def_v="
        my $io_def_v="
//IO
//IO
\tinput\tclk,reset;\n";
\tinput\tclk,reset;\n";
        my $param_as_in_v;
        my $param_as_in_v;
        # generate top 
        # generate top 
Line 31... Line 39...
 
 
        #generate the noc
        #generate the noc
        my $noc_v=gen_noc_v($pass_param);
        my $noc_v=gen_noc_v($pass_param);
 
 
        #generate socs
        #generate socs
        my $socs_v=gen_socs_v($mpsoc,\$io_v,\$io_def_v,\$top_io);
        my $socs_v=gen_socs_v($mpsoc,\$io_v,\$io_def_v,\$top_io,$top_ip,$sw_dir);
 
 
        #functions
        #functions
        my $functions=get_functions();
        my $functions=get_functions();
 
 
        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";
        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";
 
        add_text_to_string (\$mpsoc_v,$noc_param);
        add_text_to_string (\$mpsoc_v,$functions);
        add_text_to_string (\$mpsoc_v,$functions);
        add_text_to_string (\$mpsoc_v,$socs_param);
        add_text_to_string (\$mpsoc_v,$socs_param);
        add_text_to_string (\$mpsoc_v,$noc_param);
 
        add_text_to_string (\$mpsoc_v,$io_def_v);
        add_text_to_string (\$mpsoc_v,$io_def_v);
        add_text_to_string (\$mpsoc_v,$noc_v);
        add_text_to_string (\$mpsoc_v,$noc_v);
        add_text_to_string (\$mpsoc_v,$socs_v);
        add_text_to_string (\$mpsoc_v,$socs_v);
        add_text_to_string (\$mpsoc_v,"\nendmodule\n");
        add_text_to_string (\$mpsoc_v,"\nendmodule\n");
 
 
Line 78... Line 87...
 
 
        #my $ins= gen_mpsoc_instance_v($mpsoc,$mpsoc_name,$param_pass_v);
        #my $ins= gen_mpsoc_instance_v($mpsoc,$mpsoc_name,$param_pass_v);
 
 
        #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_full_v_all);
        #add_text_to_string(\$top_v,$ins);
        #add_text_to_string(\$top_v,$ins);
 
        $mpsoc->object_add_attribute('top_ip',undef,$top_ip);
        return ($mpsoc_v,$top_v);
        return ($mpsoc_v,$top_v);
}
}
 
 
sub get_functions{
sub get_functions{
        my $p='
        my $p='
Line 260... Line 270...
 
 
 
 
sub gen_noc_v{
sub gen_noc_v{
        my $pass_param = shift;
        my $pass_param = shift;
 
 
        my $noc =  read_file("../src_noc/noc.v");
        my $noc =  read_verilog_file("../src_noc/noc.v");
        my @noc_param=$noc->get_modules_parameters_not_local_order('noc');
        my @noc_param=$noc->get_modules_parameters_not_local_order('noc');
 
 
 
 
        my $noc_v='
        my $noc_v='
 
 
Line 378... Line 388...
 
 
 
 
 
 
 
 
sub gen_socs_v{
sub gen_socs_v{
        my ($mpsoc,$io_v_ref,$io_def_v,$top_io_ref)=@_;
        my ($mpsoc,$io_v_ref,$io_def_v,$top_io_ref,$top_ip,$sw_dir)=@_;
 
 
        #generate loop
        #generate loop
 
 
#       my $socs_v='
#       my $socs_v='
#       genvar x,y;    
#       genvar x,y;    
Line 438... Line 448...
 
 
                        if(defined $soc_name) {
                        if(defined $soc_name) {
 
 
 
 
 
 
                                my ($soc_v,$en)= gen_soc_v($mpsoc,$soc_name,$tile_num,$x,$y,$soc_num,$io_v_ref,$io_def_v,$top_io_ref);
                                my ($soc_v,$en)= gen_soc_v($mpsoc,$soc_name,$tile_num,$x,$y,$soc_num,$io_v_ref,$io_def_v,$top_io_ref,$top_ip,$sw_dir);
                                add_text_to_string(\$socs_v,$soc_v);
                                add_text_to_string(\$socs_v,$soc_v);
                                $processors_en|=$en;
                                $processors_en|=$en;
 
 
                        }else{
                        }else{
                                #this tile is not connected to any ip. the noc input ports will be connected to ground
                                #this tile is not connected to any ip. the noc input ports will be connected to ground
Line 461... Line 471...
 
 
    if($processors_en){
    if($processors_en){
        add_text_to_string($io_v_ref,",\n\tprocessors_en");
        add_text_to_string($io_v_ref,",\n\tprocessors_en");
        add_text_to_string($io_def_v,"\t input processors_en;");
        add_text_to_string($io_def_v,"\t input processors_en;");
        add_text_to_string($top_io_ref,",\n\t\t.processors_en(processors_en_anded_jtag)");
        add_text_to_string($top_io_ref,",\n\t\t.processors_en(processors_en_anded_jtag)");
 
        $top_ip->top_add_port('IO','processors_en','' ,'input','plug:enable[0]','enable_i');
 
 
    }
    }
 
 
 
 
        return $socs_v;
        return $socs_v;
Line 476... Line 487...
##############
##############
 
 
 
 
 
 
sub   gen_soc_v{
sub   gen_soc_v{
        my ($mpsoc,$soc_name,$tile_num,$x,$y,$soc_num,$io_v_ref,$io_def_v,$top_io_ref)=@_;
        my ($mpsoc,$soc_name,$tile_num,$x,$y,$soc_num,$io_v_ref,$io_def_v,$top_io_ref,$top_ip,$sw_path)=@_;
        my $soc_v;
        my $soc_v;
        my $processor_en=0;
        my $processor_en=0;
        my $xw= log2($mpsoc->object_get_attribute('noc_param',"NX"));
        my $xw= log2($mpsoc->object_get_attribute('noc_param',"NX"));
        my $yw= log2($mpsoc->object_get_attribute('noc_param',"NY"));
        my $yw= log2($mpsoc->object_get_attribute('noc_param',"NY"));
        $soc_v="\n\n // Tile:$tile_num (x=$x,y=$y)\n   \t$soc_name #(\n";
        $soc_v="\n\n // Tile:$tile_num (x=$x,y=$y)\n   \t$soc_name #(\n";
 
 
        # core id
        # Global parameter
        add_text_to_string(\$soc_v,"\t\t.CORE_ID($tile_num)");
        add_text_to_string(\$soc_v,"\t\t.CORE_ID($tile_num),\n\t\t.SW_LOC(\"$sw_path/tile$tile_num\")");
 
 
        # ni parameter
        # ni parameter
        my $top=$mpsoc->mpsoc_get_soc($soc_name);
        my $top=$mpsoc->mpsoc_get_soc($soc_name);
        my @nis=get_NI_instance_list($top);
        my @nis=get_NI_instance_list($top);
        my @noc_param=$top->top_get_parameter_list($nis[0]);
        my @noc_param=$top->top_get_parameter_list($nis[0]);
Line 519... Line 530...
        my $dir = Cwd::getcwd();
        my $dir = Cwd::getcwd();
        my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name');
        my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name');
        my $target_dir  = "$ENV{'PRONOC_WORK'}/MPSOC/$mpsoc_name";
        my $target_dir  = "$ENV{'PRONOC_WORK'}/MPSOC/$mpsoc_name";
        my $soc_file="$target_dir/src_verilog/tiles/$soc_name.v";
        my $soc_file="$target_dir/src_verilog/tiles/$soc_name.v";
 
 
        my $vdb =read_file($soc_file);
        my $vdb =read_verilog_file($soc_file);
 
 
        my %soc_localparam = $vdb->get_modules_parameters($soc_name);
        my %soc_localparam = $vdb->get_modules_parameters($soc_name);
 
 
 
 
        foreach my $intfc (@intfcs){
        foreach my $intfc (@intfcs){
Line 605... Line 616...
                        add_text_to_string($top_io_ref,",\n\t\t.$io_port($io_port)");
                        add_text_to_string($top_io_ref,",\n\t\t.$io_port($io_port)");
                        #io definition
                        #io definition
                        my $new_range = add_instantc_name_to_parameters(\%params,"${soc_name}_$soc_num",$range);
                        my $new_range = add_instantc_name_to_parameters(\%params,"${soc_name}_$soc_num",$range);
                        #my $new_range=$range;
                        #my $new_range=$range;
                        my $port_def=(length ($range)>1 )?      "\t$type\t [ $new_range    ] $io_port;\n": "\t$type\t\t\t$io_port;\n";
                        my $port_def=(length ($range)>1 )?      "\t$type\t [ $new_range    ] $io_port;\n": "\t$type\t\t\t$io_port;\n";
 
                        $top_ip->top_add_port("${soc_name}_$tile_num" ,$io_port, $new_range ,$type,$intfc_name,$intfc_port);
 
 
                        add_text_to_string($io_def_v,"$port_def");
                        add_text_to_string($io_def_v,"$port_def");
                        add_text_to_string(\$soc_v,',') if ($i);
                        add_text_to_string(\$soc_v,',') if ($i);
                        add_text_to_string(\$soc_v,"\n\t\t.$p($io_port)");
                        add_text_to_string(\$soc_v,"\n\t\t.$p($io_port)");
                        $i=1;
                        $i=1;

powered by: WebSVN 2.1.0

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