From 4e0da006e80a37888bd6a16eb40b809b618584ff Mon Sep 17 00:00:00 2001 From: Jonathan Woodruff Date: Wed, 24 Nov 2021 17:11:36 +0000 Subject: [PATCH] Make non-speculative training optional. Removing non-speculative training actually improves performance in CoreMark. While it's "safer", I guess this isn't required for BSC. --- src_Core/CPU/Core.bsv | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src_Core/CPU/Core.bsv b/src_Core/CPU/Core.bsv index 3ef944a..70f0e23 100644 --- a/src_Core/CPU/Core.bsv +++ b/src_Core/CPU/Core.bsv @@ -453,7 +453,11 @@ module mkCore#(CoreId coreId)(Core); endinterface); aluExe[i] <- mkAluExePipeline(aluExeInput); // truly call fetch method to train branch predictor - rule doFetchTrainBP(trainBPQ[i].notEmpty && trainBPQ[i].first.spec_bits == 0); + Bool train_ready = True; +`ifdef NO_SPEC_TRAINING + train_ready = (trainBPQ[i].first.spec_bits == 0); +`endif + rule doFetchTrainBP(trainBPQ[i].notEmpty && train_ready); let train = trainBPQ[i].first.data; trainBPQ[i].deq; fetchStage.train_predictors(