From ab3219cf6eb67daa9f810381eda456ee6dbeff05 Mon Sep 17 00:00:00 2001 From: Howard Mao Date: Wed, 28 Sep 2016 16:10:32 -0700 Subject: [PATCH] don't use Scala to Chisel implicit conversions outside of rocket --- src/main/scala/coreplex/BaseCoreplex.scala | 2 +- src/main/scala/rocket/breakpoint.scala | 1 + src/main/scala/rocket/btb.scala | 1 + src/main/scala/rocket/csr.scala | 9 +++---- src/main/scala/rocket/dcache.scala | 1 + src/main/scala/rocket/fpu.scala | 1 + src/main/scala/rocket/frontend.scala | 1 + src/main/scala/rocket/ibuf.scala | 1 + src/main/scala/rocket/icache.scala | 1 + src/main/scala/rocket/idecode.scala | 1 + src/main/scala/rocket/multiplier.scala | 1 + src/main/scala/rocket/nbdcache.scala | 1 + src/main/scala/rocket/package.scala | 3 +-- src/main/scala/rocket/ptw.scala | 1 + src/main/scala/rocket/rocc.scala | 1 + src/main/scala/rocket/rocket.scala | 1 + src/main/scala/rocket/tlb.scala | 1 + src/main/scala/rocketchip/TestHarness.scala | 26 ++++++++++----------- src/main/scala/uncore/devices/Prci.scala | 2 +- src/main/scala/util/Misc.scala | 2 +- src/main/scala/util/Package.scala | 4 ---- 21 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/main/scala/coreplex/BaseCoreplex.scala b/src/main/scala/coreplex/BaseCoreplex.scala index 3120feb2..6c885148 100644 --- a/src/main/scala/coreplex/BaseCoreplex.scala +++ b/src/main/scala/coreplex/BaseCoreplex.scala @@ -148,7 +148,7 @@ abstract class BaseCoreplexModule[+L <: BaseCoreplex, +B <: BaseCoreplexBundle]( tile.interrupts.meip := plic.io.harts(plic.cfg.context(i, 'M')) tile.interrupts.seip.foreach(_ := plic.io.harts(plic.cfg.context(i, 'S'))) tile.interrupts.debug := debugModule.io.debugInterrupts(i) - tile.hartid := i + tile.hartid := UInt(i) tile.resetVector := io.resetVector } diff --git a/src/main/scala/rocket/breakpoint.scala b/src/main/scala/rocket/breakpoint.scala index 42208d5f..36767e70 100644 --- a/src/main/scala/rocket/breakpoint.scala +++ b/src/main/scala/rocket/breakpoint.scala @@ -4,6 +4,7 @@ package rocket import Chisel._ import util._ +import Chisel.ImplicitConversions._ import cde.Parameters class BPControl(implicit p: Parameters) extends CoreBundle()(p) { diff --git a/src/main/scala/rocket/btb.scala b/src/main/scala/rocket/btb.scala index d7664267..4131978d 100644 --- a/src/main/scala/rocket/btb.scala +++ b/src/main/scala/rocket/btb.scala @@ -5,6 +5,7 @@ package rocket import Chisel._ import cde.{Parameters, Field} import util._ +import Chisel.ImplicitConversions._ import uncore.agents.PseudoLRU case object BtbKey extends Field[BtbParameters] diff --git a/src/main/scala/rocket/csr.scala b/src/main/scala/rocket/csr.scala index 865b5c89..dc11f354 100644 --- a/src/main/scala/rocket/csr.scala +++ b/src/main/scala/rocket/csr.scala @@ -7,6 +7,7 @@ import Instructions._ import cde.{Parameters, Field} import uncore.devices._ import util._ +import Chisel.ImplicitConversions._ import junctions.AddrMap class MStatus extends Bundle { @@ -259,7 +260,7 @@ class CSRFile(implicit p: Parameters) extends CoreModule()(p) val s_interrupts = Mux(!reg_debug && (reg_mstatus.prv < PRV.S || (reg_mstatus.prv === PRV.S && reg_mstatus.sie)), pending_interrupts & reg_mideleg, UInt(0)) val all_interrupts = m_interrupts | s_interrupts val interruptMSB = BigInt(1) << (xLen-1) - val interruptCause = interruptMSB + PriorityEncoder(all_interrupts) + val interruptCause = UInt(interruptMSB) + PriorityEncoder(all_interrupts) io.interrupt := all_interrupts.orR && !io.singleStep || reg_singleStepped io.interrupt_cause := interruptCause io.bp := reg_bp take nBreakpoints @@ -267,7 +268,7 @@ class CSRFile(implicit p: Parameters) extends CoreModule()(p) // debug interrupts are only masked by being in debug mode when (Bool(usingDebug) && reg_dcsr.debugint && !reg_debug) { io.interrupt := true - io.interrupt_cause := interruptMSB + CSR.debugIntCause + io.interrupt_cause := UInt(interruptMSB) + CSR.debugIntCause } val system_insn = io.rw.cmd === CSR.I @@ -600,10 +601,10 @@ class CSRFile(implicit p: Parameters) extends CoreModule()(p) when (decoded_addr(CSRs.sbadaddr)) { reg_sbadaddr := wdata(vaddrBitsExtended-1,0) } when (decoded_addr(CSRs.mideleg)) { reg_mideleg := wdata & delegable_interrupts } when (decoded_addr(CSRs.medeleg)) { reg_medeleg := wdata & delegable_exceptions } - when (decoded_addr(CSRs.mscounteren)) { reg_mscounteren := wdata & delegable_counters } + when (decoded_addr(CSRs.mscounteren)) { reg_mscounteren := wdata & UInt(delegable_counters) } } if (usingUser) { - when (decoded_addr(CSRs.mucounteren)) { reg_mucounteren := wdata & delegable_counters } + when (decoded_addr(CSRs.mucounteren)) { reg_mucounteren := wdata & UInt(delegable_counters) } } if (nBreakpoints > 0) { when (decoded_addr(CSRs.tselect)) { reg_tselect := wdata } diff --git a/src/main/scala/rocket/dcache.scala b/src/main/scala/rocket/dcache.scala index e3ca3266..adbac5dc 100644 --- a/src/main/scala/rocket/dcache.scala +++ b/src/main/scala/rocket/dcache.scala @@ -10,6 +10,7 @@ import uncore.coherence._ import uncore.constants._ import uncore.util._ import util._ +import Chisel.ImplicitConversions._ import cde.{Parameters, Field} class DCacheDataReq(implicit p: Parameters) extends L1HellaCacheBundle()(p) { diff --git a/src/main/scala/rocket/fpu.scala b/src/main/scala/rocket/fpu.scala index c7997aa0..b825d1a9 100644 --- a/src/main/scala/rocket/fpu.scala +++ b/src/main/scala/rocket/fpu.scala @@ -5,6 +5,7 @@ package rocket import Chisel._ import Instructions._ import util._ +import Chisel.ImplicitConversions._ import FPConstants._ import uncore.constants.MemoryOpConstants._ import cde.{Parameters, Field} diff --git a/src/main/scala/rocket/frontend.scala b/src/main/scala/rocket/frontend.scala index cb638c62..9adaf40e 100644 --- a/src/main/scala/rocket/frontend.scala +++ b/src/main/scala/rocket/frontend.scala @@ -3,6 +3,7 @@ package rocket import Chisel._ import uncore.tilelink._ import util._ +import Chisel.ImplicitConversions._ import cde.{Parameters, Field} class FrontendReq(implicit p: Parameters) extends CoreBundle()(p) { diff --git a/src/main/scala/rocket/ibuf.scala b/src/main/scala/rocket/ibuf.scala index cffbea12..9ae99883 100644 --- a/src/main/scala/rocket/ibuf.scala +++ b/src/main/scala/rocket/ibuf.scala @@ -4,6 +4,7 @@ package rocket import Chisel._ import util._ +import Chisel.ImplicitConversions._ import cde.{Parameters, Field} class Instruction(implicit val p: Parameters) extends ParameterizedBundle with HasCoreParameters { diff --git a/src/main/scala/rocket/icache.scala b/src/main/scala/rocket/icache.scala index 6bbc0ecd..4f40228a 100644 --- a/src/main/scala/rocket/icache.scala +++ b/src/main/scala/rocket/icache.scala @@ -5,6 +5,7 @@ import uncore.agents._ import uncore.tilelink._ import uncore.util._ import util._ +import Chisel.ImplicitConversions._ import cde.{Parameters, Field} trait HasL1CacheParameters extends HasCacheParameters with HasCoreParameters { diff --git a/src/main/scala/rocket/idecode.scala b/src/main/scala/rocket/idecode.scala index a16fbf64..30fa7a8d 100644 --- a/src/main/scala/rocket/idecode.scala +++ b/src/main/scala/rocket/idecode.scala @@ -8,6 +8,7 @@ import uncore.constants.MemoryOpConstants._ import ALU._ import cde.Parameters import util._ +import Chisel.ImplicitConversions._ abstract trait DecodeConstants extends HasCoreParameters { diff --git a/src/main/scala/rocket/multiplier.scala b/src/main/scala/rocket/multiplier.scala index 0ce55917..90ed3f08 100644 --- a/src/main/scala/rocket/multiplier.scala +++ b/src/main/scala/rocket/multiplier.scala @@ -5,6 +5,7 @@ package rocket import Chisel._ import ALU._ import util._ +import Chisel.ImplicitConversions._ class MultiplierReq(dataBits: Int, tagBits: Int) extends Bundle { val fn = Bits(width = SZ_ALU_FN) diff --git a/src/main/scala/rocket/nbdcache.scala b/src/main/scala/rocket/nbdcache.scala index 515b0de8..09b20992 100644 --- a/src/main/scala/rocket/nbdcache.scala +++ b/src/main/scala/rocket/nbdcache.scala @@ -9,6 +9,7 @@ import uncore.agents._ import uncore.constants._ import uncore.util._ import util._ +import Chisel.ImplicitConversions._ import cde.{Parameters, Field} case class DCacheConfig( diff --git a/src/main/scala/rocket/package.scala b/src/main/scala/rocket/package.scala index 30368040..610f402f 100644 --- a/src/main/scala/rocket/package.scala +++ b/src/main/scala/rocket/package.scala @@ -1,4 +1,3 @@ // See LICENSE for license details. -package object rocket extends - rocket.constants.ScalarOpConstants +package object rocket extends rocket.constants.ScalarOpConstants diff --git a/src/main/scala/rocket/ptw.scala b/src/main/scala/rocket/ptw.scala index 0382d3cb..31da1358 100644 --- a/src/main/scala/rocket/ptw.scala +++ b/src/main/scala/rocket/ptw.scala @@ -6,6 +6,7 @@ import Chisel._ import uncore.agents._ import uncore.constants._ import util._ +import Chisel.ImplicitConversions._ import cde.{Parameters, Field} class PTWReq(implicit p: Parameters) extends CoreBundle()(p) { diff --git a/src/main/scala/rocket/rocc.scala b/src/main/scala/rocket/rocc.scala index fb62ada7..c0f9de9a 100644 --- a/src/main/scala/rocket/rocc.scala +++ b/src/main/scala/rocket/rocc.scala @@ -7,6 +7,7 @@ import uncore.tilelink._ import uncore.constants._ import uncore.agents.CacheName import util._ +import Chisel.ImplicitConversions._ import cde.{Parameters, Field} case object RoccMaxTaggedMemXacts extends Field[Int] diff --git a/src/main/scala/rocket/rocket.scala b/src/main/scala/rocket/rocket.scala index b63fe68b..404ed6a0 100644 --- a/src/main/scala/rocket/rocket.scala +++ b/src/main/scala/rocket/rocket.scala @@ -8,6 +8,7 @@ import uncore.agents.CacheName import uncore.constants._ import junctions.HasAddrMapParameters import util._ +import Chisel.ImplicitConversions._ import cde.{Parameters, Field} case object XLen extends Field[Int] diff --git a/src/main/scala/rocket/tlb.scala b/src/main/scala/rocket/tlb.scala index ed084bad..cf9b5bb2 100644 --- a/src/main/scala/rocket/tlb.scala +++ b/src/main/scala/rocket/tlb.scala @@ -4,6 +4,7 @@ package rocket import Chisel._ import util._ +import Chisel.ImplicitConversions._ import junctions._ import scala.math._ import cde.{Parameters, Field} diff --git a/src/main/scala/rocketchip/TestHarness.scala b/src/main/scala/rocketchip/TestHarness.scala index 4d2e4cd9..f09c9b50 100644 --- a/src/main/scala/rocketchip/TestHarness.scala +++ b/src/main/scala/rocketchip/TestHarness.scala @@ -4,9 +4,9 @@ package rocketchip import Chisel._ import cde.{Parameters, Field} -import util._ import junctions._ import junctions.NastiConstants._ +import util.LatencyPipe case object BuildExampleTop extends Field[Parameters => ExampleTop] case object SimMemLatency extends Field[Int] @@ -31,7 +31,7 @@ class TestHarness(q: Parameters) extends Module { require(dut.io.mmio_tl.isEmpty) for (int <- dut.io.interrupts) - int := false + int := Bool(false) if (dut.io.mem_axi.nonEmpty) { val memSize = p(GlobalAddrMap)("mem").size @@ -82,12 +82,12 @@ class SimAXIMem(size: BigInt)(implicit p: Parameters) extends NastiModule()(p) { val rValid = Reg(init = Bool(false)) val ar = RegEnable(io.axi.ar.bits, io.axi.ar.fire()) io.axi.ar.ready := !rValid - when (io.axi.ar.fire()) { rValid := true } + when (io.axi.ar.fire()) { rValid := Bool(true) } when (io.axi.r.fire()) { assert(ar.burst === NastiConstants.BURST_INCR) ar.addr := ar.addr + (UInt(1) << ar.size) - ar.len := ar.len - 1 - when (ar.len === UInt(0)) { rValid := false } + ar.len := ar.len - UInt(1) + when (ar.len === UInt(0)) { rValid := Bool(false) } } val w = io.axi.w.bits @@ -100,15 +100,15 @@ class SimAXIMem(size: BigInt)(implicit p: Parameters) extends NastiModule()(p) { val aw = RegEnable(io.axi.aw.bits, io.axi.aw.fire()) io.axi.aw.ready := !wValid && !bValid io.axi.w.ready := wValid - when (io.axi.b.fire()) { bValid := false } - when (io.axi.aw.fire()) { wValid := true } + when (io.axi.b.fire()) { bValid := Bool(false) } + when (io.axi.aw.fire()) { wValid := Bool(true) } when (io.axi.w.fire()) { assert(aw.burst === NastiConstants.BURST_INCR) aw.addr := aw.addr + (UInt(1) << aw.size) - aw.len := aw.len - 1 + aw.len := aw.len - UInt(1) when (aw.len === UInt(0)) { - wValid := false - bValid := true + wValid := Bool(false) + bValid := Bool(true) } def row = mem((aw.addr >> log2Ceil(nastiXDataBits/8))(log2Ceil(depth)-1, 0)) @@ -142,9 +142,9 @@ class SimDTM(implicit p: Parameters) extends BlackBox { io.reset := tbreset dutio <> io.debug - tbsuccess := dutsuccess || io.exit === 1 - when (io.exit >= 2) { - printf("*** FAILED *** (exit code = %d)\n", io.exit >> 1) + tbsuccess := dutsuccess || io.exit === UInt(1) + when (io.exit >= UInt(2)) { + printf("*** FAILED *** (exit code = %d)\n", io.exit >> UInt(1)) stop(1) } } diff --git a/src/main/scala/uncore/devices/Prci.scala b/src/main/scala/uncore/devices/Prci.scala index 13359ed1..185458db 100644 --- a/src/main/scala/uncore/devices/Prci.scala +++ b/src/main/scala/uncore/devices/Prci.scala @@ -52,7 +52,7 @@ trait CoreplexLocalInterrupterModule extends Module with HasRegMap with MixCorep val time = Seq.fill(timeWidth/regWidth)(Reg(init=UInt(0, width = regWidth))) when (io.rtcTick) { - val newTime = time.asUInt + 1 + val newTime = time.asUInt + UInt(1) for ((reg, i) <- time zip (0 until timeWidth by regWidth)) reg := newTime >> i } diff --git a/src/main/scala/util/Misc.scala b/src/main/scala/util/Misc.scala index 1c317e40..6ce8583b 100644 --- a/src/main/scala/util/Misc.scala +++ b/src/main/scala/util/Misc.scala @@ -135,5 +135,5 @@ object Random private def round(x: Double): Int = if (x.toInt.toDouble == x) x.toInt else (x.toInt + 1) & -2 private def partition(value: UInt, slices: Int) = - Seq.tabulate(slices)(i => value < round((i << value.getWidth).toDouble / slices)) + Seq.tabulate(slices)(i => value < UInt(round((i << value.getWidth).toDouble / slices))) } diff --git a/src/main/scala/util/Package.scala b/src/main/scala/util/Package.scala index fd0328ff..4c9c1916 100644 --- a/src/main/scala/util/Package.scala +++ b/src/main/scala/util/Package.scala @@ -22,10 +22,6 @@ package object util { } implicit def uintToBitPat(x: UInt): BitPat = BitPat(x) - implicit def intToUInt(x: Int): UInt = UInt(x) - implicit def bigIntToUInt(x: BigInt): UInt = UInt(x) - implicit def booleanToBool(x: Boolean): Bits = Bool(x) - implicit def intSeqToUIntSeq(x: Seq[Int]): Seq[UInt] = x.map(UInt(_)) implicit def wcToUInt(c: WideCounter): UInt = c.value implicit class UIntToAugmentedUInt(val x: UInt) extends AnyVal {