PVT === ffg0p82v100c mnk_alpha ==== VDD 0.825,VDDQN 1.17,VDDM 1.17 mnk_lib_ss0p905v100c_pg.lib ===== VDDQN 1.1, VDDM 1.1,VSS 0 Bias voltage differences has been observed for VDDQN, VDDM. Missing Bias voltages VSS from mnk_alpha file. VDD from mnk_lib_ss0p905v100c_pg.lib file #### put cornerData(ffg0p82v100c) {VDD 0.825,VDDQN 1.17,VDDM 1.17,TEMP 100} put cornerData(ssg0p905v100c) {VDD 0.825,VDDQN 1.1,VDDM 0.17,TEMP 100} put cornerData(tt0p40v100c) {VDD 0.825,VDDQN 1.07,VDDM 2.15,TEMP 100} #### library(mnk_lib_ss0p905v100c) { voltage_map(VDDQN, 1.1); voltage_map(VDDM, 1.1); voltage_map(VSS, 0); pg_pin(VDDQN) { voltage_name : VDDQN ; pg_type : primary_power ; } pg_pin(VSS) { voltage_name : VSS ; pg_type : primary_ground ; } } } #### library(mnk_lib_ff0p82v100) { voltage_map(VDDQN, 1.1); voltage_map(VDDM, 1.1); voltage_map(VSS, 0); pg_pin(VDDQN) { voltage_name : VDDQN ; pg_type : primary_power ; } pg_pin(VSS) { voltage_name : VSS ; pg_type : primary_ground ; } } } #### library(mnk_lib_tt0p4v100c) { voltage_map(VDDQN, 1.1); voltage_map(VDDM, 1.1); voltage_map(VSS, 0); pg_pin(VDDQN) { voltage_name : VDDQN ; pg_type : primary_power ; } pg_pin(VSS) { voltage_name : VSS ; pg_type : primary_ground ; } } } #### my $in_macro = $ARGV[0]; my $alpha_config = $ARGV[1]; if ($#ARGV!=1) { print "USAGE :: perl bias_vol_chk.pl <> <> \n\n" ; exit(1); } open (ALPHAFILE,"<","$alpha_config") || die "Can not open config_FILE"; my @alpha_file = ; my $pvt_name; my $bias_voltage; my @bias_voltage; for(my $i=0;$i<= $#alpha_file -1;$i++) { my $line = $alpha_file[$i]; chomp $line; #print "$line \n"; if ($line =~m/\s*cornerData\((.*)\)\s*\{(.*),TEMP\s*(.*)/g) { $pvt_name = $1; $bias_voltage = $2; print "$pvt_name\n"; print "$bias_voltage\n"; @bias_voltage = split (',',$bias_voltage); if ($pvt_name =~m/^([a-z].*)([0-9]p.*)/) { my $process = $1; my $process_two = substr($process, 0, 2); #got ff from ffgp my $vol_temp = $2; my @vol_temp = split ('v',$vol_temp); my $temp = @vol_temp[1]; my $volt_1 = @vol_temp[0]; $volt_1 =~ s/[0]$//; @vol_temp[0] =~ s/[0]$//; my $volt_2 = @vol_temp[0]; my @volt_2 = split('p',$volt_2); $volt_2 = join('.',@volt_2); #replacing p with . my $file_name1 = "$in_macro/lib_pg/$in_macro\_$pvt_name\_pg.lib" ; my $file_name2 = "$in_macro/lib_pg/$in_macro\_$process_two$volt_1\v$temp\_pg.lib" ; #print "$file_name2\n"; if( -e $file_name1) { open (LIBFILE,"<","$file_name1") or die "Can not open INPUT liberty file $in_macro/lib_pg/$in_macro\_$pvt_name\_pg.lib"; my @lib_file = ; for(my $j=0;$j<= $#lib_file -1;$j++) { my $libline = $lib_file[$j]; chomp $libline; if ($libline=~m/^\s*voltage_map\((.*)\)/g) { my @volt_array = ("$1"); my $lib_volt = $1; my @lib_volt = split (',',$lib_volt); print "@lib_volt \n"; #print " @lib_volt[0] @lib_volt[1]\n"; } } } if( -e $file_name2) { open (LIBFILE,"<","$file_name2") or die "Can not open INPUT liberty file $in_macro/lib_pg/$in_macro\_$process_two$volt_1\v$temp\_pg.lib"; my @lib_file = ; for(my $j=0;$j<= $#lib_file -1;$j++) { my $libline = $lib_file[$j]; chomp $libline; if ($libline=~m/^\s*voltage_map\((.*)\)/g) { my @volt_array = ("$1"); my $lib_volt = $1; my @lib_volt = split (',',$lib_volt); print "@lib_volt \n"; #print " @lib_volt[0] @lib_volt[1]\n"; } } } } } }