Merge pull request #230 from ucb-bar/midas2-merge

[firesim] Initial Golden Gate support
This commit is contained in:
David Biancolin
2019-09-12 17:17:54 -07:00
committed by GitHub
5 changed files with 40 additions and 9 deletions

View File

@@ -52,3 +52,7 @@ class FireSimDDR3FRFCFSLLC4MB3ClockDivConfig extends Config(
new FRFCFS16GBQuadRankLLC4MB3Div ++ new FRFCFS16GBQuadRankLLC4MB3Div ++
new FireSimConfig) new FireSimConfig)
class Midas2Config extends Config(
new WithMultiCycleRamModels ++
new FireSimConfig)

View File

@@ -1,6 +1,7 @@
package firesim.firesim package firesim.firesim
import chisel3._ import chisel3._
import chisel3.experimental.annotate
import freechips.rocketchip.config.{Field, Parameters} import freechips.rocketchip.config.{Field, Parameters}
import freechips.rocketchip.diplomacy._ import freechips.rocketchip.diplomacy._
import freechips.rocketchip.tilelink._ import freechips.rocketchip.tilelink._
@@ -12,7 +13,7 @@ import freechips.rocketchip.rocket.TracedInstruction
import firesim.endpoints.{TraceOutputTop, DeclockedTracedInstruction} import firesim.endpoints.{TraceOutputTop, DeclockedTracedInstruction}
import midas.models.AXI4BundleWithEdge import midas.models.AXI4BundleWithEdge
import midas.targetutils.ExcludeInstanceAsserts import midas.targetutils.{ExcludeInstanceAsserts, MemModelAnnotation}
/** Copied from RC and modified to change the IO type of the Imp to include the Diplomatic edges /** Copied from RC and modified to change the IO type of the Imp to include the Diplomatic edges
* associated with each port. This drives FASED functional model sizing * associated with each port. This drives FASED functional model sizing
@@ -103,3 +104,24 @@ trait HasTraceIOImp extends LazyModuleImp {
trait ExcludeInvalidBoomAssertions extends LazyModuleImp { trait ExcludeInvalidBoomAssertions extends LazyModuleImp {
ExcludeInstanceAsserts(("NonBlockingDCache", "dtlb")) ExcludeInstanceAsserts(("NonBlockingDCache", "dtlb"))
} }
trait CanHaveMultiCycleRegfileImp {
val outer: utilities.HasBoomAndRocketTiles
val boomCores = outer.boomTiles.map(tile => tile.module.core)
boomCores.foreach({ core =>
core.iregfile match {
case irf: boom.exu.RegisterFileSynthesizable => annotate(MemModelAnnotation(irf.regfile))
case _ => Nil
}
if (core.fp_pipeline != null) core.fp_pipeline.fregfile match {
case irf: boom.exu.RegisterFileSynthesizable => annotate(MemModelAnnotation(irf.regfile))
case _ => Nil
}
})
outer.rocketTiles.foreach({ tile =>
annotate(MemModelAnnotation(tile.module.core.rocketImpl.rf.rf))
tile.module.fpuOpt.foreach(fpu => annotate(MemModelAnnotation(fpu.fpuImpl.regfile)))
})
}

View File

@@ -31,7 +31,7 @@ import java.io.File
* determine which driver to build. * determine which driver to build.
*******************************************************************************/ *******************************************************************************/
class FireSim(implicit p: Parameters) extends RocketSubsystem class FireSim(implicit p: Parameters) extends Subsystem
with HasHierarchicalBusTopology with HasHierarchicalBusTopology
with CanHaveFASEDOptimizedMasterAXI4MemPort with CanHaveFASEDOptimizedMasterAXI4MemPort
with HasPeripheryBootROM with HasPeripheryBootROM
@@ -45,7 +45,7 @@ class FireSim(implicit p: Parameters) extends RocketSubsystem
override lazy val module = new FireSimModuleImp(this) override lazy val module = new FireSimModuleImp(this)
} }
class FireSimModuleImp[+L <: FireSim](l: L) extends RocketSubsystemModuleImp(l) class FireSimModuleImp[+L <: FireSim](l: L) extends SubsystemModuleImp(l)
with HasRTCModuleImp with HasRTCModuleImp
with CanHaveFASEDOptimizedMasterAXI4MemPortModuleImp with CanHaveFASEDOptimizedMasterAXI4MemPortModuleImp
with HasPeripheryBootROMModuleImp with HasPeripheryBootROMModuleImp
@@ -55,9 +55,10 @@ class FireSimModuleImp[+L <: FireSim](l: L) extends RocketSubsystemModuleImp(l)
with HasPeripheryIceNICModuleImpValidOnly with HasPeripheryIceNICModuleImpValidOnly
with HasPeripheryBlockDeviceModuleImp with HasPeripheryBlockDeviceModuleImp
with HasTraceIOImp with HasTraceIOImp
with CanHaveMultiCycleRegfileImp
class FireSimNoNIC(implicit p: Parameters) extends RocketSubsystem class FireSimNoNIC(implicit p: Parameters) extends Subsystem
with HasHierarchicalBusTopology with HasHierarchicalBusTopology
with CanHaveFASEDOptimizedMasterAXI4MemPort with CanHaveFASEDOptimizedMasterAXI4MemPort
with HasPeripheryBootROM with HasPeripheryBootROM
@@ -70,7 +71,7 @@ class FireSimNoNIC(implicit p: Parameters) extends RocketSubsystem
override lazy val module = new FireSimNoNICModuleImp(this) override lazy val module = new FireSimNoNICModuleImp(this)
} }
class FireSimNoNICModuleImp[+L <: FireSimNoNIC](l: L) extends RocketSubsystemModuleImp(l) class FireSimNoNICModuleImp[+L <: FireSimNoNIC](l: L) extends SubsystemModuleImp(l)
with HasRTCModuleImp with HasRTCModuleImp
with CanHaveFASEDOptimizedMasterAXI4MemPortModuleImp with CanHaveFASEDOptimizedMasterAXI4MemPortModuleImp
with HasPeripheryBootROMModuleImp with HasPeripheryBootROMModuleImp
@@ -79,6 +80,7 @@ class FireSimNoNICModuleImp[+L <: FireSimNoNIC](l: L) extends RocketSubsystemMod
with HasPeripheryUARTModuleImp with HasPeripheryUARTModuleImp
with HasPeripheryBlockDeviceModuleImp with HasPeripheryBlockDeviceModuleImp
with HasTraceIOImp with HasTraceIOImp
with CanHaveMultiCycleRegfileImp
class FireBoom(implicit p: Parameters) extends Subsystem class FireBoom(implicit p: Parameters) extends Subsystem
@@ -106,6 +108,7 @@ class FireBoomModuleImp[+L <: FireBoom](l: L) extends SubsystemModuleImp(l)
with HasPeripheryBlockDeviceModuleImp with HasPeripheryBlockDeviceModuleImp
with HasTraceIOImp with HasTraceIOImp
with ExcludeInvalidBoomAssertions with ExcludeInvalidBoomAssertions
with CanHaveMultiCycleRegfileImp
class FireBoomNoNIC(implicit p: Parameters) extends Subsystem class FireBoomNoNIC(implicit p: Parameters) extends Subsystem
with HasHierarchicalBusTopology with HasHierarchicalBusTopology
@@ -130,6 +133,7 @@ class FireBoomNoNICModuleImp[+L <: FireBoomNoNIC](l: L) extends SubsystemModuleI
with HasPeripheryBlockDeviceModuleImp with HasPeripheryBlockDeviceModuleImp
with HasTraceIOImp with HasTraceIOImp
with ExcludeInvalidBoomAssertions with ExcludeInvalidBoomAssertions
with CanHaveMultiCycleRegfileImp
case object NumNodes extends Field[Int] case object NumNodes extends Field[Int]

