mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Setup the testbench to exclude the warmup from performance counter reports.
This commit is contained in:
		
							parent
							
								
									e70492ea3f
								
							
						
					
					
						commit
						0ecd1ef681
					
				@ -67,12 +67,24 @@ def ComputeICacheMissRate(benchmark):
 | 
				
			|||||||
    ICacheMR = 100.0 * int(dataDict['I Cache Miss']) / int(dataDict['I Cache Access'])
 | 
					    ICacheMR = 100.0 * int(dataDict['I Cache Miss']) / int(dataDict['I Cache Access'])
 | 
				
			||||||
    dataDict['ICacheMR'] = ICacheMR
 | 
					    dataDict['ICacheMR'] = ICacheMR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def ComputeICacheMissTime(benchmark):
 | 
				
			||||||
 | 
					    'Computes and inserts instruction class miss prediction rate.'
 | 
				
			||||||
 | 
					    (nameString, opt, dataDict) = benchmark
 | 
				
			||||||
 | 
					    ICacheMR = 100.0 * int(dataDict['I Cache Cycles']) / int(dataDict['I Cache Miss'])
 | 
				
			||||||
 | 
					    dataDict['ICacheMT'] = ICacheMR
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
def ComputeDCacheMissRate(benchmark):
 | 
					def ComputeDCacheMissRate(benchmark):
 | 
				
			||||||
    'Computes and inserts instruction class miss prediction rate.'
 | 
					    'Computes and inserts instruction class miss prediction rate.'
 | 
				
			||||||
    (nameString, opt, dataDict) = benchmark
 | 
					    (nameString, opt, dataDict) = benchmark
 | 
				
			||||||
    DCacheMR = 100.0 * int(dataDict['D Cache Miss']) / int(dataDict['D Cache Access'])
 | 
					    DCacheMR = 100.0 * int(dataDict['D Cache Miss']) / int(dataDict['D Cache Access'])
 | 
				
			||||||
    dataDict['DCacheMR'] = DCacheMR
 | 
					    dataDict['DCacheMR'] = DCacheMR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def ComputeDCacheMissTime(benchmark):
 | 
				
			||||||
 | 
					    'Computes and inserts instruction class miss prediction rate.'
 | 
				
			||||||
 | 
					    (nameString, opt, dataDict) = benchmark
 | 
				
			||||||
 | 
					    ICacheMR = 100.0 * int(dataDict['D Cache Cycles']) / int(dataDict['D Cache Miss'])
 | 
				
			||||||
 | 
					    dataDict['DCacheMT'] = ICacheMR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def ComputeAll(benchmarks):
 | 
					def ComputeAll(benchmarks):
 | 
				
			||||||
    for benchmark in benchmarks:
 | 
					    for benchmark in benchmarks:
 | 
				
			||||||
        ComputeCPI(benchmark)
 | 
					        ComputeCPI(benchmark)
 | 
				
			||||||
@ -81,23 +93,23 @@ def ComputeAll(benchmarks):
 | 
				
			|||||||
        ComputeRASMissRate(benchmark)
 | 
					        ComputeRASMissRate(benchmark)
 | 
				
			||||||
        ComputeInstrClassMissRate(benchmark)
 | 
					        ComputeInstrClassMissRate(benchmark)
 | 
				
			||||||
        ComputeICacheMissRate(benchmark)
 | 
					        ComputeICacheMissRate(benchmark)
 | 
				
			||||||
 | 
					        ComputeICacheMissTime(benchmark)
 | 
				
			||||||
        ComputeDCacheMissRate(benchmark)
 | 
					        ComputeDCacheMissRate(benchmark)
 | 
				
			||||||
 | 
					        ComputeDCacheMissTime(benchmark)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
