package sifive.blocks.devices.mockaon
import Chisel._
-import config._
-import regmapper._
-import uncore.tilelink2._
-import rocketchip.PeripheryBusConfig
+import chisel3.experimental.MultiIOModule
+import freechips.rocketchip.config.Parameters
+import freechips.rocketchip.regmapper._
+import freechips.rocketchip.tilelink._
import sifive.blocks.util.GenericTimer
-case class MockAONConfig(
- address: BigInt = BigInt(0x10000000),
- nBackupRegs: Int = 16) {
+case class MockAONParams(
+ address: BigInt = BigInt(0x10000000),
+ nBackupRegs: Int = 16) {
def size: Int = 0x1000
def regBytes: Int = 4
def wdogOffset: Int = 0
def pmuOffset: Int = 0x100
}
-trait HasMockAONParameters {
- val params: (MockAONConfig, Parameters)
- val c = params._1
- implicit val p = params._2
-}
-
class MockAONPMUIO extends Bundle {
val vddpaden = Bool(OUTPUT)
val dwakeup = Bool(INPUT)
val corerst = Bool(OUTPUT)
}
-trait MockAONBundle extends Bundle with HasMockAONParameters {
+trait HasMockAONBundleContents extends Bundle {
// Output of the Power Management Sequencer
- val moff = new MockAONMOffRstIO ()
+ val moff = new MockAONMOffRstIO
// This goes out to wrapper
// to be combined to create aon_rst.
val resetCauses = new ResetCauses().asInput
}
-trait MockAONModule extends Module with HasRegMap with HasMockAONParameters {
- val io: MockAONBundle
+trait HasMockAONModuleContents extends MultiIOModule with HasRegMap {
+ val io: HasMockAONBundleContents
+ val params: MockAONParams
+ val c = params
// the expectation here is that Chisel's implicit reset is aonrst,
// which is asynchronous, so don't use synchronous-reset registers.
}
-class MockAON(c: MockAONConfig)(implicit val p: Parameters)
- extends TLRegisterRouter(c.address, interrupts = 2, size = c.size, beatBytes = p(PeripheryBusConfig).beatBytes, concurrency = 1)(
- new TLRegBundle((c, p), _) with MockAONBundle)(
- new TLRegModule((c, p), _, _) with MockAONModule)
+class TLMockAON(w: Int, c: MockAONParams)(implicit p: Parameters)
+ extends TLRegisterRouter(c.address, "aon", Seq("sifive,aon0"), interrupts = 2, size = c.size, beatBytes = w, concurrency = 1)(
+ new TLRegBundle(c, _) with HasMockAONBundleContents)(
+ new TLRegModule(c, _, _) with HasMockAONModuleContents)