$sims_launch_dir = $ARGV[0];
$efa = "$dv_root/verif/diag/assembly/include/efa.dat";
$efa_new = "$sims_launch_dir/efa.dat";
$sims_log = "$sims_launch_dir/sims.log";
open (EFA
, $efa) || die("Could not open $efa!");;
open (SIMSLOG
, $sims_log);
@sims_lines = grep { /^sims / } @sims_log;
@sims_cmd = split /\s+/, shift @sims_lines;
if($sims_cmd[$i] =~ /bank_set_mask=(\w+)/){
if($sims_cmd[$i] =~ /core_set_mask=(\w+)/){
if($sims_cmd[$i] =~ /-midas_args=-DCORE_AVAIL=0x(\w+)/){
if($sims_cmd[$i] =~ /-midas_args=-DBANK_AVAIL=0x(\w+)/){
if($sims_cmd[$i] =~ /-midas_args=-DSERIAL_NUM=0x(\w+)/){
if($sims_cmd[$i] =~ /-sys=(\w+)/){
open EFANEW
, ">$efa_new";
$dcore_avail = "00".$dcore_avail;
$dbank_avail = "00".$dbank_avail;
$dserial_num = "0000000000000000".$dserial_num;
$dbank_avail =~ /(\w\w)$/;
$dbank_avail_val_int = hex($dbank_avail_val);
$dbank_avail_val_int = $dbank_avail_val_int & 0xff;
$dbank_avail_val_int = $dbank_avail_val_int | 0x8400000;
if(get_parity
($dbank_avail_val_int) == 1){
$dbank_avail_val_int = $dbank_avail_val_int | 0xf0000000;
$dbank_avail_val_int = $dbank_avail_val_int | 0xe0000000;
$dcore_avail =~ /(\w\w)$/;
$dcore_avail_val_int = hex($dcore_avail_val);
$dcore_avail_val_int = $dcore_avail_val_int & 0xff;
$dcore_avail_val_int = $dcore_avail_val_int | 0x8000000;
$temp = get_parity
($dcore_avail_val_int);
if(get_parity
($dcore_avail_val_int) == 1){
$dcore_avail_val_int = $dcore_avail_val_int | 0xf0000000;
$dcore_avail_val_int = $dcore_avail_val_int | 0xe0000000;
$dserial_num =~ /(\w\w\w\w\w\w)$/;
$dserial_num_lower22 = $1;
$dserial_num_lower22_int = hex($dserial_num_lower22);
$dserial_num_lower22_int = $dserial_num_lower22_int & 0x3fffff;
$dserial_num_lower22_int = $dserial_num_lower22_int | 0x8800000;
if(get_parity
($dserial_num_lower22_int) == 1){
$dserial_num_lower22_int = $dserial_num_lower22_int | 0xf0000000;
$dserial_num_lower22_int = $dserial_num_lower22_int | 0xe0000000;
$dserial_num =~ /(\w\w\w\w\w\w)\w\w\w\w\w$/;
$dserial_num_middle22 = $1;
$dserial_num_middle22_int = hex($dserial_num_middle22);
$dserial_num_middle22_int = $dserial_num_middle22_int >> 2;
$dserial_num_middle22_int = $dserial_num_middle22_int & 0x3fffff;
$dserial_num_middle22_int = $dserial_num_middle22_int | 0x8c00000;
if(get_parity
($dserial_num_middle22_int) == 1){
$dserial_num_middle22_int = $dserial_num_middle22_int | 0xf0000000;
$dserial_num_middle22_int = $dserial_num_middle22_int | 0xe0000000;
$dserial_num =~ /(\w\w\w\w\w\w)\w\w\w\w\w\w\w\w\w\w\w$/;
$dserial_num_upper20 = $1;
$dserial_num_upper20_int = hex($dserial_num_upper20);
$dserial_num_upper20_int = $dserial_num_upper20_int & 0xfffff;
$dserial_num_upper20_int = $dserial_num_upper20_int | 0x9000000;
if(get_parity
($dserial_num_upper20_int) == 1){
$dserial_num_upper20_int = $dserial_num_upper20_int | 0xf0000000;
$dserial_num_upper20_int = $dserial_num_upper20_int | 0xe0000000;
for($i=0; $i<=$#efa_data; $i++){
if($dcore_avail_write == 1){
printf EFANEW
("%x\n", $dcore_avail_val_int);
$efa_data[$i] =~ /^(\w)(\w+)\w\w/;
if($core_set_mask ne ""){
$core_set_mask_int = hex($core_set_mask);
if($core_set_mask_int & 1 == 1){
$core_set_mask_int = $core_set_mask_int >> 1;
$cores = $parity.$cores.$core_set_mask;
$cores = "e".$cores."01";
$cores = $parity.$cores."03";
$cores = $parity.$cores."0f";
$cores = $parity.$cores."ff";
print EFANEW
$cores."\n";
if($dbank_avail_write == 1){
printf EFANEW
("%x\n", $dbank_avail_val_int);
$efa_data[$i] =~ /^(\w+)\w\w/;
if($bank_set_mask ne ""){
$pm_hex = &pm_bank_mask_conversion
();
print EFANEW
$banks."\n";
printf EFANEW
("%x\n", $dserial_num_lower22_int);
printf EFANEW
("%x\n", $dserial_num_middle22_int);
printf EFANEW
("%x\n", $dserial_num_upper20_int);
print EFANEW
$efa_data[$i];
open EFANEW
, ">$efa_new";
for($i=0; $i<=$#efa_data; $i++){
$efa_data[$i] =~ /^(\w)(\w+)\w\w/;
if($sys_config eq "-fc1"){
$cores = "e".$cores."01";
elsif($sys_config eq "-fc2"){
$cores = $parity.$cores."03";
elsif($sys_config eq "-fc4"){
$cores = $parity.$cores."0f";
elsif($sys_config eq "-fc8"){
$cores = $parity.$cores."ff";
print EFANEW
$cores."\n";
print EFANEW
$efa_data[$i];
my $i, $temp_input_val, $ones;
$temp_input_val = $input_val & 0x1;
if($temp_input_val == 1){
$input_val = $input_val >> 1;
return unpack("N", pack("B32", substr("0" x
32 . shift, -32)));
sub pm_core_mask_conversion
{
sub pm_bank_mask_conversion
{
if($bank_set_mask eq "1"){
elsif($bank_set_mask eq "2"){
elsif($bank_set_mask eq "3"){
elsif($bank_set_mask eq "4"){
elsif($bank_set_mask eq "5"){
elsif($bank_set_mask eq "6"){
elsif($bank_set_mask eq "8"){
elsif($bank_set_mask eq "9"){
elsif($bank_set_mask eq "a"){
elsif($bank_set_mask eq "c"){