def printStats(benchmark):
 | 
					def printStats(benchmark):
 | 
				
			||||||
    (nameString, opt, dataDict) = benchmark
 | 
					    (nameString, opt, dataDict) = benchmark
 | 
				
			||||||
    CPI = dataDict['CPI']
 | 
					 | 
				
			||||||
    BDMR = dataDict['BDMR']
 | 
					 | 
				
			||||||
    BTMR = dataDict['BTMR']
 | 
					 | 
				
			||||||
    RASMPR = dataDict['RASMPR']
 | 
					 | 
				
			||||||
    print('Test', nameString)
 | 
					    print('Test', nameString)
 | 
				
			||||||
    print('Compile configuration', opt)
 | 
					    print('Compile configuration', opt)
 | 
				
			||||||
    print('CPI \t\t\t  %1.2f' % CPI)
 | 
					    print('CPI \t\t\t  %1.2f' % dataDict['CPI'])
 | 
				
			||||||
    print('Branch Dir Pred Miss Rate %2.2f' % BDMR)
 | 
					    print('Branch Dir Pred Miss Rate %2.2f' % dataDict['BDMR'])
 | 
				
			||||||
    print('Branch Target Pred Miss Rate %2.2f' % BTMR)
 | 
					    print('Branch Target Pred Miss Rate %2.2f' % dataDict['BTMR'])
 | 
				
			||||||
    print('RAS Miss Rate \t\t  %1.2f' % RASMPR)
 | 
					    print('RAS Miss Rate \t\t  %1.2f' % dataDict['RASMPR'])
 | 
				
			||||||
    print('Instr Class Miss Rate  %1.2f' % dataDict['ClassMPR'])
 | 
					    print('Instr Class Miss Rate  %1.2f' % dataDict['ClassMPR'])
 | 
				
			||||||
    print('I Cache Miss Rate  %1.4f' % dataDict['ICacheMR'])
 | 
					    print('I Cache Miss Rate  %1.4f' % dataDict['ICacheMR'])
 | 
				
			||||||
 | 
					    print('I Cache Miss Ave Cycles  %1.4f' % dataDict['ICacheMT'])
 | 
				
			||||||
    print('D Cache Miss Rate  %1.4f' % dataDict['DCacheMR'])
 | 
					    print('D Cache Miss Rate  %1.4f' % dataDict['DCacheMR'])
 | 
				
			||||||
 | 
					    print('D Cache Miss Ave Cycles  %1.4f' % dataDict['DCacheMT'])
 | 
				
			||||||
    print()
 | 
					    print()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def ProcessFile(fileName):
 | 
					def ProcessFile(fileName):
 | 
				
			||||||
@ -156,7 +168,7 @@ def GeometricAverage(benchmarks, field):
 | 
				
			|||||||
    return Product ** (1.0/index)
 | 
					    return Product ** (1.0/index)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def ComputeGeometricAverage(benchmarks):
 | 
					def ComputeGeometricAverage(benchmarks):
 | 
				
			||||||
    fields = ['BDMR', 'BTMR', 'RASMPR', 'ClassMPR', 'ICacheMR', 'DCacheMR', 'CPI']
 | 
					    fields = ['BDMR', 'BTMR', 'RASMPR', 'ClassMPR', 'ICacheMR', 'DCacheMR', 'CPI', 'ICacheMT', 'DCacheMT']
 | 
				
			||||||
    AllAve = {}
 | 
					    AllAve = {}
 | 
				
			||||||
    for field in fields:
 | 
					    for field in fields:
 | 
				
			||||||
        Product = 1
 | 
					        Product = 1
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										76
									
								
								sim/wave.do
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								sim/wave.do
									
									
									
									
									
								
							@ -6,7 +6,6 @@ add wave -noupdate /testbench/reset
 | 
				
			|||||||
add wave -noupdate /testbench/reset_ext
 | 
					add wave -noupdate /testbench/reset_ext
 | 
				
			||||||
add wave -noupdate /testbench/memfilename
 | 
					add wave -noupdate /testbench/memfilename
 | 
				
			||||||
add wave -noupdate /testbench/dut/core/SATP_REGW
 | 
					add wave -noupdate /testbench/dut/core/SATP_REGW
 | 
				
			||||||
