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 48

Compare with Previous | Blame | View Log

#! /usr/bin/perl -w
use strict;
use FindBin;
use lib $FindBin::Bin;
 
package mpsoc;
 
use ip_gen;
 
 
#use Clone 'clone';
 
sub uniq {
  my %seen;
  return grep { !$seen{$_}++ } @_;
}
 
 
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_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_soc_top{
	my ($self,$name)=@_;
	delete $self->{socs}{$name}{top};		
}
 
 
sub mpsoc_remove_all_soc_tops{
	my $self=shift;
	foreach my $name (sort keys %{$self->{socs}}){
		delete $self->{socs}{$name}{top};
	}			
}
 
 
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;
}	
 
 
 
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)=@_;
	my $r = $self->{'parameters_order'}{$attribute};
	my @a;
	@a = @{$r} if(defined $r);
	push (@a,@param);
	@a=uniq(@a);	
	$self->{'parameters_order'}{$attribute} =\@a;
}
 
sub object_get_attribute_order{
	my ($self,$attribute)=@_;
	return @{$self->{parameters_order}{$attribute}};
}
 
sub object_remove_attribute{
	my ($self,$attribute1,$attribute2)=@_;
	if(!defined $attribute2){
		delete $self->{$attribute1} if ( exists( $self->{$attribute1})); 
	}
	else {
		delete $self->{$attribute1}{$attribute2} if ( exists( $self->{$attribute1}{$attribute2})); ;
 
	}
 
}
 
 
 
 
1
 
 

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.