if ( abs($load_correct_value1_0{$instance_name2}) < $correct_value1_IOPATH[0] ) { ###the absolute value to negative delay is larger than the timing of load arc. ######
$correct_value1_IOPATH[0] = $correct_value1_IOPATH[0] + $load_correct_value1_0{$instance_name2};
} else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}
}
}
if(exists $load_correct_value1_1{$instance_name2})
{ if( $load_correct_value1_1{$instance_name2} < 0.0) {
if ( abs($load_correct_value1_1{$instance_name2}) < $correct_value1_IOPATH[1] ) {
$correct_value1_IOPATH[1] = $correct_value1_IOPATH[1] + $load_correct_value1_1{$instance_name2};}
else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}
print file1 "($correct_value1_IOPATH[0]::$correct_value1_IOPATH[1])";
}
elsif( $value_IOPATH[0] =~ ":[^:]") ####CORRECT OR ACCOMODATING THE NEG DELAY VALUES HERE #########
{ $value_IOPATH[0] =~ s/[()]//g;
@correct_value1_IOPATH = split(/:/,$value_IOPATH[0]);
if(exists $load_correct_value1_0{$instance_name2}) {
if($load_correct_value1_0{$instance_name2} < 0.0) { # So that only negative delay value triplet is changed in the IOPATH syntax
if ( abs($load_correct_value1_0{$instance_name2}) < $correct_value1_IOPATH[0] ) {
$correct_value1_IOPATH[0] = $correct_value1_IOPATH[0] + $load_correct_value1_0{$instance_name2};
} else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}
}
}
if(exists $load_correct_value1_1{$instance_name2}) {
if($load_correct_value1_1{$instance_name2} < 0.0) { # So that only negative delay value triplet is changed in the IOPATH syntax
if ( abs($load_correct_value1_1{$instance_name2}) < $correct_value1_IOPATH[1] ) {
$correct_value1_IOPATH[1] = $correct_value1_IOPATH[1] + $load_correct_value1_1{$instance_name2};
} else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}
}
}
if(exists $load_correct_value1_2{$instance_name2}) {
if($load_correct_value1_2{$instance_name2} < 0.0) { # So that only negative delay value triplet is changed in the IOPATH syntax
if ( abs($load_correct_value1_2{$instance_name2}) < $correct_value1_IOPATH[2] ) {
$correct_value1_IOPATH[2] = $correct_value1_IOPATH[2] + $load_correct_value1_2{$instance_name2};
} else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}
}
}
print file1 "($correct_value1_IOPATH[0]:$correct_value1_IOPATH[1]:$correct_value1_IOPATH[2])";
}
else{print file1 "$value_IOPATH[0] ";} # This is to print empty brackets in case rise and fall triplets are empty
if( $value_IOPATH[1] =~ "::")
{ $value_IOPATH[1] =~ s/[()]//g;
@correct_value2_IOPATH = split(/::/,$value_IOPATH[1]);
if(exists $load_correct_value2_0{$instance_name2}) {
if( $load_correct_value2_0{$instance_name2} < 0.0)
{ if ( abs($load_correct_value2_0{$instance_name2}) < $correct_value2_IOPATH[0] ) {
$correct_value2_IOPATH[0] = $correct_value2_IOPATH[0] + $load_correct_value2_0{$instance_name2};}
else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}
if(exists $load_correct_value2_1{$instance_name2}) {
if( $load_correct_value2_1{$instance_name2} < 0.0)
{ if ( abs($load_correct_value2_1{$instance_name2}) < $correct_value2_IOPATH[1] ) {
$correct_value2_IOPATH[1] = $correct_value2_IOPATH[1] + $load_correct_value2_1{$instance_name2};}
else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}
if ($correct_value1_IOPATH[0] == $correct_value2_IOPATH[0] && $correct_value1_IOPATH[1] == $correct_value2_IOPATH[1]) { # Print these values only if they are differnet from the already printed values for the IOPATH
} else {
print file1 " ($correct_value2_IOPATH[0]::$correct_value2_IOPATH[1])";
}
}
elsif( $value_IOPATH[1] =~ ":[^:]")
{ $value_IOPATH[1] =~ s/[()]//g;
@correct_value2_IOPATH = split(/:/,$value_IOPATH[1]);
if(exists $load_correct_value2_0{$instance_name2}) {
if( $load_correct_value2_0{$instance_name2} < 0.0) {
if ( abs($load_correct_value2_0{$instance_name2}) < $correct_value2_IOPATH[0] ) {
$correct_value2_IOPATH[0] = $correct_value2_IOPATH[0] + $load_correct_value2_0{$instance_name2};}
else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}
if(exists $load_correct_value2_1{$instance_name2}) {
if( $load_correct_value2_1{$instance_name2} < 0.0) {
if ( abs($load_correct_value2_1{$instance_name2}) < $correct_value2_IOPATH[1] ) {
$correct_value2_IOPATH[1] = $correct_value2_IOPATH[1] + $load_correct_value2_1{$instance_name2};}
else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}
if(exists $load_correct_value2_2{$instance_name2}) {
if( $load_correct_value2_2{$instance_name2} < 0.0) {
if ( abs($load_correct_value2_2{$instance_name2}) < $correct_value2_IOPATH[2] ) {
$correct_value2_IOPATH[2] = $correct_value2_IOPATH[2] + $load_correct_value2_2{$instance_name2};}
else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}
if ($correct_value1_IOPATH[0] == $correct_value2_IOPATH[0] && $correct_value1_IOPATH[1] == $correct_value2_IOPATH[1] && $correct_value1_IOPATH[2] == $correct_value2_IOPATH[2]) { # Print these values only if they are differnet from the already printed values for the IOPATH
} else {
print file1 " ($correct_value2_IOPATH[0]:$correct_value2_IOPATH[1]:$correct_value2_IOPATH[2])";
}
}
else{print file1 "$value_IOPATH[1] ";} # This is to print empty brackets in case rise and fall triplets are empty
for ($m=2;$m<=$value_IOPATH_width;$m++) {
if (exists $value_IOPATH[$m]) {
$value_IOPATH[$m] =~ s/)+/)/; # To account for the brackets
print file1 " $value_IOPATH[$m]";
}
}
if ($array4[0] =~ "COND" ) { ## Extra bracket for COND statements
print file1 "))n";
} else {print file1 ")n";}
}
}
else
{print file1 "$line1";} #######DUMPING OUT OF SDF IN FILE1######################
}
else
{print file1 "$line1";}
}
close(file1);
close(fileA);
open(FILEA,$ARGV[0]) || die ("ERROR:: SDF file $ARGV[0] cannot be opened for readingn");
print "nn#############REPORTING INSTANCES WHOSE DEFINITION IS NOT THERE IN THE SDF#############n";
while(
本文关键字:暂无联系方式嵌入式系统-技术,单片机-工控设备 - 嵌入式系统-技术