#!/bin/perl #save old regression report if( (-e "reg_rep.txt") ) { $tmp=`date +%m%d%y_%H%M%S`; chomp($tmp); $cmd="mv reg_rep.txt reg_rep_" . $tmp . ".txt"; system($cmd); } open(FPW, ">reg_rep.txt") || die("open fail reg_rep.txt\n"); $hs=`hostname`; chomp($hs); print FPW ("start simulation on machine $hs\n"); print FPW ("number of tests $ARGV[0]\n"); $max_seed=10000000; #ARGV[0] number of runs #ARGV[1] environment UARTSMA_4 | UART_2_RTL15_K2 | FC_UART | FC_UART1 #ARGV[2] ARGV[3] ... test names system("rm -f stop.txt"); $pl_seed=time ^ $$ or time ^ ($$ + ($$ << 15)); srand($pl_seed); $limit=shift(@ARGV); $lwenv=shift(@ARGV); if($lwenv ne "UARTSMA_4" && $lwenv ne "UART_2_RTL15_K2" && $lwenv ne "FC_UART" && $lwenv ne "FC_UART1") { die("$lwenv not supported\n use UARTSMA_4 | UART_2_RTL15_K2 | FC_UART | FC_UART1\n"); } for($i=0; $i<$limit; $i++) { $g_err_flg=0;#default no error print ("check stop.txt if exist stop regression\n"); do stop_test(); print("start sim #$i\n"); #verify: no wave record, no break on error, have run;exit commands #do not use the same seed twice $loop_flg=1; while($loop_flg == 1) { $sim_seed=rand($max_seed); $sim_seed= int($sim_seed); $cmd="grep -w " . $sim_seed . " reg_rep.txt"; $d=`$cmd`; chomp($d); $loop_n=length($d); if($loop_n == 0) {$loop_flg=0;} }#while $dateS=`date +%m%d%y_%H%M%S`; chomp($dateS); $test=shift(@ARGV); if($lwenv eq "UARTSMA_4") { $cmd="specrun -log specman.elog -pre_commands \"@/proj/hyphyflex_a_il/devel/krengelp/UARTSMA_4/tbc/ip/scripts/init.ecom\" -pre_commands \"load ../testcases/tests/" . $test . "/" . $test . ".e\" -pre_commands \"test -seed=" . $sim_seed . "\" ncsim -status -NBASYNC -nowarn DLCPTH -nowarn DLCIML +x_off -dumpstack -cdslib ./cds.lib -hdlvar ./hdl.var -simvisargs \"-title " . $test . ".1.enet_tb_cfg;: \" -logfile ncsim.log -input ./init.tcl enet_tb_cfg;"; } elsif($lwenv eq "UART_2_RTL15_K2") { $cmd="bsub -q sim -app EvcEnet -I -R \"select [linux64 && RHEL4] rusage[mem=12000] select[maxmem>12000]\" specrun -log specman.elog -pre_commands \"@/proj/hyphyflex_a_il/devel/krengelp/UART_2_RTL15_K2/tbc/ip/scripts/init.ecom\" -pre_commands \"load ../testcases/tests/" . $test . "/" . $test . ".e\" -pre_commands \"test -seed=" . $sim_seed . "\" ncsim -status -NBASYNC -nowarn DLCPTH -nowarn DLCIML +x_off -dumpstack -cdslib ./cds.lib -hdlvar ./hdl.var -simvisargs \"-title " . $test . ".1.enet_tb_cfg;: \" -logfile ncsim.log -input ./init.tcl enet_tb_cfg;"; } else { $cmd="bsub -q sim -I specrun -log specman.elog -pre_commands \"load ../testcases/tests/" . $test . "/" . $test . ".e\" -pre_commands \"test -seed=" . $sim_seed . "\" ncsim -status -NBASYNC -nowarn DLCPTH -nowarn DLCIML +x_off -dumpstack -cdslib ./cds.lib -hdlvar ./hdl.var -covoverwrite -covtest " . $test . "cov_tttt -covdesign design -covworkdir /proj/hyphyflex_a_il/nobackup/vmanager_results/hyphy_fc_ss_tb/p_b_release_013/cov_work -logfile ncsim.log -input ./init.tcl fc_tb_cfg >& /dev/null"; #print("$cmd\n"); } push(@ARGV, $test); print("$cmd\n"); system($cmd); $dateE=`date +%m%d%y_%H%M%S`; chomp($dateE); chomp($delta_t); do sub_date($dateS, $dateE, $delta_t); sleep(1); #check if an error was detected if($lwenv eq "FC_UART" || $lwenv eq "FC_UART1") { ############################################ !! #temp new criteria to my stuff only if($lwenv eq "FC_UART1") { $cmd="grep -e \"KK_UART_REVA_8G_RX_GF_WRD_CNTR.RX_GF_DWRD\" -e \"KK_UART_REVA_8G_RX_BF_WRD_CNTR.RX_BF_DWRD\" -e \"KK_UART_REVA_8G_TX_GF_WRD_CNTR.TX_GF_DWRD\" -e \"KK_UART_REVA_8G_TX_BF_WRD_CNTR.TX_BF_DWRD\" -e \"Error: Specman cannot start running\" -e \"Error: *Signal\" -e \"[tr]x cnt increment while [tr]x_dlolb\" specman.elog " ; } else {#FC_UART $cmd="grep -e \"KK_UART_REVA_8G_RX_GF_WRD_CNTR.RX_GF_DWRD\" -e \"KK_UART_REVA_8G_RX_BF_WRD_CNTR.RX_BF_DWRD\" -e \"KK_UART_REVA_8G_TX_GF_WRD_CNTR.TX_GF_DWRD\" -e \"KK_UART_REVA_8G_TX_BF_WRD_CNTR.TX_BF_DWRD\" -e \"Dut error\" -e \"Simulation Result: [^P]\" -e \"Error: Specman cannot start running\" -e \"Error: *Signal\" specman.elog " ; } } else { $cmd="grep -e \"Dut error\" -e \"Simulation Result: [^P]\" -e \"Error: Specman cannot start running\" -e \"Error: *Signal\" specman.elog "; } print("dbg\n$cmd\n"); $d=`$cmd`; if(length($d) > 1) {$g_err_flg=1;} else {$g_err_flg=0;} $test_pad=$test; while(length($test_pad) < 60) {$test_pad=" " . $test_pad;} print FPW ("$test_pad $dateS $dateE $delta_t sec "); #keep the log file and update the report text file. if($g_err_flg == 1) {#error found keep results print FPW ("F "); $cmd="\\cp -f specman.elog specman_F_" . $sim_seed . ".elog"; system($cmd); $cmd="gzip specman_F_" . $sim_seed . ".elog"; system($cmd); } else { print FPW ("P "); #copy cover file if exists $cov_file=`find . -name "*.ucd" -mmin -2`; chomp($cov_file); $cov_file =~ s/\.\///; $cmd="\\mv -f " . $cov_file . " c_" . $test . "_" . $cov_file; #print("dbg ... $cmd\n"); system($cmd); } print FPW ("$sim_seed\n"); }#of for close(FPW); sub stop_test { my($chk)=""; $chk=`cat stop.txt`; if(length($chk) > 1) {die("see stop.txt\n");} if( (-e "stop1.txt") ) { system("cat stop.txt"); sleep(1); die("end due to user\n"); } } #032711_130548 sub sub_date { my @aa=split(/_/, $_[0]); my @ab=split(/_/, $_[1]); if($aa[0] ne $ab[0]) {$_[2]="-----"} else { $_[2] =substr($ab[1], 0, 2)*3600; $_[2]+=substr($ab[1], 2, 2)* 60; $_[2]+=substr($ab[1], 4, 2) ; $_[2]-=substr($aa[1], 0, 2)*3600; $_[2]-=substr($aa[1], 2, 2)* 60; $_[2]-=substr($aa[1], 4, 2) ; #pad to five characters while(length($_[2]) < 5) {$_[2]=" " . $_[2];} } };