removed boom package and combined into example | removed example from naming | split generator file

This commit is contained in:
abejgonzalez
2019-04-20 21:18:20 -07:00
parent e9ed53424b
commit c0b0e293c5
8 changed files with 269 additions and 251 deletions

View File

@@ -42,7 +42,7 @@ def conditionalDependsOn(prj: Project): Project = {
} }
lazy val example = conditionalDependsOn(project in file(".")) lazy val example = conditionalDependsOn(project in file("."))
.dependsOn(boom) .dependsOn(boom, sifive_blocks)
.settings(commonSettings) .settings(commonSettings)
lazy val boom = (project in file("generators/boom")) lazy val boom = (project in file("generators/boom"))
@@ -60,3 +60,7 @@ lazy val `barstools-macros` = (project in file("./tools/barstools/macros/"))
.dependsOn(mdf, rocketchip, rebarFirrtl) .dependsOn(mdf, rocketchip, rebarFirrtl)
.enablePlugins(sbtassembly.AssemblyPlugin) .enablePlugins(sbtassembly.AssemblyPlugin)
.settings(commonSettings) .settings(commonSettings)
lazy val sifive_blocks = (project in file("generators/sifive-blocks"))
.dependsOn(rocketchip)
.settings(commonSettings)

View File

@@ -1,90 +0,0 @@
package boomexample
import chisel3._
import freechips.rocketchip.config.{Parameters, Config}
import freechips.rocketchip.subsystem.{WithRoccExample, WithNMemoryChannels}
import freechips.rocketchip.diplomacy.{LazyModule, ValName}
import freechips.rocketchip.devices.tilelink.BootROMParams
import freechips.rocketchip.tile.XLen
import testchipip._
class WithBootROM extends Config((site, here, up) => {
case BootROMParams => BootROMParams(
contentFileName = s"./bootrom/bootrom.rv${site(XLen)}.img")
})
object ConfigValName {
implicit val valName = ValName("TestHarness")
}
import ConfigValName._
class WithBoomExampleTop extends Config((site, here, up) => {
case BuildTop => (clock: Clock, reset: Bool, p: Parameters) => {
Module(LazyModule(new BoomExampleTop()(p)).module)
}
})
class WithPWM extends Config((site, here, up) => {
case BuildTop => (clock: Clock, reset: Bool, p: Parameters) =>
Module(LazyModule(new BoomExampleTopWithPWMTL()(p)).module)
})
class WithPWMAXI4 extends Config((site, here, up) => {
case BuildTop => (clock: Clock, reset: Bool, p: Parameters) =>
Module(LazyModule(new BoomExampleTopWithPWMAXI4()(p)).module)
})
class WithBlockDeviceModel extends Config((site, here, up) => {
case BuildTop => (clock: Clock, reset: Bool, p: Parameters) => {
val top = Module(LazyModule(new BoomExampleTopWithBlockDevice()(p)).module)
top.connectBlockDeviceModel()
top
}
})
class WithSimBlockDevice extends Config((site, here, up) => {
case BuildTop => (clock: Clock, reset: Bool, p: Parameters) => {
val top = Module(LazyModule(new BoomExampleTopWithBlockDevice()(p)).module)
top.connectSimBlockDevice(clock, reset)
top
}
})
class BaseBoomExampleConfig extends Config(
new WithBootROM ++
new boom.system.SmallBoomConfig)
class DefaultBoomExampleConfig extends Config(
new WithBoomExampleTop ++
new BaseBoomExampleConfig)
class RoccBoomExampleConfig extends Config(
new WithRoccExample ++
new DefaultBoomExampleConfig)
class PWMBoomExampleConfig extends Config(
new WithPWM ++
new BaseBoomExampleConfig)
class PWMAXI4BoomExampleConfig extends Config(
new WithPWMAXI4 ++
new BaseBoomExampleConfig)
class SimBlockDeviceBoomExampleConfig extends Config(
new WithBlockDevice ++
new WithSimBlockDevice ++
new BaseBoomExampleConfig)
class BlockDeviceModelBoomExampleConfig extends Config(
new WithBlockDevice ++
new WithBlockDeviceModel ++
new BaseBoomExampleConfig)
class DualCoreBoomExampleConfig extends Config(
// Core gets tacked onto existing list
new boom.system.WithNBoomCores(2) ++
new DefaultBoomExampleConfig)
class RV32BoomExampleConfig extends Config(
new WithBootROM ++
new boom.system.SmallRV32UnifiedBoomConfig)