View File

@@ -109,9 +109,9 @@ abstract class FireSimTestSuite(
val lines = Source.fromFile(file).getLines.toList val lines = Source.fromFile(file).getLines.toList
lines.filter(_.startsWith("TRACEPORT")).drop(dropLines) lines.filter(_.startsWith("TRACEPORT")).drop(dropLines)
} }
val resetLength = 50 val resetLength = 51
val verilatedOutput = getLines(new File(outDir, s"/${verilatedLog}")) val verilatedOutput = getLines(new File(outDir, s"/${verilatedLog}"))
val synthPrintOutput = getLines(new File(genDir, s"/TRACEFILE"), resetLength + 1) val synthPrintOutput = getLines(new File(genDir, s"/TRACEFILE"), resetLength)
assert(verilatedOutput.size == synthPrintOutput.size, "Outputs differ in length") assert(verilatedOutput.size == synthPrintOutput.size, "Outputs differ in length")
assert(verilatedOutput.nonEmpty) assert(verilatedOutput.nonEmpty)
for ( (vPrint, sPrint) <- verilatedOutput.zip(synthPrintOutput) ) { for ( (vPrint, sPrint) <- verilatedOutput.zip(synthPrintOutput) ) {
@@ -131,8 +131,9 @@ abstract class FireSimTestSuite(
} }
class RocketF1Tests extends FireSimTestSuite("FireSimNoNIC", "FireSimRocketChipConfig", "FireSimConfig") class RocketF1Tests extends FireSimTestSuite("FireSimNoNIC", "FireSimRocketChipConfig", "FireSimConfig")
class RocketF1ClockDivTests extends FireSimTestSuite("FireSimNoNIC", "FireSimRocketChipConfig", "FireSimClockDivConfig")
class BoomF1Tests extends FireSimTestSuite("FireBoomNoNIC", "FireSimBoomConfig", "FireSimConfig") class BoomF1Tests extends FireSimTestSuite("FireBoomNoNIC", "FireSimBoomConfig", "FireSimConfig")
class RocketNICF1Tests extends FireSimTestSuite("FireSim", "FireSimRocketChipConfig", "FireSimConfig") { class RocketNICF1Tests extends FireSimTestSuite("FireSim", "FireSimRocketChipConfig", "FireSimConfig") {
runSuite("verilator")(NICLoopbackTests) runSuite("verilator")(NICLoopbackTests)
} }
class RamModelRocketF1Tests extends FireSimTestSuite("FireSimNoNIC", "FireSimRocketChipDualCoreConfig", "Midas2Config")
class RamModelBoomF1Tests extends FireSimTestSuite("FireBoomNoNIC", "FireSimBoomConfig", "Midas2Config")