OpenCores
URL https://opencores.org/ocsvn/zap/zap/trunk

Subversion Repositories zap

[/] [zap/] [trunk/] [src/] [scripts/] [run_sim.pl] - Diff between revs 41 and 43

Show entire file | Details | Blame | View Log

Rev 41 Rev 43
Line 1... Line 1...
#!/usr/bin/perl -w
#!/usr/bin/perl -w
 
 
#// -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
#// --                                                                         --
# --                                                                         --
#// --                   (C) 2016-2018 Revanth Kamaraj.                        --
# --                   (C) 2016-2018 Revanth Kamaraj.                        --
#// --                                                                         -- 
# --                                                                         -- 
#// -- --------------------------------------------------------------------------
# -- --------------------------------------------------------------------------
#// --                                                                         --
# --                                                                         --
#// -- This program is free software; you can redistribute it and/or           --
# -- This program is free software; you can redistribute it and/or           --
#// -- modify it under the terms of the GNU General Public License             --
# -- modify it under the terms of the GNU General Public License             --
#// -- as published by the Free Software Foundation; either version 2          --
# -- as published by the Free Software Foundation; either version 2          --
#// -- of the License, or (at your option) any later version.                  --
# -- of the License, or (at your option) any later version.                  --
#// --                                                                         --
# --                                                                         --
#// -- This program is distributed in the hope that it will be useful,         --
# -- This program is distributed in the hope that it will be useful,         --
#// -- but WITHOUT ANY WARRANTY; without even the implied warranty of          --
# -- but WITHOUT ANY WARRANTY; without even the implied warranty of          --
#// -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           --
# -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           --
#// -- GNU General Public License for more details.                            --
# -- GNU General Public License for more details.                            --
#// --                                                                         --
# --                                                                         --
#// -- You should have received a copy of the GNU General Public License       --
# -- You should have received a copy of the GNU General Public License       --
#// -- along with this program; if not, write to the Free Software             --
# -- along with this program; if not, write to the Free Software             --
#// -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA           --
# -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA           --
#// -- 02110-1301, USA.                                                        --
# -- 02110-1301, USA.                                                        --
#// --                                                                         --
# --                                                                         --
#// -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
 
 
 
 
my $HELP = "
 
###############################################################################
 
 
 
Perl script to simulate the ZAP processor. This script itself calls other
 
scripts and programs.
 
 
 
Usage :
 
perl run_sim.pl
 
+test+<test_case>           -- Run a specific test case.
 
+irq_en                     -- Configure TB to use IRQ.
 
 
 
###############################################################################
 
";
 
 
 
use strict;
use strict;
use warnings;
use warnings;
 
 
my $FH;
 
 
 
my %Config = do "./Config.cfg";
my %Config = do "./Config.cfg";
 
 
# Env setup.
# Extract from config
 
my $WAVES                       = $Config{'WAVES'};
my $RAM_SIZE                    = $Config{'EXT_RAM_SIZE'};
my $RAM_SIZE                    = $Config{'EXT_RAM_SIZE'};
my $SEED                        = $Config{'SEED'};
my $SEED                        = $Config{'SEED'};
my $SYNTHESIS                   = $Config{'SYNTHESIS'};
my $SYNTHESIS                   = $Config{'SYNTHESIS'};
my $DUMP_START                  = $Config{'DUMP_START'};
my $DUMP_START                  = $Config{'DUMP_START'};
my $DUMP_SIZE                   = $Config{'DUMP_SIZE'};
my $DUMP_SIZE                   = $Config{'DUMP_SIZE'};
my $MAX_CLOCK_CYCLES            = $Config{'MAX_CLOCK_CYCLES'};
my $MAX_CLOCK_CYCLES            = $Config{'MAX_CLOCK_CYCLES'};
my $TLB_DEBUG                   = $Config{'DEFINE_TLB_DEBUG'};
my $TLB_DEBUG                   = $Config{'DEFINE_TLB_DEBUG'};
my $STALL                       = $Config{'ALLOW_STALLS'};
my $TX_TERM0                    = $Config{'UART0_TX_TERMINAL'};
my $TX_TERM                     = $Config{'UART_TX_TERMINAL'};
my $TX_TERM1                    = $Config{'UART1_TX_TERMINAL'};
 
my $RX_TERM0                    = $Config{'UART0_RX_TERMINAL'};
 
