removed boom package and combined into example | removed example from naming | split generator file
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -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)
|
||||||
|
|||||||
16
src/main/scala/example/Generator.scala
Normal file
16
src/main/scala/example/Generator.scala
Normal 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
|
||||||
|
}
|
||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user