forked from Github_Repos/cvw
		
	add option for regression to do a partial execution of buildroot
This commit is contained in:
		
							parent
							
								
									d24bece3a8
								
							
						
					
					
						commit
						3c0b0987d2
					
				@ -10,6 +10,7 @@
 | 
			
		||||
# output.
 | 
			
		||||
#
 | 
			
		||||
##################################
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
TestCase = namedtuple("TestCase", ['name', 'cmd', 'grepstr'])
 | 
			
		||||
@ -23,22 +24,22 @@ TestCase = namedtuple("TestCase", ['name', 'cmd', 'grepstr'])
 | 
			
		||||
 | 
			
		||||
# edit this list to add more test cases
 | 
			
		||||
configs = [
 | 
			
		||||
    #TestCase(
 | 
			
		||||
    #    name="busybear",
 | 
			
		||||
    #    cmd="vsim -do wally-busybear-batch.do -c > {}",
 | 
			
		||||
    #    grepstr="loaded 100000 instructions"
 | 
			
		||||
    #),
 | 
			
		||||
    TestCase(
 | 
			
		||||
        name="buildroot",
 | 
			
		||||
        cmd="vsim -do wally-buildroot-batch.do -c > {}",
 | 
			
		||||
        grepstr="6300000 instructions"
 | 
			
		||||
    ),
 | 
			
		||||
    TestCase(
 | 
			
		||||
        name="lints",
 | 
			
		||||
        cmd="./lint-wally &> {}",
 | 
			
		||||
        grepstr="All lints run with no errors or warnings"
 | 
			
		||||
    ),
 | 
			
		||||
    )
 | 
			
		||||
]
 | 
			
		||||
def getBuildrootTC(short):
 | 
			
		||||
    INSTR_LIMIT = 100000 # multiple of 100000
 | 
			
		||||
    MAX_EXPECTED = 6.3e6
 | 
			
		||||
    if short:
 | 
			
		||||
        BRcmd="vsim > {} -c <<!\ndo wally-buildroot-batch.do "+str(INSTR_LIMIT)+"\n!"
 | 
			
		||||
        BRgrepstr=str(INSTR_LIMIT)+" instructions"
 | 
			
		||||
    else:
 | 
			
		||||
        BRcmd="vsim > {} -c <<!\ndo wally-buildroot-batch.do 0\n!"
 | 
			
		||||
        BRgrepstr=str(MAX_EXPECTED)+" instructions"
 | 
			
		||||
    return  TestCase(name="buildroot",cmd=BRcmd,grepstr=BRgrepstr)
 | 
			
		||||
 | 
			
		||||
tests64 = ["arch64i", "arch64priv", "arch64c",  "arch64m", "imperas64i", "imperas64p", "imperas64mmu", "imperas64f", "imperas64d", "imperas64m", "imperas64a",  "imperas64c"] #,  "testsBP64"]
 | 
			
		||||
for test in tests64:
 | 
			
		||||
@ -83,7 +84,15 @@ def main():
 | 
			
		||||
    """Run the tests and count the failures"""
 | 
			
		||||
    # Scale the number of concurrent processes to the number of test cases, but
 | 
			
		||||
    # max out at a limited number of concurrent processes to not overwhelm the system
 | 
			
		||||
    TIMEOUT_DUR = 1800 # seconds
 | 
			
		||||
 | 
			
		||||
    if '-all' in sys.argv:
 | 
			
		||||
        TIMEOUT_DUR = 3600 
 | 
			
		||||
        configs.append(getBuildrootTC(short=False))
 | 
			
		||||
    else:
 | 
			
		||||
        TIMEOUT_DUR = 300
 | 
			
		||||
        configs.append(getBuildrootTC(short=True))
 | 
			
		||||
    print(configs)
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        os.mkdir("logs")
 | 
			
		||||
    except:
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,4 @@
 | 
			
		||||
INSTR_LIMIT=${1:-0}
 | 
			
		||||
vsim -c <<!
 | 
			
		||||