View File

@@ -1,44 +0,0 @@
package boomexample
import chisel3._
import chisel3.experimental._
import firrtl.transforms.{BlackBoxResourceAnno, BlackBoxSourceHelper}
import freechips.rocketchip.diplomacy.LazyModule
import freechips.rocketchip.config.{Field, Parameters}
import freechips.rocketchip.util.GeneratorApp
case object BuildTop extends Field[(Clock, Bool, Parameters) => BoomExampleTopModule[BoomExampleTop]]
class TestHarness(implicit val p: Parameters) extends Module {
val io = IO(new Bundle {
val success = Output(Bool())
})
val dut = p(BuildTop)(clock, reset.toBool, p)
dut.debug := DontCare
dut.connectSimAXIMem()
dut.connectSimAXIMMIO()
dut.dontTouchPorts()
dut.tieOffInterrupts()
dut.l2_frontend_bus_axi4.foreach(axi => {
axi.tieoff()
experimental.DataMirror.directionOf(axi.ar.ready) match {
case core.ActualDirection.Input =>
axi.r.bits := DontCare
axi.b.bits := DontCare
case core.ActualDirection.Output =>
axi.aw.bits := DontCare
axi.ar.bits := DontCare
axi.w.bits := DontCare
}
})
io.success := dut.connectSimSerial()
}
object Generator extends GeneratorApp {
val longName = names.topModuleProject + "." + names.topModuleClass + "." + names.configs
generateFirrtl
generateAnno
generateTestSuiteMakefrags
generateArtefacts
}

View File

@@ -1,54 +0,0 @@
package boomexample
import chisel3._
import freechips.rocketchip.subsystem._
import freechips.rocketchip.system._
import freechips.rocketchip.config.Parameters
import freechips.rocketchip.devices.tilelink._
import freechips.rocketchip.util.DontTouch
import testchipip._
import example.{HasPeripheryPWMTL, HasPeripheryPWMAXI4, HasPeripheryPWMTLModuleImp, HasPeripheryPWMAXI4ModuleImp}
//---------------------------------------------------------------------------------------------------------
class BoomExampleTop(implicit p: Parameters) extends boom.system.ExampleBoomSystem
with HasNoDebug
with HasPeripherySerial {
override lazy val module = new BoomExampleTopModule(this)
}
class BoomExampleTopModule[+L <: BoomExampleTop](l: L) extends boom.system.ExampleBoomSystemModule(l)
with HasRTCModuleImp
with HasNoDebugModuleImp
with HasPeripherySerialModuleImp
with DontTouch
//---------------------------------------------------------------------------------------------------------
class BoomExampleTopWithPWMTL(implicit p: Parameters) extends BoomExampleTop
with HasPeripheryPWMTL {
override lazy val module = new BoomExampleTopWithPWMTLModule(this)
}
class BoomExampleTopWithPWMTLModule(l: BoomExampleTopWithPWMTL) extends BoomExampleTopModule(l)
with HasPeripheryPWMTLModuleImp
//---------------------------------------------------------------------------------------------------------
class BoomExampleTopWithPWMAXI4(implicit p: Parameters) extends BoomExampleTop
with HasPeripheryPWMAXI4 {
override lazy val module = new BoomExampleTopWithPWMAXI4Module(this)
}
class BoomExampleTopWithPWMAXI4Module(l: BoomExampleTopWithPWMAXI4) extends BoomExampleTopModule(l)
with HasPeripheryPWMAXI4ModuleImp
//---------------------------------------------------------------------------------------------------------
class BoomExampleTopWithBlockDevice(implicit p: Parameters) extends BoomExampleTop
with HasPeripheryBlockDevice {
override lazy val module = new BoomExampleTopWithBlockDeviceModule(this)
}
class BoomExampleTopWithBlockDeviceModule(l: BoomExampleTopWithBlockDevice) extends BoomExampleTopModule(l)
with HasPeripheryBlockDeviceModuleImp

View File

