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] - Rev 16

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

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

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

powered by: WebSVN 2.1.0

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