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/] [interface.pm] - Diff between revs 17 and 18

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

Rev 17 Rev 18
#!/usr/bin/perl -w -I ..
#!/usr/bin/perl -w -I ..
###############################################################################
###############################################################################
#
#
# File:         interface.pm
# File:         interface.pm
# 
# 
#
#
###############################################################################
###############################################################################
use warnings;
use warnings;
use strict;
use strict;
use intfc_gen;
use intfc_gen;
use Data::Dumper;
use Data::Dumper;
 
 
use Cwd;
use Cwd;
 
 
 
 
 
 
package interface;
package interface;
 
 
 
 
 
 
 
 
 
 
sub interface_new {
sub interface_new {
    # be backwards compatible with non-OO call
    # be backwards compatible with non-OO call
    my $class = ("ARRAY" eq ref $_[0]) ? "interface" : shift;
    my $class = ("ARRAY" eq ref $_[0]) ? "interface" : shift;
    my $self;
    my $self;
 
 
 
 
    $self = {};
    $self = {};
    $self->{plugs}        = {};
    $self->{plugs}        = {};
    $self->{sockets}      = {};
    $self->{sockets}      = {};
    $self->{categories}   = {};
    $self->{categories}   = {};
 
 
 
 
        my $dir = Cwd::getcwd();
        my $dir = Cwd::getcwd();
 
        $dir =~ s/ /\\ /g;
        my @files = glob "$dir/lib/interface/*.ITC";
        my @files = glob "$dir/lib/interface/*.ITC";
        for my $p (@files){
        for my $p (@files){
                #print "$p\n"; 
                #print "$p\n"; 
                #my $infc_gen = Storable::retrieve($p);
                #my $infc_gen = Storable::retrieve($p);
        # Read
        # Read
        my  $infc_gen;
        my  $infc_gen;
        $infc_gen = eval { do $p };
        $infc_gen = eval { do $p };
        # Might need "no strict;" before and "use strict;" after "do"
        # Might need "no strict;" before and "use strict;" after "do"
        die "Error reading: $@" if $@;
        die "Error reading: $@" if $@;
 
 
        add_intfc($self,$infc_gen);
        add_intfc($self,$infc_gen);
        }
        }
 
 
 
 
    bless($self,$class);
    bless($self,$class);
 
 
 
 
    return $self;
    return $self;
}
}
 
 
 
 
sub add_category{
sub add_category{
        my ($self,$category,$intfc_name,$info)=@_;
        my ($self,$category,$intfc_name,$info)=@_;
        $self->{categories}{$category}{names}{$intfc_name}{info}=$info;
        $self->{categories}{$category}{names}{$intfc_name}{info}=$info;
 
 
}
}
 
 
sub get_description{
sub get_description{
        my ($self,$category,$name)=@_;
        my ($self,$category,$name)=@_;
        my $info;
        my $info;
        if(exists ($self->{categories}{$category}{names}{$name})){
        if(exists ($self->{categories}{$category}{names}{$name})){
                $info= $self->{categories}{$category}{names}{$name}{info};
                $info= $self->{categories}{$category}{names}{$name}{info};
        }
        }
        return $info;
        return $info;
}
}
 
 
 
 
sub add_plug{
sub add_plug{
                my($self,$plug,$info,$category,$connection_num,$connect_to)=@_;
                my($self,$plug,$info,$category,$connection_num,$connect_to)=@_;
                $self->{plugs}{$plug}={};
                $self->{plugs}{$plug}={};
                $self->{plugs}{$plug}{connection_num}=$connection_num;
                $self->{plugs}{$plug}{connection_num}=$connection_num;
                $self->{plugs}{$plug}{connect_to}=$connect_to;
                $self->{plugs}{$plug}{connect_to}=$connect_to;
                $self->{plugs}{$plug}{info}=$info;
                $self->{plugs}{$plug}{info}=$info;
                $self->{plugs}{$plug}{category}=$category;
                $self->{plugs}{$plug}{category}=$category;
}
}
 
 
sub get_plug{
sub get_plug{
                my($self,$plug)=@_;
                my($self,$plug)=@_;
                my ($connection_num,$connect_to,$info,$category);
                my ($connection_num,$connect_to,$info,$category);
                if(exists ($self->{plugs}{$plug})){
                if(exists ($self->{plugs}{$plug})){
                        $connection_num =$self->{plugs}{$plug}{connection_num};
                        $connection_num =$self->{plugs}{$plug}{connection_num};
                        $connect_to             =$self->{plugs}{$plug}{connect_to};
                        $connect_to             =$self->{plugs}{$plug}{connect_to};
                        $info                   =$self->{plugs}{$plug}{info};
                        $info                   =$self->{plugs}{$plug}{info};
                        $category               =$self->{plugs}{$plug}{category};
                        $category               =$self->{plugs}{$plug}{category};
 
 
                }
                }
                return ($connection_num,$connect_to,$info,$category);
                return ($connection_num,$connect_to,$info,$category);
}
}
 
 
 
 
 
 
sub add_socket{
sub add_socket{
                my($self,$socket,$info,$category,$connection_num,$connect_to)=@_;
                my($self,$socket,$info,$category,$connection_num,$connect_to)=@_;
                $self->{sockets}{$socket}={};
                $self->{sockets}{$socket}={};
                $self->{sockets}{$socket}{connection_num}=$connection_num;
                $self->{sockets}{$socket}{connection_num}=$connection_num;
                $self->{sockets}{$socket}{connect_to}=$connect_to;
                $self->{sockets}{$socket}{connect_to}=$connect_to;
                $self->{sockets}{$socket}{info}=$info;
                $self->{sockets}{$socket}{info}=$info;
                $self->{sockets}{$socket}{category}=$category;
                $self->{sockets}{$socket}{category}=$category;
}
}
 
 
 
 
sub get_socket{
sub get_socket{
                my($self,$socket)=@_;
                my($self,$socket)=@_;
                my ($connection_num,$connect_to,$info,$category);
                my ($connection_num,$connect_to,$info,$category);
                if(exists ($self->{sockets}{$socket})){
                if(exists ($self->{sockets}{$socket})){
                        $connection_num =$self->{sockets}{$socket}{connection_num};
                        $connection_num =$self->{sockets}{$socket}{connection_num};
                        $connect_to             =$self->{sockets}{$socket}{connect_to};
                        $connect_to             =$self->{sockets}{$socket}{connect_to};
                        $info                   =$self->{sockets}{$socket}{info};
                        $info                   =$self->{sockets}{$socket}{info};
                        $category               =$self->{sockets}{$socket}{category}=$category;
                        $category               =$self->{sockets}{$socket}{category}=$category;
                }
                }
                return ($connection_num,$connect_to,$info,$category);
                return ($connection_num,$connect_to,$info,$category);
}
}
 
 
 
 
sub add_param_to_plug{
sub add_param_to_plug{
                my($self,$interface,$param,$value)=@_;
                my($self,$interface,$param,$value)=@_;
                $self->{plugs}{$interface}{parameters}{$param}=$value;
                $self->{plugs}{$interface}{parameters}{$param}=$value;
 
 
}
}
 
 
 
 
sub add_param_to_socket{
sub add_param_to_socket{
                my($self,$interface,$param,$value)=@_;
                my($self,$interface,$param,$value)=@_;
                $self->{sockets}{$interface}{parameters}{$param}=$value;
                $self->{sockets}{$interface}{parameters}{$param}=$value;
 
 
}
}
 
 
 
 
 
 
sub add_port_to_plug{
sub add_port_to_plug{
        my($self,$interface,$port,$range,$type,$outport_type,$connect,$default_out)=@_;
        my($self,$interface,$port,$range,$type,$outport_type,$connect,$default_out)=@_;
        $self->{plugs}{$interface}{ports}{$port}={};
        $self->{plugs}{$interface}{ports}{$port}={};
        $self->{plugs}{$interface}{ports}{$port}{range}=$range;
        $self->{plugs}{$interface}{ports}{$port}{range}=$range;
        $self->{plugs}{$interface}{ports}{$port}{type}=$type;
        $self->{plugs}{$interface}{ports}{$port}{type}=$type;
        $self->{plugs}{$interface}{ports}{$port}{outport_type}=$outport_type;
        $self->{plugs}{$interface}{ports}{$port}{outport_type}=$outport_type;
        $self->{plugs}{$interface}{ports}{$port}{connect}=$connect;
        $self->{plugs}{$interface}{ports}{$port}{connect}=$connect;
        $self->{plugs}{$interface}{ports}{$port}{default_out}=$default_out;
        $self->{plugs}{$interface}{ports}{$port}{default_out}=$default_out;
 
 
}
}
 
 
 
 
sub get_port_info_of_socket{
sub get_port_info_of_socket{
        my($self,$socket,$port)=@_;
        my($self,$socket,$port)=@_;
        my($range,$type,$connect,$default_out);
        my($range,$type,$connect,$default_out);
        if(exists ($self->{sockets}{$socket}{ports}{$port})){
        if(exists ($self->{sockets}{$socket}{ports}{$port})){
                $range=$self->{sockets}{$socket}{ports}{$port}{range};
                $range=$self->{sockets}{$socket}{ports}{$port}{range};
                $type=$self->{sockets}{$socket}{ports}{$port}{type};
                $type=$self->{sockets}{$socket}{ports}{$port}{type};
                $connect=$self->{sockets}{$socket}{ports}{$port}{connect};
                $connect=$self->{sockets}{$socket}{ports}{$port}{connect};
                $default_out=$self->{sockets}{$socket}{ports}{$port}{default_out};
                $default_out=$self->{sockets}{$socket}{ports}{$port}{default_out};
        }
        }
        return ($range,$type,$connect,$default_out);
        return ($range,$type,$connect,$default_out);
}
}
 
 
sub get_port_info_of_plug{
sub get_port_info_of_plug{
        my($self,$plug,$port)=@_;
        my($self,$plug,$port)=@_;
        my($range,$type,$connect,$default_out);
        my($range,$type,$connect,$default_out);
        if(exists ($self->{plugs}{$plug}{ports}{$port})){
        if(exists ($self->{plugs}{$plug}{ports}{$port})){
                $range=$self->{plugs}{$plug}{ports}{$port}{range};
                $range=$self->{plugs}{$plug}{ports}{$port}{range};
                $type=$self->{plugs}{$plug}{ports}{$port}{type};
                $type=$self->{plugs}{$plug}{ports}{$port}{type};
                $connect=$self->{plugs}{$plug}{ports}{$port}{connect};
                $connect=$self->{plugs}{$plug}{ports}{$port}{connect};
                $default_out=$self->{plugs}{$plug}{ports}{$port}{default_out};
                $default_out=$self->{plugs}{$plug}{ports}{$port}{default_out};
 
 
        }
        }
        return ($range,$type,$connect,$default_out);
        return ($range,$type,$connect,$default_out);
}
}
 
 
 
 
sub add_port_to_socket{
sub add_port_to_socket{
        my($self,$socket,$port,$range,$type,$outport_type,$connect,$default_out)=@_;
        my($self,$socket,$port,$range,$type,$outport_type,$connect,$default_out)=@_;
        $self->{sockets}{$socket}{ports}{$port}={};
        $self->{sockets}{$socket}{ports}{$port}={};
        $self->{sockets}{$socket}{ports}{$port}{range}=$range;
        $self->{sockets}{$socket}{ports}{$port}{range}=$range;
        $self->{sockets}{$socket}{ports}{$port}{type}=$type;
        $self->{sockets}{$socket}{ports}{$port}{type}=$type;
        $self->{sockets}{$socket}{ports}{$port}{outport_type}=$outport_type;
        $self->{sockets}{$socket}{ports}{$port}{outport_type}=$outport_type;
        $self->{sockets}{$socket}{ports}{$port}{connect}=$connect;
        $self->{sockets}{$socket}{ports}{$port}{connect}=$connect;
        $self->{sockets}{$socket}{ports}{$port}{default_out}=$default_out;
        $self->{sockets}{$socket}{ports}{$port}{default_out}=$default_out;
 
 
}
}
 
 
 
 
sub get_socket_port_list{
sub get_socket_port_list{
        my($self,$socket)=@_;
        my($self,$socket)=@_;
        my @ports;
        my @ports;
        if(exists ($self->{sockets}{$socket}{ports})){
        if(exists ($self->{sockets}{$socket}{ports})){
                foreach my $p(keys %{$self->{sockets}{$socket}{ports}}){
                foreach my $p(keys %{$self->{sockets}{$socket}{ports}}){
                        push (@ports,$p);
                        push (@ports,$p);
                }
                }
        }
        }
        return @ports;
        return @ports;
}
}
 
 
sub get_plug_port_list{
sub get_plug_port_list{
        my($self,$plug)=@_;
        my($self,$plug)=@_;
        my @ports;
        my @ports;
        if(exists ($self->{plugs}{$plug}{ports})){
        if(exists ($self->{plugs}{$plug}{ports})){
                foreach my $p(keys %{$self->{plugs}{$plug}{ports}}){
                foreach my $p(keys %{$self->{plugs}{$plug}{ports}}){
                        push (@ports,$p);
                        push (@ports,$p);
                }
                }
        }
        }
        return @ports;
        return @ports;
}
}
 
 
 
 
 
 
sub get_interfaces{
sub get_interfaces{
        my $self=shift;
        my $self=shift;
        my @interfaces;
        my @interfaces;
        if(exists ($self->{plugs})){
        if(exists ($self->{plugs})){
                foreach my $p (sort keys %{$self->{plugs}}){
                foreach my $p (sort keys %{$self->{plugs}}){
                        push (@interfaces,$p);
                        push (@interfaces,$p);
                }
                }
        }
        }
        return @interfaces;
        return @interfaces;
 
 
 
 
}
}
 
 
sub get_categories{
sub get_categories{
        my $self=shift;
        my $self=shift;
        my @categories;
        my @categories;
        if(exists ($self->{categories})){
        if(exists ($self->{categories})){
                foreach my $p (sort keys %{$self->{categories}}){
                foreach my $p (sort keys %{$self->{categories}}){
                        push (@categories,$p);
                        push (@categories,$p);
                }
                }
        }
        }
        return @categories;
        return @categories;
 
 
}
}
 
 
sub get_intfcs_of_category{
sub get_intfcs_of_category{
        my ($self,$category)=@_;
        my ($self,$category)=@_;
        my @list;
        my @list;
        if(exists ($self->{categories}{$category}{names})){
        if(exists ($self->{categories}{$category}{names})){
                foreach my $p (sort keys %{$self->{categories}{$category}{names}}){
                foreach my $p (sort keys %{$self->{categories}{$category}{names}}){
                        push (@list,$p);
                        push (@list,$p);
                }
                }
 
 
        }
        }
        return @list;
        return @list;
}
}
 
 
 
 
sub add_intfc{
sub add_intfc{
 
 
        my ($self,$infc_gen) =@_;
        my ($self,$infc_gen) =@_;
 
 
        my $intfc_name=$infc_gen->intfc_get_interface_name();
        my $intfc_name=$infc_gen->intfc_get_interface_name();
        my $connection_num=$infc_gen->intfc_get_connection_num();
        my $connection_num=$infc_gen->intfc_get_connection_num();
        my $intfc_type=$infc_gen->intfc_get_interface_type();
        my $intfc_type=$infc_gen->intfc_get_interface_type();
        my $intfc_info=$infc_gen->intfc_get_description();
        my $intfc_info=$infc_gen->intfc_get_description();
        my $intfc_category=$infc_gen->intfc_get_category();
        my $intfc_category=$infc_gen->intfc_get_category();
 
 
 
 
        my(%types,%ranges,%names,%connect_types,%connect_ranges,%connect_names,%outport_types,%default_outs);
        my(%types,%ranges,%names,%connect_types,%connect_ranges,%connect_names,%outport_types,%default_outs);
 
 
 
 
        add_socket($self,$intfc_name,$intfc_info,$intfc_category,$connection_num,$intfc_name);
        add_socket($self,$intfc_name,$intfc_info,$intfc_category,$connection_num,$intfc_name);
        add_plug($self,$intfc_name,$intfc_info,$intfc_category,$connection_num,$intfc_name);
        add_plug($self,$intfc_name,$intfc_info,$intfc_category,$connection_num,$intfc_name);
 
 
        add_category($self,$intfc_category,$intfc_name,$intfc_info);
        add_category($self,$intfc_category,$intfc_name,$intfc_info);
 
 
 
 
        $infc_gen->intfc_get_ports(\%types,\%ranges,\%names,\%connect_types,\%connect_ranges,\%connect_names,\%outport_types,\%default_outs);
        $infc_gen->intfc_get_ports(\%types,\%ranges,\%names,\%connect_types,\%connect_ranges,\%connect_names,\%outport_types,\%default_outs);
        foreach my $id (sort keys %ranges){
        foreach my $id (sort keys %ranges){
                        my $type=$types{$id};
                        my $type=$types{$id};
                        my $range=$ranges{$id};
                        my $range=$ranges{$id};
                        my $name=$names{$id};
                        my $name=$names{$id};
                        my $connect_type=$connect_types{$id};
                        my $connect_type=$connect_types{$id};
                        my $connect_range=$connect_ranges{$id};
                        my $connect_range=$connect_ranges{$id};
                        my $connect_name=$connect_names{$id};
                        my $connect_name=$connect_names{$id};
                        my $outport_type=$outport_types{$id};
                        my $outport_type=$outport_types{$id};
                        my $default_out=$default_outs{$id};
                        my $default_out=$default_outs{$id};
                        if($intfc_type eq 'plug'){
                        if($intfc_type eq 'plug'){
 
 
                                 #my($self,$interface,$port,$range,$type,$outport_type)
                                 #my($self,$interface,$port,$range,$type,$outport_type)
                                add_port_to_plug        ($self,$intfc_name,$name,$range,$type,$outport_type,$connect_name,$default_out);
                                add_port_to_plug        ($self,$intfc_name,$name,$range,$type,$outport_type,$connect_name,$default_out);
                                #print "add_port_to_plug(\$self,$intfc_name,$name,$range,$type,,$outport_type);\n";
                                #print "add_port_to_plug(\$self,$intfc_name,$name,$range,$type,,$outport_type);\n";
                                add_port_to_socket      ($self,$intfc_name,$connect_name,$connect_range,$connect_type,$outport_type,$name,$default_out);
                                add_port_to_socket      ($self,$intfc_name,$connect_name,$connect_range,$connect_type,$outport_type,$name,$default_out);
                                #print "add_port_to_socket(\$self,$connect_name,$connect_range,$connect_type);\n";
                                #print "add_port_to_socket(\$self,$connect_name,$connect_range,$connect_type);\n";
                        }
                        }
                        else{
                        else{
                                add_port_to_socket($self,$intfc_name,$name,$range,$type,$outport_type,$connect_name,$default_out);
                                add_port_to_socket($self,$intfc_name,$name,$range,$type,$outport_type,$connect_name,$default_out);
                                add_port_to_plug($self,$intfc_name,$connect_name,$connect_range,$connect_type,$outport_type,$name,$default_out);
                                add_port_to_plug($self,$intfc_name,$connect_name,$connect_range,$connect_type,$outport_type,$name,$default_out);
                        }
                        }
        }
        }
 
 
}
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
1
 
 

powered by: WebSVN 2.1.0

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