my $RX_TERM1                    = $Config{'UART1_RX_TERMINAL'};
my $IRQ_EN                      = $Config{'IRQ_EN'};
my $IRQ_EN                      = $Config{'IRQ_EN'};
 
my $FIQ_EN                      = $Config{'FIQ_EN'};
# System configuration.
 
my $DATA_CACHE_SIZE             = $Config{'DATA_CACHE_SIZE'};
my $DATA_CACHE_SIZE             = $Config{'DATA_CACHE_SIZE'};
my $CODE_CACHE_SIZE             = $Config{'CODE_CACHE_SIZE'};
my $CODE_CACHE_SIZE             = $Config{'CODE_CACHE_SIZE'};
my $CODE_SECTION_TLB_ENTRIES    = $Config{'CODE_SECTION_TLB_ENTRIES'};
my $CODE_SECTION_TLB_ENTRIES    = $Config{'CODE_SECTION_TLB_ENTRIES'};
my $CODE_SPAGE_TLB_ENTRIES      = $Config{'CODE_SPAGE_TLB_ENTRIES'};
my $CODE_SPAGE_TLB_ENTRIES      = $Config{'CODE_SPAGE_TLB_ENTRIES'};
my $CODE_LPAGE_TLB_ENTRIES      = $Config{'CODE_LPAGE_TLB_ENTRIES'};
my $CODE_LPAGE_TLB_ENTRIES      = $Config{'CODE_LPAGE_TLB_ENTRIES'};
Line 72... Line 58...
 
 
# Leave this as is.
# Leave this as is.
my $ZAP_HOME                    = "../../../";
my $ZAP_HOME                    = "../../../";
my $TEST                        = "null";
my $TEST                        = "null";
my $SCRATCH                     = "/dev/null";
my $SCRATCH                     = "/dev/null";
my $FIQ_EN                      = 0;
 
 
 
 
# Generate a random seed if needed
if ( $SEED == -1 ) {
if ( $SEED == -1 ) {
                $SEED = randSeed();
                $SEED = int rand (0xffffffff);
}
 
 
 
sub randSeed {
 
        return int rand (0xffffffff);
 
}
}
 
 
 
# Parse arguments.
foreach(@ARGV) {
foreach(@ARGV) {
        if (/^\+test\+(.*)/)
        if (/^\+test\+(.*)/) {
        {
 
                $SCRATCH = "$ZAP_HOME/obj/ts/$1"; $TEST = $1;
                $SCRATCH = "$ZAP_HOME/obj/ts/$1"; $TEST = $1;
 
        } else {
 
                die "Unrecognized option to run_sim.pl\n";
        }
        }
        elsif (/help/)
 
        {
 
                print "$HELP"; exit 0
 
        }
 
        else
 
        {
 
                die "Unrecognized $_  $HELP";
 
        }
 
}
 
 
 
if ( $TEST eq "null" ) {
 
        print "$HELP";
 
        die "ERROR: +test+<testname> not specified!";
 
}
}
 
 
 
# Log file - the final file is compressed.
my $LOG_FILE_PATH   = "$SCRATCH/zap.log";
my $LOG_FILE_PATH   = "$SCRATCH/zap.log";
my $VVP_PATH        = "$SCRATCH/zap.vvp";
my $COMPRESSED_LOG_FILE_PATH    = "$SCRATCH/zap.log.gz";
 
 
 
# VCD file - the final file is compressed.
my $VCD_PATH        = "$SCRATCH/zap.vcd";
my $VCD_PATH        = "$SCRATCH/zap.vcd";
 
my $COMPRESSED_VCD_PATH         = "$SCRATCH/zap.vcd.gz";
 
 
 
# Paths
 
my $VVP_PATH                    = "$SCRATCH/zap.vvp";
my $PROG_PATH       = "$SCRATCH/zap_mem.v";
my $PROG_PATH       = "$SCRATCH/zap_mem.v";
my $TARGET_BIN_PATH = "$SCRATCH/zap.bin";
my $TARGET_BIN_PATH = "$SCRATCH/zap.bin";
my $UART_PATH       = "$SCRATCH/zapuart.fifo";
my $UART0_PATH_TX               = "$SCRATCH/zapuart0.tx";
 
