From 7e6591b5ea1aff4ac77fbf6d3236fc56a55a134e Mon Sep 17 00:00:00 2001 From: abejgonzalez Date: Fri, 24 May 2019 17:58:12 -0700 Subject: [PATCH 1/4] add multi-rocc and show small example --- .../example/src/main/scala/ConfigMixins.scala | 40 +++++++++++++++++++ .../example/src/main/scala/Configs.scala | 14 +++++++ 2 files changed, 54 insertions(+) diff --git a/generators/example/src/main/scala/ConfigMixins.scala b/generators/example/src/main/scala/ConfigMixins.scala index f5e56411..0c304d60 100644 --- a/generators/example/src/main/scala/ConfigMixins.scala +++ b/generators/example/src/main/scala/ConfigMixins.scala @@ -106,3 +106,43 @@ class WithGPIOBoomRocketTop extends Config((site, here, up) => { top } }) + +// ------------------ +// Multi-RoCC Support +// ------------------ + +/** + * Map from a hartId to a particular RoCC accelerator + */ +case object MultiRoCCKey extends Field[Map[Int, Seq[Parameters => LazyRoCC]]](Map.empty[Int, Seq[Parameters => LazyRoCC]]) + +/** + * Mixin to enable different RoCCs based on the hartId + */ +class WithMultiRoCC extends Config((site, here, up) => { + case BuildRoCC => site(MultiRoCCKey).getOrElse(site(TileKey).hartId, Nil) +}) + +/** + * Mixin to add Hwachas to cores based on hart + * + * For ex: + * Core 0, 1, 2, 3 have been defined earlier + * with hartIds of 0, 1, 2, 3 respectively + * And you call WithMultiRoCCHwacha(Seq(0,1)) + * Then Core 0 and 1 will get a Hwacha + * + * @param harts Seq of harts to specifiy which will get a Hwacha + */ +class WithMultiRoCCHwacha(harts: Seq[Int]) extends Config((site, here, up) => { + case MultiRoCCKey => { + require(harts.max <= ((up(RocketTilesKey, site).length + up(BoomTilesKey, site).length) - 1)) + up(MultiRoCCKey, site) ++ harts.distinct.map{ i => + (i -> Seq((p: Parameters) => { + implicit val q = p + implicit val v = implicitly[ValName] + LazyModule(new Hwacha()(p)) + })) + } + } +}) diff --git a/generators/example/src/main/scala/Configs.scala b/generators/example/src/main/scala/Configs.scala index edf1be75..9338f4e7 100644 --- a/generators/example/src/main/scala/Configs.scala +++ b/generators/example/src/main/scala/Configs.scala @@ -216,6 +216,20 @@ class DualCoreBoomAndOneRocketConfig extends Config( new freechips.rocketchip.subsystem.WithNBigCores(1) ++ new freechips.rocketchip.system.BaseConfig) +class DualCoreBoomAndOneHwachaRocketConfig extends Config( + new WithNormalBoomAndRocketTop ++ + new WithBootROM ++ + new WithMultiRoCC ++ + new WithMultiRoCCHwacha(Seq(0)) ++ // put Hwacha just on hart0 which was renumbered to Rocket + new boom.system.WithRenumberHarts ++ + new hwacha.DefaultHwachaConfig ++ + new boom.common.WithRVC ++ + new boom.common.DefaultBoomConfig ++ + new boom.system.WithNBoomCores(2) ++ + new freechips.rocketchip.subsystem.WithoutTLMonitors ++ + new freechips.rocketchip.subsystem.WithNBigCores(1) ++ + new freechips.rocketchip.system.BaseConfig) + class RV32BoomAndRocketConfig extends Config( new WithNormalBoomRocketTop ++ new WithBootROM ++ From 41b4637c293eafa1021d4145b011d52bc7087b79 Mon Sep 17 00:00:00 2001 From: abejgonzalez Date: Fri, 24 May 2019 21:13:14 -0700 Subject: [PATCH 2/4] build and name hwacha correctly --- generators/boom | 2 +- .../example/src/main/scala/ConfigMixins.scala | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/generators/boom b/generators/boom index 92313af2..2f8c419f 160000 --- a/generators/boom +++ b/generators/boom @@ -1 +1 @@ -Subproject commit 92313af2a0ed4d8a93591a08f42ede1a0ffd808a +Subproject commit 2f8c419ff8fa7d848d0d92d4977885cb1e1fa5b3 diff --git a/generators/example/src/main/scala/ConfigMixins.scala b/generators/example/src/main/scala/ConfigMixins.scala index 0c304d60..69e2b08b 100644 --- a/generators/example/src/main/scala/ConfigMixins.scala +++ b/generators/example/src/main/scala/ConfigMixins.scala @@ -3,14 +3,18 @@ package example import chisel3._ import chisel3.util.{log2Up} -import freechips.rocketchip.config.{Parameters, Config} -import freechips.rocketchip.subsystem.{WithRoccExample, WithNMemoryChannels, WithNBigCores, WithRV32} +import freechips.rocketchip.config.{Field, Parameters, Config} +import freechips.rocketchip.subsystem.{RocketTilesKey, WithRoccExample, WithNMemoryChannels, WithNBigCores, WithRV32} import freechips.rocketchip.diplomacy.{LazyModule, ValName} import freechips.rocketchip.devices.tilelink.BootROMParams -import freechips.rocketchip.tile.{XLen} +import freechips.rocketchip.tile.{XLen, BuildRoCC, TileKey, LazyRoCC} + +import boom.system.{BoomTilesKey} import testchipip._ +import hwacha.{Hwacha} + import sifive.blocks.devices.gpio._ /** @@ -132,16 +136,14 @@ class WithMultiRoCC extends Config((site, here, up) => { * And you call WithMultiRoCCHwacha(Seq(0,1)) * Then Core 0 and 1 will get a Hwacha * - * @param harts Seq of harts to specifiy which will get a Hwacha + * @param harts Seq of harts to specify which will get a Hwacha */ class WithMultiRoCCHwacha(harts: Seq[Int]) extends Config((site, here, up) => { case MultiRoCCKey => { require(harts.max <= ((up(RocketTilesKey, site).length + up(BoomTilesKey, site).length) - 1)) up(MultiRoCCKey, site) ++ harts.distinct.map{ i => (i -> Seq((p: Parameters) => { - implicit val q = p - implicit val v = implicitly[ValName] - LazyModule(new Hwacha()(p)) + LazyModule(new Hwacha()(p)).suggestName("hwacha") })) } } From 4ad54ced98326078ace1bb5cfdeb6be136659e56 Mon Sep 17 00:00:00 2001 From: abejgonzalez Date: Sun, 26 May 2019 17:44:27 -0700 Subject: [PATCH 3/4] use varargs instead of seq --- generators/example/src/main/scala/ConfigMixins.scala | 6 +++--- generators/example/src/main/scala/Configs.scala | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/generators/example/src/main/scala/ConfigMixins.scala b/generators/example/src/main/scala/ConfigMixins.scala index 69e2b08b..895fa86a 100644 --- a/generators/example/src/main/scala/ConfigMixins.scala +++ b/generators/example/src/main/scala/ConfigMixins.scala @@ -133,12 +133,12 @@ class WithMultiRoCC extends Config((site, here, up) => { * For ex: * Core 0, 1, 2, 3 have been defined earlier * with hartIds of 0, 1, 2, 3 respectively - * And you call WithMultiRoCCHwacha(Seq(0,1)) + * And you call WithMultiRoCCHwacha(0,1) * Then Core 0 and 1 will get a Hwacha * - * @param harts Seq of harts to specify which will get a Hwacha + * @param harts harts to specify which will get a Hwacha */ -class WithMultiRoCCHwacha(harts: Seq[Int]) extends Config((site, here, up) => { +class WithMultiRoCCHwacha(harts: Int*) extends Config((site, here, up) => { case MultiRoCCKey => { require(harts.max <= ((up(RocketTilesKey, site).length + up(BoomTilesKey, site).length) - 1)) up(MultiRoCCKey, site) ++ harts.distinct.map{ i => diff --git a/generators/example/src/main/scala/Configs.scala b/generators/example/src/main/scala/Configs.scala index 9338f4e7..cba65d32 100644 --- a/generators/example/src/main/scala/Configs.scala +++ b/generators/example/src/main/scala/Configs.scala @@ -220,7 +220,7 @@ class DualCoreBoomAndOneHwachaRocketConfig extends Config( new WithNormalBoomAndRocketTop ++ new WithBootROM ++ new WithMultiRoCC ++ - new WithMultiRoCCHwacha(Seq(0)) ++ // put Hwacha just on hart0 which was renumbered to Rocket + new WithMultiRoCCHwacha(0) ++ // put Hwacha just on hart0 which was renumbered to Rocket new boom.system.WithRenumberHarts ++ new hwacha.DefaultHwachaConfig ++ new boom.common.WithRVC ++ From fa080b7857d3b1fff5639a2d87fb5f9a60321a2a Mon Sep 17 00:00:00 2001 From: abejgonzalez Date: Tue, 28 May 2019 12:46:57 -0700 Subject: [PATCH 4/4] fix top level naming --- generators/example/src/main/scala/Configs.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/example/src/main/scala/Configs.scala b/generators/example/src/main/scala/Configs.scala index cba65d32..d6ff3432 100644 --- a/generators/example/src/main/scala/Configs.scala +++ b/generators/example/src/main/scala/Configs.scala @@ -217,7 +217,7 @@ class DualCoreBoomAndOneRocketConfig extends Config( new freechips.rocketchip.system.BaseConfig) class DualCoreBoomAndOneHwachaRocketConfig extends Config( - new WithNormalBoomAndRocketTop ++ + new WithNormalBoomRocketTop ++ new WithBootROM ++ new WithMultiRoCC ++ new WithMultiRoCCHwacha(0) ++ // put Hwacha just on hart0 which was renumbered to Rocket