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
|
}
|
}
|