add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/BPPredWrongE
 | 
					 | 
				
			||||||
add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/RetM
 | 
					add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/RetM
 | 
				
			||||||
add wave -noupdate -group HDU -expand -group hazards -color Pink /testbench/dut/core/hzu/TrapM
 | 
					add wave -noupdate -group HDU -expand -group hazards -color Pink /testbench/dut/core/hzu/TrapM
 | 
				
			||||||
add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/LoadStallD
 | 
					add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/LoadStallD
 | 
				
			||||||
@ -56,11 +55,11 @@ add wave -noupdate -group {Decode Stage} /testbench/dut/core/ieu/c/RegWriteD
 | 
				
			|||||||
add wave -noupdate -group {Decode Stage} /testbench/dut/core/ieu/dp/RdD
 | 
					add wave -noupdate -group {Decode Stage} /testbench/dut/core/ieu/dp/RdD
 | 
				
			||||||
add wave -noupdate -group {Decode Stage} /testbench/dut/core/ieu/dp/Rs1D
 | 
					add wave -noupdate -group {Decode Stage} /testbench/dut/core/ieu/dp/Rs1D
 | 
				
			||||||
add wave -noupdate -group {Decode Stage} /testbench/dut/core/ieu/dp/Rs2D
 | 
					add wave -noupdate -group {Decode Stage} /testbench/dut/core/ieu/dp/Rs2D
 | 
				
			||||||
add wave -noupdate -group {Execution Stage} /testbench/dut/core/ifu/PCE
 | 
					add wave -noupdate -expand -group {Execution Stage} /testbench/dut/core/ifu/PCE
 | 
				
			||||||
add wave -noupdate -group {Execution Stage} /testbench/dut/core/ifu/InstrE
 | 
					add wave -noupdate -expand -group {Execution Stage} /testbench/dut/core/ifu/InstrE
 | 
				
			||||||
add wave -noupdate -group {Execution Stage} /testbench/InstrEName
 | 
					add wave -noupdate -expand -group {Execution Stage} /testbench/InstrEName
 | 
				
			||||||
add wave -noupdate -group {Execution Stage} /testbench/dut/core/ieu/c/InstrValidE
 | 
					add wave -noupdate -expand -group {Execution Stage} /testbench/dut/core/ieu/c/InstrValidE
 | 
				
			||||||
add wave -noupdate -group {Execution Stage} /testbench/FunctionName/FunctionName/FunctionName
 | 
					add wave -noupdate -expand -group {Execution Stage} /testbench/FunctionName/FunctionName/FunctionName
 | 
				
			||||||
add wave -noupdate -expand -group {Memory Stage} /testbench/dut/core/PCM
 | 
					add wave -noupdate -expand -group {Memory Stage} /testbench/dut/core/PCM
 | 
				
			||||||
add wave -noupdate -expand -group {Memory Stage} /testbench/dut/core/InstrM
 | 
					add wave -noupdate -expand -group {Memory Stage} /testbench/dut/core/InstrM
 | 
				
			||||||
add wave -noupdate -expand -group {Memory Stage} /testbench/InstrMName
 | 
					add wave -noupdate -expand -group {Memory Stage} /testbench/InstrMName
 | 
				
			||||||
@ -91,19 +90,10 @@ add wave -noupdate -group CSRs -group {user mode} /testbench/dut/core/priv/priv/
 | 
				
			|||||||
add wave -noupdate -group Bpred -group {branch update selection inputs} -divider {class check}
 | 
					add wave -noupdate -group Bpred -group {branch update selection inputs} -divider {class check}
 | 
				
			||||||
add wave -noupdate -group Bpred -group prediction /testbench/dut/core/ifu/bpred/bpred/RASPCF
 | 
					add wave -noupdate -group Bpred -group prediction /testbench/dut/core/ifu/bpred/bpred/RASPCF
 | 
				
			||||||
add wave -noupdate -group Bpred -group prediction -expand -group ex /testbench/dut/core/ifu/bpred/bpred/PCSrcE
 | 
					add wave -noupdate -group Bpred -group prediction -expand -group ex /testbench/dut/core/ifu/bpred/bpred/PCSrcE
 | 
				
			||||||
