periphery: convert periphery bundle traits to work with system-level multi-io module
[sifive-blocks.git] / src / main / scala / devices / mockaon / MockAONPeriphery.scala
index 1f99c313dfe3351ec705274f071e9118e265a5dd..91fa4fb93273e509c194f77e84142bcdb3f4f528 100644 (file)
@@ -3,20 +3,14 @@ package sifive.blocks.devices.mockaon
 
 import Chisel._
 import config.Field
-import coreplex.CoreplexRISCVPlatform
-import diplomacy.LazyModule
-import rocketchip.{
-  HasTopLevelNetworks,
-  HasTopLevelNetworksBundle,
-  HasTopLevelNetworksModule
-}
+import diplomacy.{LazyModule, LazyMultiIOModuleImp}
+import rocketchip.{HasSystemNetworks, HasCoreplexRISCVPlatform}
 import uncore.tilelink2.{IntXing, TLAsyncCrossingSource, TLFragmenter}
+import util.ResetCatchAndSync
 
 case object PeripheryMockAONKey extends Field[MockAONParams]
 
-trait HasPeripheryMockAON extends HasTopLevelNetworks {
-  val coreplex: CoreplexRISCVPlatform
-
+trait HasPeripheryMockAON extends HasSystemNetworks with HasCoreplexRISCVPlatform {
   // We override the clock & Reset here so that all synchronizers, etc
   // are in the proper clock domain.
   val mockAONParams= p(PeripheryMockAONKey)
@@ -27,15 +21,18 @@ trait HasPeripheryMockAON extends HasTopLevelNetworks {
   intBus.intnode := aon_int.intnode
 }
 
-trait HasPeripheryMockAONBundle extends HasTopLevelNetworksBundle {
-  val aon = new MockAONWrapperBundle()
+trait HasPeripheryMockAONBundle {
+  val aon: MockAONWrapperBundle
+  def coreResetCatchAndSync(core_clock: Clock) = {
+    ResetCatchAndSync(core_clock, aon.rsts.corerst, 20)
+  }
 }
 
-trait HasPeripheryMockAONModule extends HasTopLevelNetworksModule {
+trait HasPeripheryMockAONModuleImp extends LazyMultiIOModuleImp with HasPeripheryMockAONBundle {
   val outer: HasPeripheryMockAON
-  val io: HasPeripheryMockAONBundle
+  val aon = IO(new MockAONWrapperBundle)
 
-  io.aon <> outer.aon.module.io
+  aon <> outer.aon.module.io
 
   // Explicit clock & reset are unused in MockAONWrapper.
   // Tie  to check this assumption.