my $UART1_PATH_TX               = "$SCRATCH/zapuart1.tx";
# Generate IVL options.
my $UART0_PATH_RX               = "$SCRATCH/zapuart0.rx";
my $IVL_OPTIONS .=
my $UART1_PATH_RX               = "$SCRATCH/zapuart1.rx";
" -I$ZAP_HOME/src/rtl/cpu -I$ZAP_HOME/obj/ts/$TEST -I$ZAP_HOME/src/testbench/cpu/uart16550/rtl $ZAP_HOME/src/testbench/cpu/uart16550/rtl/*.v $ZAP_HOME/src/testbench/cpu/timer/timer.v  $ZAP_HOME/src/testbench/cpu/vic/vic.v";
 
 
# Generate IVL options including VCD generation path.
   $IVL_OPTIONS .= " $ZAP_HOME/src/rtl/*/*.v $ZAP_HOME/src/testbench/cpu/*.v -o $VVP_PATH -gstrict-ca-eval -Wall -g2001 -Winfloop -DSEED=$SEED -DMEMORY_IMAGE=\\\"$PROG_PATH\\\" ";
my $IVL_OPTIONS  = "";
 
 
 
   # Compile CPU
 
   $IVL_OPTIONS .= " -I$ZAP_HOME/src/rtl/cpu -I$ZAP_HOME/obj/ts/$TEST ";
 
   $IVL_OPTIONS .= "  $ZAP_HOME/src/rtl/cpu/*.v   ";
 
 
 
   # Compile other TB components
 
   $IVL_OPTIONS .= " -I$ZAP_HOME/src/testbench/External_IP/uart16550/rtl            ";
 
   $IVL_OPTIONS .= "  $ZAP_HOME/src/testbench/External_IP/uart16550/rtl/*.v ";
 
   $IVL_OPTIONS .= "  $ZAP_HOME/src/testbench/*.v ";
 
   $IVL_OPTIONS .= " -o $VVP_PATH -gstrict-ca-eval -Wall -g2001 -Winfloop -DSEED=$SEED -DMEMORY_IMAGE=\\\"$PROG_PATH\\\" ";
$IVL_OPTIONS .= " -DVCD_FILE_PATH=\\\"$VCD_PATH\\\" ";
$IVL_OPTIONS .= " -DVCD_FILE_PATH=\\\"$VCD_PATH\\\" ";
 
 
if ( $TX_TERM) {
# Generate UART related defines for both the UARTs.
        $IVL_OPTIONS .= " -DUART_FILE_PATH=\\\"$UART_PATH\\\" ";
if ( $TX_TERM0 ) { $IVL_OPTIONS .= " -DUART0_FILE_PATH_TX=\\\"$UART0_PATH_TX\\\" "; } else { $IVL_OPTIONS .= " -DUART0_FILE_PATH_TX=\\\"/dev/null\\\" "; }
} else {
if ( $TX_TERM1 ) { $IVL_OPTIONS .= " -DUART1_FILE_PATH_TX=\\\"$UART1_PATH_TX\\\" "; } else { $IVL_OPTIONS .= " -DUART1_FILE_PATH_TX=\\\"/dev/null\\\" "; }
        $IVL_OPTIONS .= " -DUART_FILE_PATH=\\\"/dev/null\\\" ";
if ( $RX_TERM0 ) { $IVL_OPTIONS .= " -DUART0_FILE_PATH_RX=\\\"$UART0_PATH_RX\\\" "; } else { $IVL_OPTIONS .= " -DUART0_FILE_PATH_RX=\\\"/dev/null\\\" "; }
}
if ( $RX_TERM1 ) { $IVL_OPTIONS .= " -DUART1_FILE_PATH_RX=\\\"$UART1_PATH_RX\\\" "; } else { $IVL_OPTIONS .= " -DUART1_FILE_PATH_RX=\\\"/dev/null\\\" "; }
 
 
 
