121 lines
4.3 KiB
Scala
121 lines
4.3 KiB
Scala
package firesim.firesim
|
|
|
|
import chisel3._
|
|
import freechips.rocketchip._
|
|
import freechips.rocketchip.subsystem._
|
|
import freechips.rocketchip.diplomacy._
|
|
import freechips.rocketchip.tilelink._
|
|
import freechips.rocketchip.devices.tilelink._
|
|
import freechips.rocketchip.devices.debug.HasPeripheryDebugModuleImp
|
|
import freechips.rocketchip.config.Parameters
|
|
import freechips.rocketchip.util.{HeterogeneousBag}
|
|
import freechips.rocketchip.amba.axi4.AXI4Bundle
|
|
import freechips.rocketchip.config.{Field, Parameters}
|
|
import freechips.rocketchip.diplomacy.LazyModule
|
|
import utilities.{Subsystem, SubsystemModuleImp}
|
|
import icenet._
|
|
import firesim.util.DefaultFireSimHarness
|
|
import testchipip._
|
|
import testchipip.SerialAdapter.SERIAL_IF_WIDTH
|
|
import tracegen.{HasTraceGenTiles, HasTraceGenTilesModuleImp}
|
|
import sifive.blocks.devices.uart._
|
|
import java.io.File
|
|
|
|
|
|
object FireSimValName {
|
|
implicit val valName = ValName("FireSimHarness")
|
|
}
|
|
import FireSimValName._
|
|
|
|
/*******************************************************************************
|
|
* Top level DESIGN configurations. These describe the basic instantiations of
|
|
* the designs being simulated.
|
|
*
|
|
* In general, if you're adding or removing features from any of these, you
|
|
* should CREATE A NEW ONE, WITH A NEW NAME. This is because the manager
|
|
* will store this name as part of the tags for the AGFI, so that later you can
|
|
* reconstruct what is in a particular AGFI. These tags are also used to
|
|
* determine which driver to build.
|
|
*******************************************************************************/
|
|
|
|
class FireSimDUT(implicit p: Parameters) extends Subsystem
|
|
with HasHierarchicalBusTopology
|
|
with CanHaveMasterAXI4MemPort
|
|
with HasPeripheryBootROM
|
|
with HasPeripherySerial
|
|
with HasPeripheryUART
|
|
with HasPeripheryIceNIC
|
|
with HasPeripheryBlockDevice
|
|
with HasTraceIO
|
|
{
|
|
override lazy val module = new FireSimModuleImp(this)
|
|
}
|
|
|
|
class FireSimModuleImp[+L <: FireSimDUT](l: L) extends SubsystemModuleImp(l)
|
|
with HasRTCModuleImp
|
|
with CanHaveMasterAXI4MemPortModuleImp
|
|
with HasPeripheryBootROMModuleImp
|
|
with HasPeripherySerialModuleImp
|
|
with HasPeripheryUARTModuleImp
|
|
with HasPeripheryIceNICModuleImpValidOnly
|
|
with HasPeripheryBlockDeviceModuleImp
|
|
with HasTraceIOImp
|
|
with HasFireSimClockingImp
|
|
with CanHaveMultiCycleRegfileImp
|
|
|
|
class FireSim(implicit p: Parameters) extends DefaultFireSimHarness(() => new FireSimDUT)
|
|
|
|
class FireSimNoNICDUT(implicit p: Parameters) extends Subsystem
|
|
with HasHierarchicalBusTopology
|
|
with CanHaveMasterAXI4MemPort
|
|
with HasPeripheryBootROM
|
|
with HasPeripherySerial
|
|
with HasPeripheryUART
|
|
with HasPeripheryBlockDevice
|
|
with HasTraceIO
|
|
{
|
|
override lazy val module = new FireSimNoNICModuleImp(this)
|
|
}
|
|
|
|
class FireSimNoNICModuleImp[+L <: FireSimNoNICDUT](l: L) extends SubsystemModuleImp(l)
|
|
with HasRTCModuleImp
|
|
with CanHaveMasterAXI4MemPortModuleImp
|
|
with HasPeripheryBootROMModuleImp
|
|
with HasPeripherySerialModuleImp
|
|
with HasPeripheryUARTModuleImp
|
|
with HasPeripheryBlockDeviceModuleImp
|
|
with HasTraceIOImp
|
|
with HasFireSimClockingImp
|
|
with CanHaveMultiCycleRegfileImp
|
|
|
|
class FireSimNoNIC(implicit p: Parameters) extends DefaultFireSimHarness(() => new FireSimNoNICDUT)
|
|
|
|
class FireSimTraceGenDUT(implicit p: Parameters) extends BaseSubsystem
|
|
with HasHierarchicalBusTopology
|
|
with HasTraceGenTiles
|
|
with CanHaveMasterAXI4MemPort {
|
|
override lazy val module = new FireSimTraceGenModuleImp(this)
|
|
}
|
|
|
|
class FireSimTraceGenModuleImp(outer: FireSimTraceGenDUT) extends BaseSubsystemModuleImp(outer)
|
|
with HasTraceGenTilesModuleImp
|
|
with CanHaveMasterAXI4MemPortModuleImp
|
|
|
|
class FireSimTraceGen(implicit p: Parameters) extends DefaultFireSimHarness(
|
|
() => new FireSimTraceGenDUT)
|
|
|
|
// Supernoded-ness comes from setting p(NumNodes) (see DefaultFiresimHarness) to something > 1
|
|
class FireSimSupernode(implicit p: Parameters) extends DefaultFireSimHarness(() => new FireSimDUT)
|
|
|
|
// Verilog blackbox integration demo
|
|
class FireSimVerilogGCDDUT(implicit p: Parameters) extends FireSimDUT
|
|
with example.HasPeripheryGCD
|
|
{
|
|
override lazy val module = new FireSimVerilogGCDModuleImp(this)
|
|
}
|
|
|
|
class FireSimVerilogGCDModuleImp[+L <: FireSimVerilogGCDDUT](l: L) extends FireSimModuleImp(l)
|
|
with example.HasPeripheryGCDModuleImp
|
|
|
|
class FireSimVerilogGCD(implicit p: Parameters) extends DefaultFireSimHarness(() => new FireSimVerilogGCDDUT)
|