diff --git a/src/main/scala/rocketchip/BaseTop.scala b/src/main/scala/rocketchip/BaseTop.scala index 756951ad..3cec7521 100644 --- a/src/main/scala/rocketchip/BaseTop.scala +++ b/src/main/scala/rocketchip/BaseTop.scala @@ -67,11 +67,13 @@ abstract class BaseTop(q: Parameters) extends LazyModule { TopModule.contents = Some(this) } -abstract class BaseTopBundle(val p: Parameters) extends Bundle { +abstract class BaseTopBundle[+L <: BaseTop]( + val p: Parameters, + val outer: L) extends Bundle { val success = Bool(OUTPUT) } -abstract class BaseTopModule[+L <: BaseTop, +B <: BaseTopBundle]( +abstract class BaseTopModule[+L <: BaseTop, +B <: BaseTopBundle[L]]( val p: Parameters, val outer: L, val io: B) extends LazyModuleImp(outer) { diff --git a/src/main/scala/rocketchip/ExampleTop.scala b/src/main/scala/rocketchip/ExampleTop.scala index 35b0d74c..03a67412 100644 --- a/src/main/scala/rocketchip/ExampleTop.scala +++ b/src/main/scala/rocketchip/ExampleTop.scala @@ -17,10 +17,10 @@ class ExampleTop(q: Parameters) extends BaseTop(q) with PeripheryMasterMem with PeripheryMasterMMIO with PeripherySlave { - override lazy val module = Module(new ExampleTopModule(p, this, new ExampleTopBundle(p))) + override lazy val module = Module(new ExampleTopModule(p, this, new ExampleTopBundle(p, this))) } -class ExampleTopBundle(p: Parameters) extends BaseTopBundle(p) +class ExampleTopBundle[+L <: ExampleTop](p: Parameters, l: L) extends BaseTopBundle(p, l) with PeripheryBootROMBundle with PeripheryDebugBundle with PeripheryExtInterruptsBundle @@ -29,7 +29,7 @@ class ExampleTopBundle(p: Parameters) extends BaseTopBundle(p) with PeripheryMasterMMIOBundle with PeripherySlaveBundle -class ExampleTopModule[+L <: ExampleTop, +B <: ExampleTopBundle](p: Parameters, l: L, b: B) extends BaseTopModule(p, l, b) +class ExampleTopModule[+L <: ExampleTop, +B <: ExampleTopBundle[L]](p: Parameters, l: L, b: B) extends BaseTopModule(p, l, b) with PeripheryBootROMModule with PeripheryDebugModule with PeripheryExtInterruptsModule @@ -43,11 +43,11 @@ class ExampleTopModule[+L <: ExampleTop, +B <: ExampleTopBundle](p: Parameters, /** Example Top with TestRAM */ class ExampleTopWithTestRAM(q: Parameters) extends ExampleTop(q) with PeripheryTestRAM { - override lazy val module = Module(new ExampleTopWithTestRAMModule(p, this, new ExampleTopWithTestRAMBundle(p))) + override lazy val module = Module(new ExampleTopWithTestRAMModule(p, this, new ExampleTopWithTestRAMBundle(p, this))) } -class ExampleTopWithTestRAMBundle(p: Parameters) extends ExampleTopBundle(p) +class ExampleTopWithTestRAMBundle[+L <: ExampleTopWithTestRAM](p: Parameters, l: L) extends ExampleTopBundle(p, l) with PeripheryTestRAMBundle -class ExampleTopWithTestRAMModule[+L <: ExampleTopWithTestRAM, +B <: ExampleTopWithTestRAMBundle](p: Parameters, l: L, b: B) extends ExampleTopModule(p, l, b) +class ExampleTopWithTestRAMModule[+L <: ExampleTopWithTestRAM, +B <: ExampleTopWithTestRAMBundle[L]](p: Parameters, l: L, b: B) extends ExampleTopModule(p, l, b) with PeripheryTestRAMModule