# CPU / TB configuration related parameters.
$IVL_OPTIONS .= " -Pzap_test.RAM_SIZE=$RAM_SIZE -Pzap_test.START=$DUMP_START -Pzap_test.COUNT=$DUMP_SIZE -DLINUX -Pzap_test.STORE_BUFFER_DEPTH=$SBUF_DEPTH ";
$IVL_OPTIONS .= " -Pzap_test.RAM_SIZE=$RAM_SIZE -Pzap_test.START=$DUMP_START -Pzap_test.COUNT=$DUMP_SIZE -DLINUX -Pzap_test.STORE_BUFFER_DEPTH=$SBUF_DEPTH ";
$IVL_OPTIONS .= " -Pzap_test.BP_ENTRIES=$BP -Pzap_test.FIFO_DEPTH=$FIFO ";
$IVL_OPTIONS .= " -Pzap_test.BP_ENTRIES=$BP -Pzap_test.FIFO_DEPTH=$FIFO ";
$IVL_OPTIONS .= " -Pzap_test.DATA_SECTION_TLB_ENTRIES=$DATA_SECTION_TLB_ENTRIES ";
$IVL_OPTIONS .= " -Pzap_test.DATA_SECTION_TLB_ENTRIES=$DATA_SECTION_TLB_ENTRIES ";
$IVL_OPTIONS .= " -Pzap_test.DATA_LPAGE_TLB_ENTRIES=$DATA_LPAGE_TLB_ENTRIES -Pzap_test.DATA_SPAGE_TLB_ENTRIES=$DATA_SPAGE_TLB_ENTRIES -Pzap_test.DATA_CACHE_SIZE=$DATA_CACHE_SIZE ";
$IVL_OPTIONS .= " -Pzap_test.DATA_LPAGE_TLB_ENTRIES=$DATA_LPAGE_TLB_ENTRIES -Pzap_test.DATA_SPAGE_TLB_ENTRIES=$DATA_SPAGE_TLB_ENTRIES -Pzap_test.DATA_CACHE_SIZE=$DATA_CACHE_SIZE ";
$IVL_OPTIONS .= " -Pzap_test.CODE_SECTION_TLB_ENTRIES=$CODE_SECTION_TLB_ENTRIES -Pzap_test.CODE_LPAGE_TLB_ENTRIES=$CODE_LPAGE_TLB_ENTRIES -Pzap_test.CODE_SPAGE_TLB_ENTRIES=$CODE_SPAGE_TLB_ENTRIES ";
$IVL_OPTIONS .= " -Pzap_test.CODE_SECTION_TLB_ENTRIES=$CODE_SECTION_TLB_ENTRIES -Pzap_test.CODE_LPAGE_TLB_ENTRIES=$CODE_LPAGE_TLB_ENTRIES -Pzap_test.CODE_SPAGE_TLB_ENTRIES=$CODE_SPAGE_TLB_ENTRIES ";
$IVL_OPTIONS .= " -Pzap_test.CODE_CACHE_SIZE=$CODE_CACHE_SIZE ";
$IVL_OPTIONS .= " -Pzap_test.CODE_CACHE_SIZE=$CODE_CACHE_SIZE ";
$IVL_OPTIONS .= "-DMAX_CLOCK_CYCLES=$MAX_CLOCK_CYCLES ";
 
 
 
if ( $IRQ_EN )          {        print "Script: IRQ defined.\n" ; $IVL_OPTIONS .= "-DIRQ_EN ";   }
# Defines
 
if ( 1       )          {        $IVL_OPTIONS .= " -DMAX_CLOCK_CYCLES=$MAX_CLOCK_CYCLES " }
 
if ( $IRQ_EN )          {        $IVL_OPTIONS .= "-DIRQ_EN ";                             }
if ( $FIQ_EN )          {        $IVL_OPTIONS .= "-DFIQ_EN ";   }
if ( $FIQ_EN )          {        $IVL_OPTIONS .= "-DFIQ_EN ";   }
if ( $STALL )           {        print "Script: Stall defined.\n" ; $IVL_OPTIONS .= "-DSTALL ";    }
 
if ( $SYNTHESIS )       {        $IVL_OPTIONS .= "-DSYNTHESIS ";}
if ( $SYNTHESIS )       {        $IVL_OPTIONS .= "-DSYNTHESIS ";}
 
if ( $TLB_DEBUG )       {        $IVL_OPTIONS .= "-DTLB_DEBUG ";                          }
 
if ( $WAVES )           {        $IVL_OPTIONS .= "-DWAVES ";                              }
 
 
if ( $MAX_CLOCK_CYCLES == 0 )   {  die "*E: MAX_CLOCK_CYCLES set to 0. Ending script...";  }
###########################################################################################################################################
if ( $TLB_DEBUG )               {  print "Warning: TLB_DEBUG defined. Do not use for unattended systems!"; $IVL_OPTIONS .= "-DTLB_DEBUG ";}
# Create checker assertion verilog include file.
 