add wave -noupdate -group Bpred -group {bp wrong} /testbench/dut/core/ifu/bpred/bpred/PredictionPCWrongE
 | 
					 | 
				
			||||||
add wave -noupdate -group Bpred -group {bp wrong} /testbench/dut/core/ifu/bpred/bpred/InstrClassE
 | 
					 | 
				
			||||||
add wave -noupdate -group Bpred -group {bp wrong} /testbench/dut/core/ifu/bpred/bpred/BPPredWrongE
 | 
					 | 
				
			||||||
add wave -noupdate -group Bpred /testbench/dut/core/ifu/bpred/bpred/BPPredWrongE
 | 
					 | 
				
			||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/PCNextF
 | 
					add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/PCNextF
 | 
				
			||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/bpred/bpred/NextValidPCE
 | 
					add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/bpred/bpred/NextValidPCE
 | 
				
			||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/PCF
 | 
					add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/PCF
 | 
				
			||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/PCPlus2or4F
 | 
					add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/PCPlus2or4F
 | 
				
			||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/bpred/bpred/BPPredPCF
 | 
					 | 
				
			||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/bpred/bpred/SelBPPredF
 | 
					 | 
				
			||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/bpred/bpred/PCNext0F
 | 
					 | 
				
			||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/PCNext1F
 | 
					 | 
				
			||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/BPPredWrongE
 | 
					 | 
				
			||||||
add wave -noupdate -group RegFile -expand /testbench/dut/core/ieu/dp/regf/rf
 | 
					add wave -noupdate -group RegFile -expand /testbench/dut/core/ieu/dp/regf/rf
 | 
				
			||||||
add wave -noupdate -group RegFile /testbench/dut/core/ieu/dp/regf/a1
 | 
					add wave -noupdate -group RegFile /testbench/dut/core/ieu/dp/regf/a1
 | 
				
			||||||
add wave -noupdate -group RegFile /testbench/dut/core/ieu/dp/regf/a2
 | 
					add wave -noupdate -group RegFile /testbench/dut/core/ieu/dp/regf/a2
 | 
				
			||||||
@ -457,7 +447,6 @@ add wave -noupdate -group {debug trace} -expand -group mem -color Yellow /testbe
 | 
				
			|||||||
add wave -noupdate -group {debug trace} -expand -group mem /testbench/dut/core/PCM
 | 
					add wave -noupdate -group {debug trace} -expand -group mem /testbench/dut/core/PCM
 | 
				
			||||||
add wave -noupdate -group {debug trace} -expand -group mem -color Brown /testbench/dut/core/hzu/TrapM
 | 
					add wave -noupdate -group {debug trace} -expand -group mem -color Brown /testbench/dut/core/hzu/TrapM
 | 
				
			||||||
add wave -noupdate -group {debug trace} -expand -group wb /testbench/PCW
 | 
					add wave -noupdate -group {debug trace} -expand -group wb /testbench/PCW
 | 
				
			||||||
add wave -noupdate -group {pc selection} /testbench/dut/core/ifu/PCNext2F
 | 
					 | 
				
			||||||
add wave -noupdate -group ifu /testbench/dut/core/ifu/InstrRawF
 | 
					add wave -noupdate -group ifu /testbench/dut/core/ifu/InstrRawF
 | 
				
			||||||
add wave -noupdate -group ifu /testbench/dut/core/ifu/PostSpillInstrRawF
 | 
					add wave -noupdate -group ifu /testbench/dut/core/ifu/PostSpillInstrRawF
 | 
				
			||||||
add wave -noupdate -group ifu /testbench/dut/core/ifu/IFUStallF
 | 
					add wave -noupdate -group ifu /testbench/dut/core/ifu/IFUStallF
 | 
				
			||||||
@ -465,7 +454,6 @@ add wave -noupdate -group ifu -group Spill /testbench/dut/core/ifu/Spill/spill/C
 | 
				
			|||||||
