Initial MIDAS2 support

This commit is contained in:
David Biancolin
2019-07-23 22:04:12 +00:00
parent 5a7ff760d1
commit 270e558272
5 changed files with 66 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,31 @@ 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}
/** Ties together Subsystem buses in the same fashion done in the example top of Rocket Chip */
trait HasDefaultBusConfiguration {
this: BaseSubsystem =>
// The sbus masters the cbus; here we convert TL-UH -> TL-UL
sbus.crossToBus(cbus, NoCrossing)
// The cbus masters the pbus; which might be clocked slower
cbus.crossToBus(pbus, SynchronousCrossing())
// The fbus masters the sbus; both are TL-UH or TL-C
FlipRendering { implicit p =>
sbus.crossFromBus(fbus, SynchronousCrossing())
}
// The sbus masters the mbus; here we convert TL-C -> TL-UH
private val BankedL2Params(nBanks, coherenceManager) = p(BankedL2Key)
private val (in, out, halt) = coherenceManager(this)
if (nBanks != 0) {
sbus.coupleTo("coherence_manager") { in :*= _ }
mbus.coupleFrom("coherence_manager") { _ :=* BankBinder(mbus.blockBytes * (nBanks-1)) :*= out }
}
}
/** 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
@@ -104,3 +129,26 @@ trait ExcludeInvalidBoomAssertions extends LazyModuleImp {
ExcludeInstanceAsserts(("NonBlockingDCache", "dtlb")) ExcludeInstanceAsserts(("NonBlockingDCache", "dtlb"))
} }
trait CanHaveBoomMultiCycleRegfileImp {
val outer: boom.system.BoomRocketSubsystem
val cores = outer.boomTiles.map(tile => tile.module.core)
cores.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
}
})
}
trait CanHaveRocketMultiCycleRegfileImp {
val outer: RocketSubsystem
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
*******************************************************************************/ *******************************************************************************/
class FireSim(implicit p: Parameters) extends RocketSubsystem class FireSim(implicit p: Parameters) extends RocketSubsystem
with HasHierarchicalBusTopology with HasDefaultBusConfiguration
with CanHaveFASEDOptimizedMasterAXI4MemPort with CanHaveFASEDOptimizedMasterAXI4MemPort
with HasPeripheryBootROM with HasPeripheryBootROM
with HasNoDebug with HasNoDebug
@@ -54,10 +54,11 @@ class FireSimModuleImp[+L <: FireSim](l: L) extends RocketSubsystemModuleImp(l)
with HasPeripheryIceNICModuleImpValidOnly with HasPeripheryIceNICModuleImpValidOnly
with HasPeripheryBlockDeviceModuleImp with HasPeripheryBlockDeviceModuleImp
with HasTraceIOImp with HasTraceIOImp
with CanHaveRocketMultiCycleRegfileImp
class FireSimNoNIC(implicit p: Parameters) extends RocketSubsystem class FireSimNoNIC(implicit p: Parameters) extends RocketSubsystem
with HasHierarchicalBusTopology with HasDefaultBusConfiguration
with CanHaveFASEDOptimizedMasterAXI4MemPort with CanHaveFASEDOptimizedMasterAXI4MemPort
with HasPeripheryBootROM with HasPeripheryBootROM
with HasNoDebug with HasNoDebug
@@ -78,10 +79,11 @@ class FireSimNoNICModuleImp[+L <: FireSimNoNIC](l: L) extends RocketSubsystemMod
with HasPeripheryUARTModuleImp with HasPeripheryUARTModuleImp
with HasPeripheryBlockDeviceModuleImp with HasPeripheryBlockDeviceModuleImp
with HasTraceIOImp with HasTraceIOImp
with CanHaveRocketMultiCycleRegfileImp
class FireBoom(implicit p: Parameters) extends BoomRocketSubsystem class FireBoom(implicit p: Parameters) extends BoomRocketSubsystem
with HasHierarchicalBusTopology with HasDefaultBusConfiguration
with CanHaveFASEDOptimizedMasterAXI4MemPort with CanHaveFASEDOptimizedMasterAXI4MemPort
with HasPeripheryBootROM with HasPeripheryBootROM
with HasNoDebug with HasNoDebug
@@ -105,9 +107,10 @@ class FireBoomModuleImp[+L <: FireBoom](l: L) extends BoomRocketSubsystemModuleI
with HasPeripheryBlockDeviceModuleImp with HasPeripheryBlockDeviceModuleImp
with HasTraceIOImp with HasTraceIOImp
with ExcludeInvalidBoomAssertions with ExcludeInvalidBoomAssertions
with CanHaveBoomMultiCycleRegfileImp
class FireBoomNoNIC(implicit p: Parameters) extends BoomRocketSubsystem class FireBoomNoNIC(implicit p: Parameters) extends BoomRocketSubsystem
with HasHierarchicalBusTopology with HasDefaultBusConfiguration
with CanHaveFASEDOptimizedMasterAXI4MemPort with CanHaveFASEDOptimizedMasterAXI4MemPort
with HasPeripheryBootROM with HasPeripheryBootROM
with HasNoDebug with HasNoDebug
@@ -129,6 +132,7 @@ class FireBoomNoNICModuleImp[+L <: FireBoomNoNIC](l: L) extends BoomRocketSubsys
with HasPeripheryBlockDeviceModuleImp with HasPeripheryBlockDeviceModuleImp
with HasTraceIOImp with HasTraceIOImp
with ExcludeInvalidBoomAssertions with ExcludeInvalidBoomAssertions
with CanHaveBoomMultiCycleRegfileImp
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")