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.pm] - Diff between revs 16 and 25

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 16 Rev 25
#! /usr/bin/perl -w
#! /usr/bin/perl -w
use strict;
use strict;
 
 
 
 
package mpsoc;
package mpsoc;
 
 
use ip_gen;
use ip_gen;
 
 
 
 
#use Clone 'clone';
#use Clone 'clone';
 
 
 
 
 
 
sub mpsoc_new {
sub mpsoc_new {
    # be backwards compatible with non-OO call
    # be backwards compatible with non-OO call
    my $class = ("ARRAY" eq ref $_[0]) ? "mpsoc" : shift;
    my $class = ("ARRAY" eq ref $_[0]) ? "mpsoc" : shift;
    my $self;
    my $self;
 
 
 
 
    $self = {};
    $self = {};
    $self->{file_name}        = (); # information on each file
    $self->{file_name}        = (); # information on each file
    $self->{noc_param}=   {};
    $self->{noc_param}=   {};
    $self->{noc_indept_param}={};
    $self->{noc_indept_param}={};
    $self->{parameters_order}=[];
   # $self->{parameters_order}=[];
 
 
    $self->{setting}={};
    $self->{setting}={};
        $self->{socs}={};
        $self->{socs}={};
        mpsoc_initial_setting($self);
        mpsoc_initial_setting($self);
 
 
 
 
    bless($self,$class);
    bless($self,$class);
 
 
 
 
    return $self;
    return $self;
}
}
 
 
sub mpsoc_initial_setting{
sub mpsoc_initial_setting{
        my $self=shift;
        my $self=shift;
        $self->{setting}{show_noc_setting}=1;
        $self->{setting}{show_noc_setting}=1;
        $self->{setting}{show_adv_setting}=0;
        $self->{setting}{show_adv_setting}=0;
        $self->{setting}{show_tile_setting}=1;
        $self->{setting}{show_tile_setting}=1;
        $self->{setting}{soc_path}="lib/soc";
        $self->{setting}{soc_path}="lib/soc";
}
}
 
 
sub mpsoc_set_setting{
 
        my ($self,$name,$value)=@_;
 
        $self->{setting}{$name}=$value;
 
 
 
}
 
 
 
sub mpsoc_get_setting{
 
        my ($self,$name)=@_;
 
        return $self->{setting}{$name};
 
 
 
}
 
 
 
 
 
sub mpsoc_set_mpsoc_name{
 
        my ($self,$name)=@_;
 
        if(defined $name){$self->{mpsoc_name}=$name;}
 
}
 
 
 
sub mpsoc_get_mpsoc_name{
 
        my ($self)=@_;
 
        my $name;
 
        if(exists  $self->{mpsoc_name}){ $name=$self->{mpsoc_name};}
 
        return $name;
 
}
 
 
 
sub mpsoc_get_indept_params{
 
        my $self=shift;
 
        return  $self->{noc_indept_param};
 
}
 
 
 
 
 
sub mpsoc_add_param{
 
        my ($self,$param,$value)=@_;
 
        $self->{noc_param}{$param}=$value;
 
 
 
}
 
 
 
sub mpsoc_get_param{
 
        my ($self,$param)=@_;
 
        return $self->{noc_param}{$param};
 
 
 
}
 
sub mpsoc_add_param_order{
 
        my ($self,@param)=@_;
 
        foreach my $p (@param){
 
                push (@{$self->{parameters_order}},$p);
 
 
 
        }
 
}
 
sub mpsoc_get_param_order{
 
        my $self=shift;
 
        return @{$self->{parameters_order}};
 
}
 
 
 
 
 
 
 
 
 