add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/SpillF
 | 
					add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/SpillF
 | 
				
			||||||
add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/IFUCacheBusStallD
 | 
					add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/IFUCacheBusStallD
 | 
				
			||||||
add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/ITLBMissF
 | 
					add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/ITLBMissF
 | 
				
			||||||
add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/InstrDAPageFaultF
 | 
					 | 
				
			||||||
add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/TakeSpillF
 | 
					add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/TakeSpillF
 | 
				
			||||||
add wave -noupdate -group ifu -group Spill /testbench/dut/core/ifu/SelNextSpillF
 | 
					add wave -noupdate -group ifu -group Spill /testbench/dut/core/ifu/SelNextSpillF
 | 
				
			||||||
add wave -noupdate -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HSIZE
 | 
					add wave -noupdate -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HSIZE
 | 
				
			||||||
@ -558,19 +546,29 @@ add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/c
 | 
				
			|||||||
add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Query1}
 | 
					add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Query1}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -label MCYCLE -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[0]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -label MCYCLE -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[0]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -label MINSTRET -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[2]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -label MINSTRET -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[2]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -label {LOAD STORE HAZARD} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[3]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label Branch -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[3]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group BRP -label {BP DIRECTION WRONG} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[4]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {Jump (Not Return)} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[4]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group BRP -label {BP INSTRUCTION} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[5]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label Return -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[5]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group BRP -label {BTA/JTA WRONG} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[6]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BP Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[6]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group BRP -label {JAL(R) INSTRUCTION} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[7]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BP Dir Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[7]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group BRP -label {RAS WRONG} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[8]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BTA Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[8]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group BRP -label {RETURN INSTRUCTION} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[9]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {RAS Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[9]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group BRP -label {BP CLASS WRONG} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[10]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BP CLASS WRONG} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[10]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group BRP -label {Branch Predictor Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[15]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -group ICACHE -label {I Cache Access} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[16]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group ICACHE -label {ICACHE ACCESS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[13]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -group ICACHE -label {I Cache Miss} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[17]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group ICACHE -label {ICACHE MISS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[14]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -group ICACHE -label {I Cache Miss Cycles} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[18]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group DCACHE -label {DCACHE ACCESS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[11]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {Load Stall} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[11]}
 | 
				
			||||||
add wave -noupdate -expand -group {Performance Counters} -expand -group DCACHE -label {DCACHE MISS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[12]}
 | 
					add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {Store Stall} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[12]}
 | 
				
			||||||
 | 
					add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {DCACHE MISS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[14]}
 | 
				
			||||||
 | 
					add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {DCACHE ACCESS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[13]}
 | 
				
			||||||
 | 
					add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {D Cache Miss Cycles} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[15]}
 | 
				
			||||||
 | 
					add wave -noupdate -expand -group {Performance Counters} -group Privileged -label {CSR Write} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[19]}
 | 
				
			||||||
 | 
					add wave -noupdate -expand -group {Performance Counters} -group Privileged -label Fence.I {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[20]}
 | 
				
			||||||
 | 
					add wave -noupdate -expand -group {Performance Counters} -group Privileged -label sfence.VMA {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[21]}
 | 
				
			||||||
 | 
					add wave -noupdate -expand -group {Performance Counters} -group Privileged -label Interrupt {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[22]}
 | 
				
			||||||
 | 
					add wave -noupdate -expand -group {Performance Counters} -group Privileged -label Exception {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[23]}
 | 
				
			||||||
 | 
					add wave -noupdate -expand -group {Performance Counters} -label {FDiv or IDiv Cycles} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[24]}
 | 
				
			||||||
 | 
					add wave -noupdate -expand -group {Performance Counters} /testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW
 | 
				
			||||||
add wave -noupdate -group {ifu } -color Gold /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/CurrState
 | 
					add wave -noupdate -group {ifu } -color Gold /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/CurrState
 | 
				
			||||||