###########################################################################################################################################
 
 
open(HH, ">$ZAP_HOME/obj/ts/$TEST/zap_check.vh") or die "Could not write to ../../../obj/ts/$TEST/zap_check.vh";
open(HH, ">$ZAP_HOME/obj/ts/$TEST/zap_check.vh") or die "Could not write to ../../../obj/ts/$TEST/zap_check.vh";
 
 
 
my $REG_HIER = "u_chip_top.u_zap_top.u_zap_core.u_zap_writeback.u_zap_register_file";
 
my $RAM_HIER = "u_chip_top.u_ram.ram";
my $X = $Config{'FINAL_CHECK'};
my $X = $Config{'FINAL_CHECK'};
 
 
foreach(keys (%$X)) {
foreach(keys (%$X)) {
        my $string = "$_, $$X{$_}, U_MODEL_RAM_DATA.ram[$_]";
        my $string = "$_, $$X{$_}, ${RAM_HIER}[$_/4]";
        print    "if ( U_MODEL_RAM_DATA.ram[$_/4] != ", $$X{"$_"}, ') begin $display("Error: Memory values not matched. PTR = %d EXP = %x REC = %x", ', $string , ' ); $finish; end else $display("RAM check passed!");',"\n";
        print    "if ( ${RAM_HIER}[$_/4] != ", $$X{"$_"}, ') begin $display("Error: Memory values not matched. PTR = %d EXP = %x REC = %x", ', $string , ' ); $finish; end else $display("RAM check passed!");',"\n";
        print HH "if ( U_MODEL_RAM_DATA.ram[$_/4] != ", $$X{"$_"}, ') begin $display("Error: Memory values not matched. PTR = %d EXP = %x REC = %x", ', $string , ' ); $finish; end else $display("RAM check passed!");',"\n";
        print HH "if ( ${RAM_HIER}[$_/4] != ", $$X{"$_"}, ') begin $display("Error: Memory values not matched. PTR = %d EXP = %x REC = %x", ', $string , ' ); $finish; end else $display("RAM check passed!");',"\n";
}
}
 
 
$X = $Config{'REG_CHECK'};
$X = $Config{'REG_CHECK'};
 
 
my $REG_HIER = "u_zap_top.u_zap_core.u_zap_writeback.u_zap_register_file";
 
 
 
foreach(keys (%$X)) {
foreach(keys (%$X)) {
        my $string = "\"$_\", $$X{$_}, $REG_HIER.$_";
        my $string = "\"$_\", $$X{$_}, $REG_HIER.$_";
        print    "if ( $REG_HIER.$_ != ", $$X{"$_"}, ') begin $display("Error: Register values not matched. PTR = %s EXP = %x REC = %x", ', $string , ' ); $finish; end else $display("Reg check passed!");',"\n";
        print    "if ( $REG_HIER.$_ != ", $$X{"$_"}, ') begin $display("Error: Register values not matched. PTR = %s EXP = %x REC = %x", ', $string , ' ); $finish; end else $display("Reg check passed!");',"\n";
        print HH "if ( $REG_HIER.$_ != ", $$X{"$_"}, ') begin $display("Error: Register values not matched. PTR = %s EXP = %x REC = %x", ', $string , ' ); $finish; end else $display("Reg check passed!");',"\n";
        print HH "if ( $REG_HIER.$_ != ", $$X{"$_"}, ') begin $display("Error: Register values not matched. PTR = %s EXP = %x REC = %x", ', $string , ' ); $finish; end else $display("Reg check passed!");',"\n";
}
}
 
 
print HH '$display("Simulation Complete. All checks (if any) passed.");$finish;';
print HH '$display("Simulation Complete. All checks (if any) passed.");$finish;';
 
 
print "*I: Rand is $SEED...\n";
############################################################################################################################################
print "iverilog $IVL_OPTIONS\n";
# Set up UART terminals
 
############################################################################################################################################
 
 
 
if ( $TX_TERM0 ) {
 
        system1("rm -f $UART0_PATH_TX");    # Remove UART file.
 
        system1("mknod $UART0_PATH_TX p");  # Create a UART output FIFO file.
 
}
 
 
 
if ( $TX_TERM1 ) {
 
        system1("rm -f $UART1_PATH_TX");    # Remove UART file.
 
        system1("mknod $UART1_PATH_TX p");  # Create a UART output FIFO file.
 
}
 
 
 