@@ -8,77 +8,190 @@ import freechips.rocketchip.devices.tilelink.BootROMParams
import freechips.rocketchip.tile.XLen import freechips.rocketchip.tile.XLen
import testchipip._ import testchipip._
/**
* Class to specify where the BootRom file is (from `rebar` top)
*/
class WithBootROM extends Config((site, here, up) => { class WithBootROM extends Config((site, here, up) => {
case BootROMParams => BootROMParams( case BootROMParams => BootROMParams(
contentFileName = s"./bootrom/bootrom.rv${site(XLen)}.img") contentFileName = s"./bootrom/bootrom.rv${site(XLen)}.img")
}) })
/**
* TODO: Why do we need this?
*/
object ConfigValName { object ConfigValName {
implicit val valName = ValName("TestHarness") implicit val valName = ValName("TestHarness")
} }
import ConfigValName._ import ConfigValName._
class WithExampleTop extends Config((site, here, up) => { // -------------------------------
case BuildTop => (clock: Clock, reset: Bool, p: Parameters) => { // Rocket Top Level System Configs
Module(LazyModule(new ExampleTop()(p)).module) // -------------------------------
/**
* Class to specify a "plain" top level rocket-chip system
*/
class WithNormalRocketTop extends Config((site, here, up) => {
case BuildRocketTop => (clock: Clock, reset: Bool, p: Parameters) => {
Module(LazyModule(new RocketTop()(p)).module)
} }
}) })
class WithPWM extends Config((site, here, up) => { /**
case BuildTop => (clock: Clock, reset: Bool, p: Parameters) => * Class to specify a top level rocket-chip system with PWM
Module(LazyModule(new ExampleTopWithPWMTL()(p)).module) */
class WithPWMRocketTop extends Config((site, here, up) => {
case BuildRocketTop => (clock: Clock, reset: Bool, p: Parameters) =>
Module(LazyModule(new RocketTopWithPWMTL()(p)).module)
}) })
class WithPWMAXI4 extends Config((site, here, up) => { /**
case BuildTop => (clock: Clock, reset: Bool, p: Parameters) => * Class to specify a top level rocket-chip system with a PWM AXI4
Module(LazyModule(new ExampleTopWithPWMAXI4()(p)).module) */
class WithPWMAXI4RocketTop extends Config((site, here, up) => {
case BuildRocketTop => (clock: Clock, reset: Bool, p: Parameters) =>
Module(LazyModule(new RocketTopWithPWMAXI4()(p)).module)
}) })
class WithBlockDeviceModel extends Config((site, here, up) => { /**
case BuildTop => (clock: Clock, reset: Bool, p: Parameters) => { * Class to specify a top level rocket-chip system with a block device
val top = Module(LazyModule(new ExampleTopWithBlockDevice()(p)).module) */
class WithBlockDeviceModelRocketTop extends Config((site, here, up) => {
case BuildRocketTop => (clock: Clock, reset: Bool, p: Parameters) => {
val top = Module(LazyModule(new RocketTopWithBlockDevice()(p)).module)
top.connectBlockDeviceModel() top.connectBlockDeviceModel()
top top
} }
}) })
class WithSimBlockDevice extends Config((site, here, up) => { /**
case BuildTop => (clock: Clock, reset: Bool, p: Parameters) => { * Class to specify a top level rocket-chip system with a simulator block device
val top = Module(LazyModule(new ExampleTopWithBlockDevice()(p)).module) */
class WithSimBlockDeviceRocketTop extends Config((site, here, up) => {
case BuildRocketTop => (clock: Clock, reset: Bool, p: Parameters) => {
val top = Module(LazyModule(new RocketTopWithBlockDevice()(p)).module)
top.connectSimBlockDevice(clock, reset) top.connectSimBlockDevice(clock, reset)
top top
} }
}) })
class BaseExampleConfig extends Config( // --------------
// Rocket Configs
// --------------
class BaseRocketConfig extends Config(
new WithBootROM ++ new WithBootROM ++
new freechips.rocketchip.system.DefaultConfig) new freechips.rocketchip.system.DefaultConfig)
class DefaultExampleConfig extends Config( class DefaultRocketConfig extends Config(
new WithExampleTop ++ new BaseExampleConfig) new WithNormalRocketTop ++
new BaseRocketConfig)
class RoccExampleConfig extends Config( class RoccRocketConfig extends Config(
new WithRoccExample ++ new DefaultExampleConfig) new WithRoccExample ++
new DefaultRocketConfig)
class PWMConfig extends Config(new WithPWM ++ new BaseExampleConfig) class PWMRocketConfig extends Config(
new WithPWMRocketTop ++
new BaseRocketConfig)
class PWMAXI4Config extends Config(new WithPWMAXI4 ++ new BaseExampleConfig) class PWMAXI4RocketConfig extends Config(
new WithPWMAXI4RocketTop ++
new BaseRocketConfig)
class SimBlockDeviceConfig extends Config( class SimBlockDeviceRocketConfig extends Config(
new WithBlockDevice ++ new WithSimBlockDevice ++ new BaseExampleConfig) new WithBlockDevice ++
new WithSimBlockDeviceRocketTop ++
new BaseRocketConfig)
class BlockDeviceModelConfig extends Config( class BlockDeviceModelRocketConfig extends Config(
new WithBlockDevice ++ new WithBlockDeviceModel ++ new BaseExampleConfig) new WithBlockDevice ++
new WithBlockDeviceModelRocketTop ++
new BaseRocketConfig)
class WithTwoTrackers extends WithNBlockDeviceTrackers(2) class DualCoreRocketConfig extends Config(
class WithFourTrackers extends WithNBlockDeviceTrackers(4) new WithNBigCores(2) ++
new DefaultRocketConfig)
class WithTwoMemChannels extends WithNMemoryChannels(2) class RV32RocketConfig extends Config(
class WithFourMemChannels extends WithNMemoryChannels(4) new WithRV32 ++
new DefaultRocketConfig)
class DualCoreConfig extends Config( // -----------------------------
// BOOM Top Level System Configs
// -----------------------------
class WithNormalBoomTop extends Config((site, here, up) => {
case BuildBoomTop => (clock: Clock, reset: Bool, p: Parameters) => {
Module(LazyModule(new BoomTop()(p)).module)
}
})
class WithPWMBoomTop extends Config((site, here, up) => {
case BuildBoomTop => (clock: Clock, reset: Bool, p: Parameters) =>
Module(LazyModule(new BoomTopWithPWMTL()(p)).module)
})
class WithPWMAXI4BoomTop extends Config((site, here, up) => {
case BuildBoomTop => (clock: Clock, reset: Bool, p: Parameters) =>
Module(LazyModule(new BoomTopWithPWMAXI4()(p)).module)
})
class WithBlockDeviceModelBoomTop extends Config((site, here, up) => {
case BuildBoomTop => (clock: Clock, reset: Bool, p: Parameters) => {
val top = Module(LazyModule(new BoomTopWithBlockDevice()(p)).module)
top.connectBlockDeviceModel()
top
}
})
class WithSimBlockDeviceBoomTop extends Config((site, here, up) => {
case BuildBoomTop => (clock: Clock, reset: Bool, p: Parameters) => {
val top = Module(LazyModule(new BoomTopWithBlockDevice()(p)).module)
top.connectSimBlockDevice(clock, reset)
top
}
})
// ------------
// BOOM Configs
// ------------
class BaseBoomConfig extends Config(
new WithBootROM ++
new boom.system.SmallBoomConfig)
class DefaultBoomConfig extends Config(
new WithNormalBoomTop ++
new BaseBoomConfig)
class RoccBoomConfig extends Config(
new WithRoccExample ++
new DefaultBoomConfig)
class PWMBoomConfig extends Config(
new WithPWMBoomTop ++
new BaseBoomConfig)
class PWMAXI4BoomConfig extends Config(
new WithPWMAXI4BoomTop ++
new BaseBoomConfig)
class SimBlockDeviceBoomConfig extends Config(
new WithBlockDevice ++
new WithSimBlockDeviceBoomTop ++
new BaseBoomConfig)
class BlockDeviceModelBoomConfig extends Config(
new WithBlockDevice ++
new WithBlockDeviceModelBoomTop ++
new BaseBoomConfig)
class DualCoreBoomConfig extends Config(
// Core gets tacked onto existing list // Core gets tacked onto existing list
new WithNBigCores(2) ++ new DefaultExampleConfig) new boom.system.WithNBoomCores(2) ++
new DefaultBoomConfig)
class RV32ExampleConfig extends Config( class RV32BoomConfig extends Config(
new WithRV32 ++ new DefaultExampleConfig) new WithBootROM ++
new boom.system.SmallRV32UnifiedBoomConfig)