do wally-buildroot-batch.do 
 | 
			
		||||
do wally-buildroot-batch.do $INSTR_LIMIT
 | 
			
		||||
!
 | 
			
		||||
 | 
			
		||||
@ -30,7 +30,7 @@ vlog +incdir+../config/buildroot +incdir+../config/shared ../testbench/testbench
 | 
			
		||||
 | 
			
		||||
# start and run simulation
 | 
			
		||||
# remove +acc flag for faster sim during regressions if there is no need to access internal signals
 | 
			
		||||
vopt work.testbench -o workopt 
 | 
			
		||||
vopt work.testbench -G INSTR_LIMIT=$1 -o workopt 
 | 
			
		||||
 | 
			
		||||
vsim workopt -suppress 8852,12070
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,9 @@
 | 
			
		||||
 | 
			
		||||
module testbench();
 | 
			
		||||
  
 | 
			
		||||
  parameter waveOnICount = `BUSYBEAR*140000 + `BUILDROOT*6300000; // # of instructions at which to turn on waves in graphical sim
 | 
			
		||||
  parameter INSTR_LIMIT = 0; // # of instructions at which to stop
 | 
			
		||||
  parameter INSTR_WAVEON = (INSTR_LIMIT > 10000) ? INSTR_LIMIT-10000 : 1; // # of instructions at which to turn on waves in graphical sim
 | 
			
		||||
 | 
			
		||||
  string ProgramAddrMapFile, ProgramLabelMapFile;
 | 
			
		||||
 | 
			
		||||
  ///////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@ -343,10 +345,12 @@ module testbench();
 | 
			
		||||
    // always check PC, instruction bits
 | 
			
		||||
    if (checkInstrW) begin
 | 
			
		||||
      InstrCountW += 1;
 | 
			
		||||
      // turn on waves at certain point
 | 
			
		||||
      if (InstrCountW == waveOnICount) $stop;
 | 
			
		||||
      // print progress message
 | 
			
		||||
      if (InstrCountW % 'd100000 == 0) $display("Reached %d instructions", InstrCountW);
 | 
			
		||||
      // turn on waves
 | 
			
		||||
      if (InstrCountW == INSTR_WAVEON) $stop;
 | 
			
		||||
      // end sim
 | 
			
		||||
      if ((InstrCountW == INSTR_LIMIT) && (INSTR_LIMIT!=0)) $stop;
 | 
			
		||||
      fault = 0;
 | 
			
		||||
      if (`DEBUG_TRACE >= 1) begin
 | 
			
		||||
        `checkEQ("PCW",PCW,ExpectedPCW)
 | 
			
		||||
@ -423,8 +427,8 @@ module testbench();
 | 
			
		||||
  initial begin
 | 
			
		||||
    $readmemh({`LINUX_TEST_VECTORS,"bootmem.txt"}, dut.uncore.bootdtim.bootdtim.RAM, 'h1000 >> 3);
 | 
			
		||||
    $readmemh({`LINUX_TEST_VECTORS,"ram.txt"}, dut.uncore.dtim.RAM);
 | 
			
		||||
    $readmemb(`TWO_BIT_PRELOAD, dut.hart.ifu.bpred.bpred.Predictor.DirPredictor.PHT.memory);
 | 
			
		||||
    $readmemb(`BTB_PRELOAD, dut.hart.ifu.bpred.bpred.TargetPredictor.memory.memory);
 | 
			
		||||
    $readmemb(`TWO_BIT_PRELOAD, dut.hart.ifu.bpred.bpred.Predictor.DirPredictor.PHT.mem);
 | 
			
		||||
    $readmemb(`BTB_PRELOAD, dut.hart.ifu.bpred.bpred.TargetPredictor.memory.mem);
 | 
			
		||||
    ProgramAddrMapFile = {`LINUX_TEST_VECTORS,"vmlinux.objdump.addr"};
 | 
			
		||||
    ProgramLabelMapFile = {`LINUX_TEST_VECTORS,"vmlinux.objdump.lab"};
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user