if ( $RX_TERM0 ) {
 
        system1("rm -f $UART0_PATH_RX");    # Remove UART file.
 
        system1("touch $UART0_PATH_RX");    # Create file.
 
}
 
 
if ( $TX_TERM ) {
if ( $RX_TERM1 ) {
        system("rm -f $UART_PATH");    # Remove UART file.
        system1("rm -f $UART1_PATH_RX");    # Remove UART file.
        system("mknod $UART_PATH p");  # Create a UART output FIFO file.
        system1("touch $UART1_PATH_RX");    # Create file.
}
}
 
 
# UART output monitor.
 
die "Error: XTerm could not be found!" if system("which xterm");
die "Error: XTerm could not be found!" if system("which xterm");
die "Error: Icarus Verilog could not be found!" if system("which iverilog");
 
 
 
if ( $TX_TERM == 1 ) {
if ( $TX_TERM0 ) {        die "Failed to open UART TX terminal 0." if system1("xterm -T 'TB UART Output' -hold -e 'cat $UART0_PATH_TX' &");                                                }
        print "Setting up UART output monitor\n";
if ( $TX_TERM1 ) {        die "Failed to open UART TX terminal 1." if system1("xterm -T 'TB UART Output' -hold -e 'cat $UART1_PATH_TX' &");                                                }
        system("xterm -T 'TB UART Output' -hold -e 'cat $UART_PATH ; echo ; echo ------------------ ; echo UART_Output_Complete ; echo ------------------' &");
if ( $RX_TERM0 ) {        die "Failed to open UART RX terminal 0." if system1("xterm -T 'TB UART Input'  -hold -e 'bash $ZAP_HOME/src/scripts/uart_input.bash $UART0_PATH_RX' &");         }
 
if ( $RX_TERM1 ) {        die "Failed to open UART RX terminal 1." if system1("xterm -T 'TB UART Input'  -hold -e 'bash $ZAP_HOME/src/scripts/uart_input.bash $UART1_PATH_RX' &");         }
 
 
 
#############################################################################################################################################
 
# Compile using VVP
 
#############################################################################################################################################
 
 
 
die "*E: Verilog Compilation Failed!\n"  if system1("iverilog $IVL_OPTIONS");
 
die "*E: Failed to read out Log FIFO!\n" if system1("rm -f $LOG_FILE_PATH ; mkfifo $LOG_FILE_PATH ; cat $LOG_FILE_PATH | gzip  > $COMPRESSED_LOG_FILE_PATH &");
 
 
 
if ( $WAVES ) {
 
        die "*E: Failed to read out VCD FIFO!\n" if system1("rm -f $VCD_PATH      ; mkfifo $VCD_PATH      ; cat $VCD_PATH      | gzip  > $COMPRESSED_VCD_PATH &");
}
}
 
 
die "*E: Verilog Compilation Failed!\n" if system("iverilog $IVL_OPTIONS");
die "*E: VVP execution error!\n"         if system1("vvp $VVP_PATH | tee $LOG_FILE_PATH");
die "*E: VVP execution error!\n" if system("vvp $VVP_PATH | tee $LOG_FILE_PATH");
 
 
 
die "*E: Errors occurred! Please grep for Errors in $LOG_FILE_PATH\n"       unless system("grep Error   $LOG_FILE_PATH");
###############################################################################################################################################
die "*E: There were Warnings! Please grep for Warnings in $LOG_FILE_PATH\n" unless system("grep Warning $LOG_FILE_PATH");
# Scan for errors and warnings.
 
###############################################################################################################################################
 
 
 
die "*E: Errors occurred! Please grep for Errors in $COMPRESSED_LOG_FILE_PATH\n"       unless system("zcat $COMPRESSED_LOG_FILE_PATH | grep Error");
 
die "*E: There were Warnings! Please grep for Warnings in $COMPRESSED_LOG_FILE_PATH\n" unless system("zcat $COMPRESSED_LOG_FILE_PATH | grep Warning");
 
 
 
###############################################################################################################################################
 
# Functions
 
###############################################################################################################################################
 
 
 
sub system1 {
 
        my $x = $_[0];
 
        print "#SystemCommand: $x\n";
 
        system("$x");
 
}
 
 
exit 0;
exit 0;
 
 
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2022 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.