add wave -noupdate -group {ifu } /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/HREADY
 | 
					add wave -noupdate -group {ifu } /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/HREADY
 | 
				
			||||||
add wave -noupdate -group {ifu } /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/FetchBuffer
 | 
					add wave -noupdate -group {ifu } /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/FetchBuffer
 | 
				
			||||||
@ -604,10 +602,6 @@ add wave -noupdate -group uncore /testbench/dut/uncore/uncore/HRDATA
 | 
				
			|||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/rd
 | 
					add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/rd
 | 
				
			||||||
add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/IndexNextF
 | 
					add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/IndexNextF
 | 
				
			||||||
add wave -noupdate -group {branch direction} -expand -group {branch outcome} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/PCSrcE
 | 
					add wave -noupdate -group {branch direction} -expand -group {branch outcome} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/PCSrcE
 | 
				
			||||||
add wave -noupdate -group {branch direction} -expand -group {branch outcome} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/DirPredictionE
 | 
					 | 
				
			||||||
add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/TableDirPredictionF
 | 
					 | 
				
			||||||
add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/MatchXF
 | 
					 | 
				
			||||||
add wave -noupdate -group {branch direction} -expand -group conditions /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/DirPredictionWrongE
 | 
					 | 
				
			||||||
add wave -noupdate -group {branch direction} -expand -group conditions /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/FlushM
 | 
					add wave -noupdate -group {branch direction} -expand -group conditions /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/FlushM
 | 
				
			||||||
add wave -noupdate -group {branch direction} -expand -group conditions /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/FlushE
 | 
					add wave -noupdate -group {branch direction} -expand -group conditions /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/FlushE
 | 
				
			||||||
add wave -noupdate -group {branch direction} -expand -group ghr /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRF
 | 
					add wave -noupdate -group {branch direction} -expand -group ghr /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRF
 | 
				
			||||||
@ -615,27 +609,23 @@ add wave -noupdate -group {branch direction} -expand -group ghr /testbench/dut/c
 | 
				
			|||||||
add wave -noupdate -group {branch direction} -expand -group ghr /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRE
 | 
					add wave -noupdate -group {branch direction} -expand -group ghr /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRE
 | 
				
			||||||
add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/FlushD
 | 
					add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/FlushD
 | 
				
			||||||
add wave -noupdate -group {branch direction} -expand -group nextghr2 /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRNextF
 | 
					add wave -noupdate -group {branch direction} -expand -group nextghr2 /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRNextF
 | 
				
			||||||
add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/NewDirPredictionE
 | 
					 | 
				
			||||||
add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/IndexE
 | 
					add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/IndexE
 | 
				
			||||||
add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/StallM
 | 
					add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/StallM
 | 
				
			||||||
add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/FlushM
 | 
					add wave -noupdate -group {branch direction} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/FlushM
 | 
				
			||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHR
 | 
					 | 
				
			||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRF
 | 
					add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRF
 | 
				
			||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/PCNextF
 | 
					add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/PCNextF
 | 
				
			||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRNextF
 | 
					add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRNextF
 | 
				
			||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/IndexNextF
 | 
					add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/IndexNextF
 | 
				
			||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/DirPredictionF
 | 
					 | 
				
			||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/BranchInstrF
 | 
					 | 
				
			||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/MatchNextX
 | 
					 | 
				
			||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/PredInstrClassF
 | 
					 | 
				
			||||||
add wave -noupdate /testbench/dut/core/ifu/bpred/bpred/PredValidF
 | 
					 | 
				
			||||||
add wave -noupdate /testbench/dut/core/priv/priv/csr/counters/counters/DCacheAccess
 | 
					add wave -noupdate /testbench/dut/core/priv/priv/csr/counters/counters/DCacheAccess
 | 
				
			||||||
add wave -noupdate /testbench/dut/core/priv/priv/csr/counters/counters/ICacheMiss
 | 
					add wave -noupdate /testbench/dut/core/priv/priv/csr/counters/counters/ICacheMiss
 | 
				
			||||||