View File

@@ -0,0 +1,16 @@
package example
import chisel3._
import chisel3.experimental._
import firrtl.transforms.{BlackBoxResourceAnno, BlackBoxSourceHelper}
import freechips.rocketchip.diplomacy.LazyModule
import freechips.rocketchip.config.{Field, Parameters}
import freechips.rocketchip.util.GeneratorApp
object Generator extends GeneratorApp {
val longName = names.topModuleProject + "." + names.topModuleClass + "." + names.configs
generateFirrtl
generateAnno
generateTestSuiteMakefrags
generateArtefacts
}

View File

@@ -7,14 +7,18 @@ import freechips.rocketchip.diplomacy.LazyModule
import freechips.rocketchip.config.{Field, Parameters} import freechips.rocketchip.config.{Field, Parameters}
import freechips.rocketchip.util.GeneratorApp import freechips.rocketchip.util.GeneratorApp
case object BuildTop extends Field[(Clock, Bool, Parameters) => ExampleTopModule[ExampleTop]] // -------------------
// Rocket Test Harness
// -------------------
class TestHarness(implicit val p: Parameters) extends Module { case object BuildRocketTop extends Field[(Clock, Bool, Parameters) => RocketTopModule[RocketTop]]
class RocketTestHarness(implicit val p: Parameters) extends Module {
val io = IO(new Bundle { val io = IO(new Bundle {
val success = Output(Bool()) val success = Output(Bool())
}) })
val dut = p(BuildTop)(clock, reset.toBool, p) val dut = p(BuildRocketTop)(clock, reset.toBool, p)
dut.debug := DontCare dut.debug := DontCare
dut.connectSimAXIMem() dut.connectSimAXIMem()
dut.connectSimAXIMMIO() dut.connectSimAXIMMIO()
@@ -35,10 +39,34 @@ class TestHarness(implicit val p: Parameters) extends Module {
io.success := dut.connectSimSerial() io.success := dut.connectSimSerial()
} }
object Generator extends GeneratorApp { // -----------------
val longName = names.topModuleProject + "." + names.topModuleClass + "." + names.configs // BOOM Test Harness
generateFirrtl // -----------------
generateAnno
generateTestSuiteMakefrags case object BuildBoomTop extends Field[(Clock, Bool, Parameters) => BoomTopModule[BoomTop]]
generateArtefacts
class BoomTestHarness(implicit val p: Parameters) extends Module {
val io = IO(new Bundle {
val success = Output(Bool())
})
val dut = p(BuildBoomTop)(clock, reset.toBool, p)
dut.debug := DontCare
dut.connectSimAXIMem()
dut.connectSimAXIMMIO()
dut.dontTouchPorts()
dut.tieOffInterrupts()
dut.l2_frontend_bus_axi4.foreach(axi => {
axi.tieoff()
experimental.DataMirror.directionOf(axi.ar.ready) match {
case core.ActualDirection.Input =>
axi.r.bits := DontCare
axi.b.bits := DontCare
case core.ActualDirection.Output =>
axi.aw.bits := DontCare
axi.ar.bits := DontCare
axi.w.bits := DontCare
}
})
io.success := dut.connectSimSerial()
} }

View File

@@ -8,54 +8,99 @@ import freechips.rocketchip.devices.tilelink._
import freechips.rocketchip.util.DontTouch import freechips.rocketchip.util.DontTouch
import testchipip._ import testchipip._
//--------------------------------------------------------------------------------------------------------- // ------------------------
// Rocket Top Level Systems
// ------------------------
class ExampleTop(implicit p: Parameters) extends ExampleRocketSystem //RocketSubsystem class RocketTop(implicit p: Parameters) extends RocketSystem
with CanHaveMasterAXI4MemPort with CanHaveMasterAXI4MemPort
with HasPeripheryBootROM with HasPeripheryBootROM
// with HasSystemErrorSlave
// with HasSyncExtInterrupts
with HasNoDebug with HasNoDebug
with HasPeripherySerial { with HasPeripherySerial {
override lazy val module = new ExampleTopModule(this) override lazy val module = new RocketTopModule(this)
} }
class ExampleTopModule[+L <: ExampleTop](l: L) extends ExampleRocketSystemModuleImp(l) // RocketSubsystemModuleImp(l) class RocketTopModule[+L <: RocketTop](l: L) extends RocketSystemModuleImp(l)
with HasRTCModuleImp with HasRTCModuleImp
with CanHaveMasterAXI4MemPortModuleImp with CanHaveMasterAXI4MemPortModuleImp
with HasPeripheryBootROMModuleImp with HasPeripheryBootROMModuleImp
// with HasExtInterruptsModuleImp
with HasNoDebugModuleImp with HasNoDebugModuleImp
with HasPeripherySerialModuleImp with HasPeripherySerialModuleImp
with DontTouch with DontTouch
//--------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------
class ExampleTopWithPWMTL(implicit p: Parameters) extends ExampleTop class RocketTopWithPWMTL(implicit p: Parameters) extends RocketTop
with HasPeripheryPWMTL { with HasPeripheryPWMTL {
override lazy val module = new ExampleTopWithPWMTLModule(this) override lazy val module = new RocketTopWithPWMTLModule(this)
} }
class ExampleTopWithPWMTLModule(l: ExampleTopWithPWMTL) class RocketTopWithPWMTLModule(l: RocketTopWithPWMTL)
extends ExampleTopModule(l) with HasPeripheryPWMTLModuleImp extends RocketTopModule(l) with HasPeripheryPWMTLModuleImp
//--------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------
class ExampleTopWithPWMAXI4(implicit p: Parameters) extends ExampleTop class RocketTopWithPWMAXI4(implicit p: Parameters) extends RocketTop
with HasPeripheryPWMAXI4 { with HasPeripheryPWMAXI4 {
override lazy val module = new ExampleTopWithPWMAXI4Module(this) override lazy val module = new RocketTopWithPWMAXI4Module(this)
} }
class ExampleTopWithPWMAXI4Module(l: ExampleTopWithPWMAXI4) class RocketTopWithPWMAXI4Module(l: RocketTopWithPWMAXI4)
extends ExampleTopModule(l) with HasPeripheryPWMAXI4ModuleImp extends RocketTopModule(l) with HasPeripheryPWMAXI4ModuleImp
//--------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------
class ExampleTopWithBlockDevice(implicit p: Parameters) extends ExampleTop class RocketTopWithBlockDevice(implicit p: Parameters) extends RocketTop
with HasPeripheryBlockDevice { with HasPeripheryBlockDevice {
override lazy val module = new ExampleTopWithBlockDeviceModule(this) override lazy val module = new RocketTopWithBlockDeviceModule(this)
} }
class ExampleTopWithBlockDeviceModule(l: ExampleTopWithBlockDevice) class RocketTopWithBlockDeviceModule(l: RocketTopWithBlockDevice)
extends ExampleTopModule(l) extends RocketTopModule(l)
with HasPeripheryBlockDeviceModuleImp
// ----------------------
// BOOM Top Level Systems
// ----------------------
class BoomTop(implicit p: Parameters) extends boom.system.BoomSystem
with HasNoDebug
with HasPeripherySerial {
override lazy val module = new BoomTopModule(this)
}
class BoomTopModule[+L <: BoomTop](l: L) extends boom.system.BoomSystemModule(l)
with HasRTCModuleImp
with HasNoDebugModuleImp
with HasPeripherySerialModuleImp
with DontTouch
//---------------------------------------------------------------------------------------------------------
class BoomTopWithPWMTL(implicit p: Parameters) extends BoomTop
with HasPeripheryPWMTL {
override lazy val module = new BoomTopWithPWMTLModule(this)
}
class BoomTopWithPWMTLModule(l: BoomTopWithPWMTL) extends BoomTopModule(l)
with HasPeripheryPWMTLModuleImp
//---------------------------------------------------------------------------------------------------------
class BoomTopWithPWMAXI4(implicit p: Parameters) extends BoomTop
with HasPeripheryPWMAXI4 {
override lazy val module = new BoomTopWithPWMAXI4Module(this)
}
class BoomTopWithPWMAXI4Module(l: BoomTopWithPWMAXI4) extends BoomTopModule(l)
with HasPeripheryPWMAXI4ModuleImp
//---------------------------------------------------------------------------------------------------------
class BoomTopWithBlockDevice(implicit p: Parameters) extends BoomTop
with HasPeripheryBlockDevice {
override lazy val module = new BoomTopWithBlockDeviceModule(this)
}
class BoomTopWithBlockDeviceModule(l: BoomTopWithBlockDevice) extends BoomTopModule(l)
with HasPeripheryBlockDeviceModuleImp with HasPeripheryBlockDeviceModuleImp