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/] [topology.pl] - Diff between revs 54 and 56

Show entire file | Details | Blame | View Log

Rev 54 Rev 56
Line 297... Line 297...
        my $T1=$self->object_get_attribute('noc_param','T1');
        my $T1=$self->object_get_attribute('noc_param','T1');
        my $T2=$self->object_get_attribute('noc_param','T2');
        my $T2=$self->object_get_attribute('noc_param','T2');
        my $T3=$self->object_get_attribute('noc_param','T3');
        my $T3=$self->object_get_attribute('noc_param','T3');
        if($topology eq '"FATTREE"' || $topology eq '"TREE"') {
        if($topology eq '"FATTREE"' || $topology eq '"TREE"') {
                return fattree_addrencode($id, $T1, $T2);
                return fattree_addrencode($id, $T1, $T2);
        }elsif ($topology eq '"RING"' || $topology eq '"LINE"'  ||  $topology eq '"MESH"' || $topology eq '"TORUS"'){
        }elsif ($topology eq '"MESH"' || $topology eq '"TORUS"'){
                return mesh_tori_addrencode($id,$T1, $T2,$T3);
                return mesh_tori_addrencode($id,$T1, $T2,$T3);
 
        }elsif ($topology eq '"RING"' || $topology eq '"LINE"'){
 
                return ring_line_addrencode($id,$T1, $T3);
        }elsif ($topology eq '"FMESH"' ){
        }elsif ($topology eq '"FMESH"' ){
                return  fmesh_addrencode($id,$T1, $T2,$T3);
                return  fmesh_addrencode($id,$T1, $T2,$T3);
        }else{#CUSTOM & STAR
        }else{#CUSTOM & STAR
                return $id;
                return $id;
        }
        }
Line 358... Line 360...
        my ($id,$T1, $T2,$T3)=@_;
        my ($id,$T1, $T2,$T3)=@_;
        my ($x,$y,$l)=mesh_tori_addrencod_sep($id,$T1,$T2,$T3);
        my ($x,$y,$l)=mesh_tori_addrencod_sep($id,$T1,$T2,$T3);
    return mesh_tori_addr_join($x,$y,$l,$T1, $T2,$T3);
    return mesh_tori_addr_join($x,$y,$l,$T1, $T2,$T3);
}
}
 
 
 
sub ring_line_addrencode {
 
        my ($id,$T1, $T3)=@_;
 
        my ($x,$y,$l)=mesh_tori_addrencod_sep($id,$T1,0,$T3);
 
        return ring_line_addr_join($x,$y,$l,$T1, $T3);
 
}
 
 
sub  mesh_tori_addrencod_sep{
sub  mesh_tori_addrencod_sep{
        my ($id,$T1,$T2,$T3)=@_;
        my ($id,$T1,$T2,$T3)=@_;
        my ($x,$y,$l);
        my ($x,$y,$l);
        $l=$id % $T3; # id%NL
        $l=$id % $T3; # id%NL
        my $R= int($id / $T3);
        my $R= int($id / $T3);
Line 377... Line 385...
    my $addrencode=0;
    my $addrencode=0;
    $addrencode =($T3==1)?   ($y << $NXw | $x) : ($l<<($NXw+$NYw)|  ($y << $NXw) | $x);
    $addrencode =($T3==1)?   ($y << $NXw | $x) : ($l<<($NXw+$NYw)|  ($y << $NXw) | $x);
    return $addrencode;
    return $addrencode;
}
}
 
 
 
sub ring_line_addr_join {
 
        my ($x, $y, $l,$T1, $T3)=@_;
 
        my $NXw=log2($T1);
 
        my $addrencode=0;
 
    $addrencode =($T3==1)?  $x : ($l << $NXw) |  $x;
 
    return $addrencode;
 
}
 
 
 
 
 
 
sub mcast_partial_width {
sub mcast_partial_width {
        my ($p,$NE)=@_;
        my ($p,$NE)=@_;
        my $m=0;
        my $m=0;
        $p=remove_not_hex($p);
        $p=remove_not_hex($p);
Line 422... Line 439...
            ($CAST_TYPE eq '"MULTICAST_PARTIAL"' && $EAw <  $MCAST_PRTLw) ? $MCAST_PRTLw +1 :
            ($CAST_TYPE eq '"MULTICAST_PARTIAL"' && $EAw <  $MCAST_PRTLw) ? $MCAST_PRTLw +1 :
            $EAw +1; #broadcast
            $EAw +1; #broadcast
 
 
        my $DAw = ($CAST_TYPE eq '"UNICAST"') ?   $EAw: $MCASTw +  $DAw_OFFSETw;
        my $DAw = ($CAST_TYPE eq '"UNICAST"') ?   $EAw: $MCASTw +  $DAw_OFFSETw;
 
 
        print "$DAw=$DAw\n";
 
 
 
        my $custom_include="";
        my $custom_include="";
        if($topology eq '"FATTREE"') {
        if($topology eq '"FATTREE"') {
                my $K =  $T1;
                my $K =  $T1;
        my $L =  $T2;
        my $L =  $T2;
        my $p2 = 2*$K;
        my $p2 = 2*$K;
Line 621... Line 636...
$st7.="
$st7.="
        if (i<NR${i}){
        if (i<NR${i}){
                update_router_st(
                update_router_st(
                        NR${i}_PNUM,
                        NR${i}_PNUM,
                        router${i}[i]->current_r_id,
                        router${i}[i]->current_r_id,
                        router${i}[i]->router_event
                        router${i}[i]->router_event,
 
                        sizeof(router${i}[i]->router_event[0])
                );
                );
                return;
                return;
        }
        }
        i-=     NR${i};
        i-=     NR${i};
";
";
Line 677... Line 693...
void inline single_router_eval(int i){
void inline single_router_eval(int i){
        $st6
        $st6
}
}
 
 
#define SMART_NUM  ((SMART_MAX==0)? 1 : SMART_MAX)
#define SMART_NUM  ((SMART_MAX==0)? 1 : SMART_MAX)
#if SMART_NUM > 8
 
        typedef unsigned int EVENT;
 
#else
 
        typedef unsigned char EVENT;
 
#endif
 
 
 
extern void update_router_st (
extern void update_router_st (
  unsigned int,
  unsigned int,
  unsigned int,
  unsigned int,
  EVENT *
  void * ,
 
  size_t
);
);
 
 
void  single_router_st_update(int i){
void  single_router_st_update(int i){
        $st7
        $st7
}
}

powered by: WebSVN 2.1.0

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