add wave -noupdate /testbench/dut/core/priv/priv/csr/counters/counters/ICacheAccess
 | 
					add wave -noupdate /testbench/dut/core/priv/priv/csr/counters/counters/ICacheAccess
 | 
				
			||||||
add wave -noupdate /testbench/dut/core/priv/priv/csr/counters/counters/DCacheMiss
 | 
					add wave -noupdate /testbench/dut/core/priv/priv/csr/counters/counters/DCacheMiss
 | 
				
			||||||
add wave -noupdate /testbench/dut/core/priv/priv/csr/counters/counters/InstrValidNotFlushedM
 | 
					add wave -noupdate /testbench/dut/core/priv/priv/csr/counters/counters/InstrValidNotFlushedM
 | 
				
			||||||
 | 
					add wave -noupdate /testbench/clk
 | 
				
			||||||
 | 
					add wave -noupdate /testbench/HPMCSample/FinalHPMCOUNTERH
 | 
				
			||||||
 | 
					add wave -noupdate /testbench/HPMCSample/InitialHPMCOUNTERH
 | 
				
			||||||
TreeUpdate [SetDefaultTree]
 | 
					TreeUpdate [SetDefaultTree]
 | 
				
			||||||
WaveRestoreCursors {{Cursor 2} {314596 ns} 1} {{Cursor 3} {314460 ns} 1} {{Cursor 4} {391801 ns} 1} {{Cursor 4} {368581 ns} 0} {{Cursor 5} {394987 ns} 1}
 | 
					WaveRestoreCursors {{Cursor 2} {314596 ns} 1} {{Cursor 3} {314460 ns} 1} {{Cursor 4} {391801 ns} 1} {{Cursor 4} {717301 ns} 0} {{Cursor 5} {394987 ns} 1}
 | 
				
			||||||
quietly wave cursor active 4
 | 
					quietly wave cursor active 4
 | 
				
			||||||
configure wave -namecolwidth 250
 | 
					configure wave -namecolwidth 250
 | 
				
			||||||
configure wave -valuecolwidth 194
 | 
					configure wave -valuecolwidth 194
 | 
				
			||||||
@ -651,4 +641,4 @@ configure wave -griddelta 40
 | 
				
			|||||||
configure wave -timeline 0
 | 
					configure wave -timeline 0
 | 
				
			||||||
configure wave -timelineunits ns
 | 
					configure wave -timelineunits ns
 | 
				
			||||||
update
 | 
					update
 | 
				
			||||||
WaveRestoreZoom {368125 ns} {368797 ns}
 | 
					WaveRestoreZoom {717254 ns} {717585 ns}
 | 
				
			||||||
 | 
				
			|||||||
