Fixes in fetch for non-4 instructionLanes - These fixups allow the kelvin_sw_test suite to pass on 1, 2, and 4 instructionLanes. Change-Id: I6e7efe36d9f562765ce4a6617fa377e6f87cb7cf
diff --git a/hdl/chisel/src/kelvin/scalar/Fetch.scala b/hdl/chisel/src/kelvin/scalar/Fetch.scala index d6de873..232d89f 100644 --- a/hdl/chisel/src/kelvin/scalar/Fetch.scala +++ b/hdl/chisel/src/kelvin/scalar/Fetch.scala
@@ -287,8 +287,8 @@ val match1 = l0valid(addr(p.instructionLanes - 1)(indexMsb,indexLsb)) && addr(p.instructionLanes - 1)(tagMsb,tagLsb) === VecAt(l0tag, addr(p.instructionLanes - 1)(indexMsb,indexLsb)) - val vvalid = VecInit((0 until p.instructionLanes).reverse.map(x => - Mux(addr(0)(2 + log2Ceil(p.instructionLanes),2) <= (4+x).U, match0, match1))) + val vvalid = VecInit((0 until p.instructionLanes).map(x => + Mux(addr(0)(4,2) <= (7 - x).U, match0, match1))) val muxbits0 = VecAt(l0data, addr(0)(indexMsb,indexLsb)) val muxbits1 = VecAt(l0data, addr(p.instructionLanes - 1)(indexMsb,indexLsb)) @@ -314,20 +314,16 @@ val valid = branch.map(x => x.valid).reduce(_ || _) - val addr = VecInit((0 until branch.length).map(x => - MuxCase(branch(branch.length - 1).value + (x * 4).U, ( - (0 until branch.length - 1).map(y => - branch(y).valid -> (branch(y).value + (x * 4).U) - ) - )))) + val addrBase = MuxCase(branch(branch.length - 1).value, (0 until branch.length - 1).map(x => branch(x).valid -> branch(x).value)) + val addr = VecInit((0 until branch.length).map(x => addrBase + (x * 4).U)) val match0 = l0valid(addr(0)(indexMsb,indexLsb)) && addr(0)(tagMsb,tagLsb) === VecAt(l0tag, addr(0)(indexMsb,indexLsb)) val match1 = l0valid(addr(branch.length - 1)(indexMsb,indexLsb)) && addr(branch.length - 1)(tagMsb,tagLsb) === VecAt(l0tag, addr(branch.length - 1)(indexMsb,indexLsb)) - val vvalid = VecInit((0 until branch.length).reverse.map(x => - Mux(addr(0)(2 + log2Ceil(branch.length),2) <= (4 + x).U, match0, match1))) + val vvalid = VecInit((0 until branch.length).map(x => + Mux(addr(0)(4,2) <= (7 - x).U, match0, match1))) val muxbits0 = VecAt(l0data, addr(0)(indexMsb,indexLsb)) val muxbits1 = VecAt(l0data, addr(branch.length - 1)(indexMsb,indexLsb))