From a56deab46c81236e779db97d2b02553a393f25ed Mon Sep 17 00:00:00 2001 From: Jonathan Woodruff Date: Thu, 9 Dec 2021 12:27:57 +0000 Subject: [PATCH] Simpelest strategy for making wrongSpec not conflict with loads of rules. This triggers some assertions in the ROB what should be dealt with properly if this is going to work. --- .../RISCY_OOO/procs/lib/GlobalSpecUpdate.bsv | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src_Core/RISCY_OOO/procs/lib/GlobalSpecUpdate.bsv b/src_Core/RISCY_OOO/procs/lib/GlobalSpecUpdate.bsv index 8234e3b..28ae322 100644 --- a/src_Core/RISCY_OOO/procs/lib/GlobalSpecUpdate.bsv +++ b/src_Core/RISCY_OOO/procs/lib/GlobalSpecUpdate.bsv @@ -54,10 +54,8 @@ module mkGlobalSpecUpdate#( ); // record correct spec tags Vector#(correctSpecPortNum, RWire#(SpecTag)) correctSpecTag <- replicateM(mkRWire); - // make wrong spec conflict with correct spec - Vector#(correctSpecPortNum, PulseWire) spec_conflict <- replicateM(mkPulseWire); - // let the caller of conflictWrongSpec to be conflict with wrong spec - Vector#(conflictWrongSpecPortNum, PulseWire) wrongSpec_conflict <- replicateM(mkPulseWire); + // make wrong spec conflict with correct spec and conflictWrongSpec + PulseWire spec_conflict <- mkPulseWire; // must be a single-element fifo to ensure all pushing rules cannot fire while we are waiting // to kill. SpecFifo#(2,IncorrectSpec,1,1) incorrectSpec_ff <- mkSpecFifoCF(True); @@ -81,20 +79,14 @@ module mkGlobalSpecUpdate#( incorrectSpec_ff.specUpdate.incorrectSpeculation(x.kill_all, x.spec_tag); ifc.incorrectSpeculation(x.kill_all, x.spec_tag); rob.incorrectSpeculation(x.kill_all, x.spec_tag, x.inst_tag); - // conflict with correct spec - for(Integer i = 0; i < valueof(correctSpecPortNum); i = i+1) begin - spec_conflict[i].send; - end - // conflict with the caller of conflictWrongSpec - for(Integer i = 0; i < valueof(conflictWrongSpecPortNum); i = i+1) begin - wrongSpec_conflict[i].send; - end + // conflict with correct spec and conflictWrongSpec + spec_conflict.send; endrule Vector#(correctSpecPortNum, Put#(SpecTag)) correctVec = ?; for(Integer i = 0; i < valueof(correctSpecPortNum); i = i+1) begin correctVec[i] = (interface Put; - method Action put(SpecTag t) if (!spec_conflict[i]); + method Action put(SpecTag t) if (!spec_conflict); correctSpecTag[i].wset(t); endmethod endinterface); @@ -103,7 +95,7 @@ module mkGlobalSpecUpdate#( Vector#(conflictWrongSpecPortNum, Put#(void)) conflictWrongVec = ?; for(Integer i = 0; i < valueof(conflictWrongSpecPortNum); i = i+1) begin conflictWrongVec[i] = (interface Put; - method Action put(void x) if (!wrongSpec_conflict[i]); + method Action put(void x) if (!spec_conflict); noAction; endmethod endinterface);