forked from Github_Repos/cvw
		
	Setup the testbench to exclude the warmup from performance counter reports.
This commit is contained in:
		
							parent
							
								
									f6e97cf516
								
							
						
					
					
						commit
						1c381b0546
					
				| @ -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,16 +436,34 @@ 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 | ||||||
|     FunctionName FunctionName(.reset(reset), |     FunctionName FunctionName(.reset(reset), | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user