sub mpsoc_get_instance_info{
sub mpsoc_get_instance_info{
        my ($self,$ip_num)=@_;
        my ($self,$ip_num)=@_;
        return $self->{ips}{$ip_num}{name}
        return $self->{ips}{$ip_num}{name}
}
}
 
 
sub mpsoc_set_ip_inst_name{
sub mpsoc_set_ip_inst_name{
        my ($self,$ip_num,$new_instance)=@_;
        my ($self,$ip_num,$new_instance)=@_;
        $self->{ips}{$ip_num}{name}=$new_instance;
        $self->{ips}{$ip_num}{name}=$new_instance;
 
 
}
}
 
 
sub mpsoc_get_soc_list{
sub mpsoc_get_soc_list{
        my $self=shift;
        my $self=shift;
        my @list;
        my @list;
        foreach my $p (sort keys %{$self->{socs}}){
        foreach my $p (sort keys %{$self->{socs}}){
                push(@list,$p);
                push(@list,$p);
        }
        }
        return @list;
        return @list;
}
}
 
 
 
 
 
 
 
 
 
 
sub mpsoc_add_soc{
sub mpsoc_add_soc{
        my ($self,$name,$soc)=@_;
        my ($self,$name,$soc)=@_;
        $self->{socs}{$name}{top}=$soc;
        $self->{socs}{$name}{top}=$soc;
 
 
}
}
 
 
 
 
 
 
 
 
sub mpsoc_get_soc{
sub mpsoc_get_soc{
        my ($self,$name)=@_;
        my ($self,$name)=@_;
        return $self->{socs}{$name}{top};
        return $self->{socs}{$name}{top};
 
 
}
}
 
 
 
 
sub mpsoc_remove_soc{
sub mpsoc_remove_soc{
        my ($self,$name)=@_;
        my ($self,$name)=@_;
        delete $self->{socs}{$name};
        delete $self->{socs}{$name};
}
}
 
 
sub mpsoc_remove_all_soc{
sub mpsoc_remove_all_soc{
        my ($self)=@_;
        my ($self)=@_;
        delete $self->{socs};
        delete $self->{socs};
}
}
 
 
 
 
 
 
sub mpsoc_add_soc_tiles_num{
sub mpsoc_add_soc_tiles_num{
        my ($self,$name,$nums) =@_;
        my ($self,$name,$nums) =@_;
        if(defined $nums){
        if(defined $nums){
                my @f=sort { $a <=> $b } @{$nums};
                my @f=sort { $a <=> $b } @{$nums};
                if( exists $self->{socs}{$name}){
                if( exists $self->{socs}{$name}){
                        $self->{socs}{$name}{tile_nums}=\@f;
                        $self->{socs}{$name}{tile_nums}=\@f;
 
 
                }
                }
        }else {
        }else {
                $self->{socs}{$name}{tile_nums}=undef;
                $self->{socs}{$name}{tile_nums}=undef;
 
 
        }
        }
}
}
 
 
sub mpsoc_get_soc_tiles_num{
sub mpsoc_get_soc_tiles_num{
        my ($self,$name) =@_;
        my ($self,$name) =@_;
        my @nums;
        my @nums;
        if( defined $self->{socs}{$name}{tile_nums}){
        if( defined $self->{socs}{$name}{tile_nums}){
                @nums = @{$self->{socs}{$name}{tile_nums}};
                @nums = @{$self->{socs}{$name}{tile_nums}};
 
 
        }
        }
        return @ nums;
        return @ nums;
}
}
 
 
sub mpsoc_get_scolar_pos{
sub mpsoc_get_scolar_pos{
        my ($item,@list)=@_;
        my ($item,@list)=@_;
        my $pos;
        my $pos;
        my $i=0;
        my $i=0;
        foreach my $c (@list)
        foreach my $c (@list)
        {
        {
                if(  $c eq $item) {$pos=$i}
                if(  $c eq $item) {$pos=$i}
                $i++;
                $i++;
        }
        }
        return $pos;
        return $pos;
}
}
 
 
sub mpsoc_get_tile_soc_name{
sub mpsoc_get_tile_soc_name{
        my ($self,$tile)=@_;
        my ($self,$tile)=@_;
        my @all_socs=mpsoc_get_soc_list($self);
        my @all_socs=mpsoc_get_soc_list($self);
        my $soc_num=0;
        my $soc_num=0;
        my $p;
        my $p;
        foreach $p( @all_socs){
        foreach $p( @all_socs){
                my @tiles=mpsoc_get_soc_tiles_num ($self,$p);
                my @tiles=mpsoc_get_soc_tiles_num ($self,$p);
                if ( grep( /^$tile$/, @tiles ) ){
                if ( grep( /^$tile$/, @tiles ) ){
                            my $num =mpsoc_get_scolar_pos($tile,@tiles);
                            my $num =mpsoc_get_scolar_pos($tile,@tiles);
 
 
                                return ($p,$soc_num,$num);
                                return ($p,$soc_num,$num);
                }
                }
                $soc_num++;
                $soc_num++;
 
 
        }
        }
        return ($p,$soc_num,undef);
        return ($p,$soc_num,undef);
 
 
}
}
 
 
sub mpsoc_remove_scolar_from_array{
sub mpsoc_remove_scolar_from_array{
        my ($array_ref,$item)=@_;
        my ($array_ref,$item)=@_;
        my @array=@{$array_ref};
        my @array=@{$array_ref};
        my @new;
        my @new;
        foreach my $p (@array){
        foreach my $p (@array){
                if($p ne $item ){
                if($p ne $item ){
                        push(@new,$p);
                        push(@new,$p);
                }
                }
        }
        }
        return @new;
        return @new;
}
}
 
 
sub mpsoc_set_tile_free{
sub mpsoc_set_tile_free{
        my ($self,$tile)=@_;
        my ($self,$tile)=@_;
        #
        #
        mpsoc_set_tile_param_setting($self, $tile, 'Default');
        mpsoc_set_tile_param_setting($self, $tile, 'Default');
        my @all_socs=mpsoc_get_soc_list($self);
        my @all_socs=mpsoc_get_soc_list($self);
        my $soc_num=0;
        my $soc_num=0;
        my $p;
        my $p;
        foreach $p( @all_socs){
        foreach $p( @all_socs){
                my @tiles=mpsoc_get_soc_tiles_num ($self,$p);
                my @tiles=mpsoc_get_soc_tiles_num ($self,$p);
                my @n=mpsoc_remove_scolar_from_array(\@tiles,$tile);
                my @n=mpsoc_remove_scolar_from_array(\@tiles,$tile);
                mpsoc_add_soc_tiles_num($self,$p,\@n);
                mpsoc_add_soc_tiles_num($self,$p,\@n);
 
 
        }
        }
 
 
}
}
 
 
sub mpsoc_set_tile_soc_name{
sub mpsoc_set_tile_soc_name{
        my ($self,$tile,$new_soc)=@_;
        my ($self,$tile,$new_soc)=@_;
        mpsoc_set_tile_free($self,$tile);
        mpsoc_set_tile_free($self,$tile);
        my @tiles=mpsoc_get_soc_tiles_num ($self,$new_soc);
        my @tiles=mpsoc_get_soc_tiles_num ($self,$new_soc);
        push(@tiles,$tile);
        push(@tiles,$tile);
        mpsoc_add_soc_tiles_num($self,$new_soc,\@tiles);
        mpsoc_add_soc_tiles_num($self,$new_soc,\@tiles);
 
 
 
 
}
}
 
 
sub mpsoc_set_tile_param_setting{
sub mpsoc_set_tile_param_setting{
        my ($self,$tile,$setting)=@_;
        my ($self,$tile,$setting)=@_;
        $self->{tile}{$tile}{param_setting}=$setting;
        $self->{tile}{$tile}{param_setting}=$setting;
 
 
}
}
 
 
sub mpsoc_get_tile_param_setting{
sub mpsoc_get_tile_param_setting{
        my ($self,$tile)=@_;
        my ($self,$tile)=@_;
        my $setting='Default';
        my $setting='Default';
        if(exists $self->{tile}{$tile}{param_setting}){
        if(exists $self->{tile}{$tile}{param_setting}){
                $setting=$self->{tile}{$tile}{param_setting};
                $setting=$self->{tile}{$tile}{param_setting};
 
 
        }
        }
        return $setting;
        return $setting;
}
}
 
 
 
 
 
 
 
sub object_add_attribute{
 
        my ($self,$attribute1,$attribute2,$value)=@_;
 
        if(!defined $attribute2){$self->{$attribute1}=$value;}
 
        else {$self->{$attribute1}{$attribute2}=$value;}
 
 
 
}
 
 
 
 
 
 
 
sub object_get_attribute{
 
        my ($self,$attribute1,$attribute2)=@_;
 
        if(!defined $attribute2) {return $self->{$attribute1};}
 
        return $self->{$attribute1}{$attribute2};
 
 
 
 
 
}
 
 
 
 
 
sub object_add_attribute_order{
 
        my ($self,$attribute,@param)=@_;
 
        $self->{'parameters_order'}{$attribute}=[] if (!defined $self->{parameters_order}{$attribute});
 
        foreach my $p (@param){
 
                push (@{$self->{parameters_order}{$attribute}},$p);
 
 
 
        }
 
}
 
sub object_get_attribute_order{
 
        my ($self,$attribute)=@_;
 
        return @{$self->{parameters_order}{$attribute}};
 
}
 
 
 
 
 
 
1
1
 
 
 
 

powered by: WebSVN 2.1.0

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