@ -401,17 +401,24 @@ logic [3:0] dummy;
 | 
				
			|||||||
    end // always @ (negedge clk)
 | 
					    end // always @ (negedge clk)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(`PrintHPMCounters & `ZICOUNTERS_SUPPORTED) begin
 | 
					  if(`PrintHPMCounters & `ZICOUNTERS_SUPPORTED) begin : HPMCSample
 | 
				
			||||||
    integer HPMCindex;
 | 
					    integer HPMCindex;
 | 
				
			||||||
 | 
						logic 	StartSampleFirst;
 | 
				
			||||||
 | 
						logic 	StartSampleDelayed;
 | 
				
			||||||
 | 
						logic 	StartSample;
 | 
				
			||||||
 | 
						logic 	EndSample;
 | 
				
			||||||
 | 
						logic [`XLEN-1:0] InitialHPMCOUNTERH[`COUNTERS-1:0];
 | 
				
			||||||
 | 
						logic [`XLEN-1:0] FinalHPMCOUNTERH[`COUNTERS-1:0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    string  HPMCnames[] = '{"Mcycle",
 | 
					    string  HPMCnames[] = '{"Mcycle",
 | 
				
			||||||
                            "------",
 | 
					                            "------",
 | 
				
			||||||
                            "InstRet",
 | 
					                            "InstRet",
 | 
				
			||||||
                            "Br Count",
 | 
					                            "Br Count",
 | 
				
			||||||
                            "Jump, JR, Jal",
 | 
					                            "Jump Not Return",
 | 
				
			||||||
                            "Return",
 | 
					                            "Return",
 | 
				
			||||||
                            "Br Dir Wrong",
 | 
					                            "BP Wrong",
 | 
				
			||||||
                            "Br Pred Wrong",
 | 
					                            "BP Dir Wrong",
 | 
				
			||||||
                            "Br Target Wrong",
 | 
					                            "BP Target Wrong",
 | 
				
			||||||
                            "RAS Wrong",
 | 
					                            "RAS Wrong",
 | 
				
			||||||
                            "Instr Class Wrong",
 | 
					                            "Instr Class Wrong",
 | 
				
			||||||
							"Load Stall",
 | 
												"Load Stall",
 | 
				
			||||||
@ -429,15 +436,33 @@ logic [3:0] dummy;
 | 
				
			|||||||
                            "Exception",
 | 
					                            "Exception",
 | 
				
			||||||
                            "Divide Cycles"
 | 
					                            "Divide Cycles"
 | 
				
			||||||
							};
 | 
												};
 | 
				
			||||||
 | 
						assign StartSampleFirst = FunctionName.FunctionName.FunctionName == "start_trigger";
 | 
				
			||||||
 | 
						flopr #(1) StartSampleReg(clk, reset, StartSampleFirst, StartSampleDelayed);
 | 
				
			||||||
 | 
						assign StartSample = StartSampleFirst & ~ StartSampleDelayed;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						assign EndSample = DCacheFlushStart & ~DCacheFlushDone;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    always @(negedge clk) begin
 | 
					    always @(negedge clk) begin
 | 
				
			||||||
      if(DCacheFlushStart & ~DCacheFlushDone) begin
 | 
						  if(StartSample) begin
 | 
				
			||||||
 | 
							for(HPMCindex = 0; HPMCindex < 32; HPMCindex += 1) begin
 | 
				
			||||||
 | 
							  InitialHPMCOUNTERH[HPMCindex] <= dut.core.priv.priv.csr.counters.counters.HPMCOUNTER_REGW[HPMCindex];
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						  end
 | 
				
			||||||
 | 
						  if(EndSample) begin
 | 
				
			||||||
 | 
							for(HPMCindex = 0; HPMCindex < 32; HPMCindex += 1) begin
 | 
				
			||||||
 | 
							  FinalHPMCOUNTERH[HPMCindex] <= dut.core.priv.priv.csr.counters.counters.HPMCOUNTER_REGW[HPMCindex];
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						  end
 | 
				
			||||||
 | 
					      if(EndSample) begin
 | 
				
			||||||
        for(HPMCindex = 0; HPMCindex < HPMCnames.size(); HPMCindex += 1) begin
 | 
					        for(HPMCindex = 0; HPMCindex < HPMCnames.size(); HPMCindex += 1) begin
 | 
				
			||||||
          // unlikely to have more than 10M in any counter.
 | 
					          // unlikely to have more than 10M in any counter.
 | 
				
			||||||
          $display("Cnt[%2d] = %7d %s", HPMCindex, dut.core.priv.priv.csr.counters.counters.HPMCOUNTER_REGW[HPMCindex], HPMCnames[HPMCindex]);
 | 
					          $display("Cnt[%2d] = %7d %s", HPMCindex, dut.core.priv.priv.csr.counters.counters.HPMCOUNTER_REGW[HPMCindex] - InitialHPMCOUNTERH[HPMCindex], HPMCnames[HPMCindex]);
 | 
				
			||||||
        end
 | 
							end
 | 
				
			||||||
      end
 | 
						  end
 | 
				
			||||||
    end
 | 
						end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // track the current function or global label
 | 
					  // track the current function or global label
 | 
				
			||||||
  if (DEBUG == 1) begin : FunctionName
 | 
					  if (DEBUG == 1) begin : FunctionName
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user