diff --git a/build.sbt b/build.sbt index 4bb7c4c6..36bf7742 100644 --- a/build.sbt +++ b/build.sbt @@ -254,7 +254,7 @@ lazy val caliptra_aes = (project in file("generators/caliptra-aes-acc")) .settings(commonSettings) lazy val rerocc = (project in file("generators/rerocc")) - .dependsOn(rocketchip) + .dependsOn(rocketchip, constellation, boom) .settings(libraryDependencies ++= rocketLibDeps.value) .settings(commonSettings) diff --git a/generators/chipyard/src/main/scala/DigitalTop.scala b/generators/chipyard/src/main/scala/DigitalTop.scala index e0f69392..c4fa17aa 100644 --- a/generators/chipyard/src/main/scala/DigitalTop.scala +++ b/generators/chipyard/src/main/scala/DigitalTop.scala @@ -39,6 +39,7 @@ class DigitalTop(implicit p: Parameters) extends ChipyardSystem with chipyard.clocking.CanHaveClockTap // Enables optionally adding a clock tap output port with fftgenerator.CanHavePeripheryFFT // Enables optionally having an MMIO-based FFT block with constellation.soc.CanHaveGlobalNoC // Support instantiating a global NoC interconnect + with rerocc.CanHaveReRoCCTiles // Support tiles that instantiate rerocc-attached accelerators { override lazy val module = new DigitalTopModule(this) } diff --git a/generators/chipyard/src/main/scala/config/RoCCAcceleratorConfigs.scala b/generators/chipyard/src/main/scala/config/RoCCAcceleratorConfigs.scala index 184afaa7..91ee7c15 100644 --- a/generators/chipyard/src/main/scala/config/RoCCAcceleratorConfigs.scala +++ b/generators/chipyard/src/main/scala/config/RoCCAcceleratorConfigs.scala @@ -48,3 +48,22 @@ class AES256ECBRocketConfig extends Config( new freechips.rocketchip.subsystem.WithNBigCores(1) ++ new chipyard.config.WithSystemBusWidth(256) ++ new chipyard.config.AbstractConfig) + +class ReRoCCTestConfig extends Config( + new rerocc.WithReRoCC ++ + new chipyard.config.WithCharacterCountRoCC ++ // rerocc tile4 is charcnt + new chipyard.config.WithAccumulatorRoCC ++ // rerocc tile3 is accum + new chipyard.config.WithAccumulatorRoCC ++ // rerocc tile2 is accum + new chipyard.config.WithAccumulatorRoCC ++ // rerocc tile1 is accum + new chipyard.config.WithAccumulatorRoCC ++ // rerocc tile0 is accum + new freechips.rocketchip.subsystem.WithNBigCores(1) ++ + new chipyard.config.AbstractConfig) + +class ReRoCCManyGemminiConfig extends Config( + new rerocc.WithReRoCC ++ + new gemmini.LeanGemminiConfig ++ // rerocc tile3 is gemmini + new gemmini.LeanGemminiConfig ++ // rerocc tile2 is gemmini + new gemmini.LeanGemminiConfig ++ // rerocc tile1 is gemmini + new gemmini.LeanGemminiConfig ++ // rerocc tile0 is gemmini + new freechips.rocketchip.subsystem.WithNBigCores(4) ++ // 4 rocket cores + new chipyard.config.AbstractConfig) diff --git a/generators/chipyard/src/main/scala/config/fragments/RoCCFragments.scala b/generators/chipyard/src/main/scala/config/fragments/RoCCFragments.scala index 5ef76b75..c29b05d3 100644 --- a/generators/chipyard/src/main/scala/config/fragments/RoCCFragments.scala +++ b/generators/chipyard/src/main/scala/config/fragments/RoCCFragments.scala @@ -43,3 +43,17 @@ class WithMultiRoCCGemmini[T <: Data : Arithmetic, U <: Data, V <: Data]( })) } }) + +class WithAccumulatorRoCC(op: OpcodeSet = OpcodeSet.custom1) extends Config((site, here, up) => { + case BuildRoCC => up(BuildRoCC) ++ Seq((p: Parameters) => { + val accumulator = LazyModule(new AccumulatorExample(op, n = 4)(p)) + accumulator + }) +}) + +class WithCharacterCountRoCC(op: OpcodeSet = OpcodeSet.custom2) extends Config((site, here, up) => { + case BuildRoCC => up(BuildRoCC) ++ Seq((p: Parameters) => { + val counter = LazyModule(new CharacterCountExample(op)(p)) + counter + }) +}) diff --git a/generators/rerocc b/generators/rerocc index 78a29b0f..61751c3c 160000 --- a/generators/rerocc +++ b/generators/rerocc @@ -1 +1 @@ -Subproject commit 78a29b0f885deef1a99fb071dd6feeb7b65702b9 +Subproject commit 61751c3c23f6f7435cc264d32757956351cdb72a