2016-09-08 11:08:57 +02:00
|
|
|
// See LICENSE for license details.
|
|
|
|
|
|
|
|
package rocketchip
|
|
|
|
|
|
|
|
import Chisel._
|
2016-11-18 23:05:14 +01:00
|
|
|
import config._
|
2016-09-08 11:08:57 +02:00
|
|
|
import junctions._
|
2016-10-04 00:17:36 +02:00
|
|
|
import diplomacy._
|
2016-09-08 11:08:57 +02:00
|
|
|
import uncore.tilelink._
|
2016-09-15 03:09:27 +02:00
|
|
|
import uncore.tilelink2._
|
2016-09-11 08:39:29 +02:00
|
|
|
import uncore.devices._
|
2016-09-28 06:27:07 +02:00
|
|
|
import util._
|
2016-09-11 08:39:29 +02:00
|
|
|
import rocket._
|
2016-09-08 11:08:57 +02:00
|
|
|
|
2016-10-09 21:34:10 +02:00
|
|
|
/** Enable or disable monitoring of Diplomatic buses */
|
2016-11-18 21:02:33 +01:00
|
|
|
case object TLEmitMonitors extends Field[Boolean]
|
2016-09-08 11:08:57 +02:00
|
|
|
|
2016-11-23 00:01:45 +01:00
|
|
|
abstract class BareTop(implicit val p: Parameters) extends LazyModule {
|
2016-10-29 06:56:11 +02:00
|
|
|
TopModule.contents = Some(this)
|
|
|
|
}
|
2016-09-15 09:38:46 +02:00
|
|
|
|
2016-11-23 00:01:45 +01:00
|
|
|
abstract class BareTopBundle[+L <: BareTop](_outer: L) extends Bundle {
|
2016-10-29 12:30:49 +02:00
|
|
|
val outer = _outer
|
|
|
|
}
|
|
|
|
|
2016-11-23 00:01:45 +01:00
|
|
|
abstract class BareTopModule[+L <: BareTop, +B <: BareTopBundle[L]](_outer: L, _io: () => B) extends LazyModuleImp(_outer) {
|
2016-10-29 12:30:49 +02:00
|
|
|
val outer = _outer
|
|
|
|
val io = _io ()
|
2016-10-29 06:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/** Base Top with no Periphery */
|
2016-10-29 07:30:13 +02:00
|
|
|
trait TopNetwork extends HasPeripheryParameters {
|
2016-11-16 03:27:52 +01:00
|
|
|
val module: TopNetworkModule
|
|
|
|
|
2016-10-29 06:56:11 +02:00
|
|
|
TLImp.emitMonitors = p(TLEmitMonitors)
|
2016-10-09 21:34:10 +02:00
|
|
|
|
2016-10-25 08:56:09 +02:00
|
|
|
// Add a SoC and peripheral bus
|
|
|
|
val socBus = LazyModule(new TLXbar)
|
2016-09-17 02:27:49 +02:00
|
|
|
val peripheryBus = LazyModule(new TLXbar)
|
2016-10-29 06:20:49 +02:00
|
|
|
val intBus = LazyModule(new IntXbar)
|
2016-09-17 02:27:49 +02:00
|
|
|
|
2016-09-24 00:25:58 +02:00
|
|
|
peripheryBus.node :=
|
2016-11-17 23:07:53 +01:00
|
|
|
TLWidthWidget(socBusConfig.beatBytes)(
|
|
|
|
TLAtomicAutomata(arithmetic = peripheryBusArithmetic)(
|
2016-10-29 00:05:49 +02:00
|
|
|
socBus.node))
|
2016-09-11 08:39:29 +02:00
|
|
|
}
|
2016-09-08 11:08:57 +02:00
|
|
|
|
2016-10-29 07:30:13 +02:00
|
|
|
trait TopNetworkBundle extends HasPeripheryParameters {
|
2016-11-16 03:27:52 +01:00
|
|
|
val outer: TopNetwork
|
|
|
|
implicit val p = outer.p
|
2016-09-08 11:08:57 +02:00
|
|
|
}
|
|
|
|
|
2016-10-29 07:30:13 +02:00
|
|
|
trait TopNetworkModule extends HasPeripheryParameters {
|
2016-11-16 03:27:52 +01:00
|
|
|
val io: TopNetworkBundle
|
|
|
|
val outer: TopNetwork
|
2016-10-27 07:28:40 +02:00
|
|
|
implicit val p = outer.p
|
2016-09-08 11:08:57 +02:00
|
|
|
}
|
2016-09-27 20:55:32 +02:00
|
|
|
|
2016-10-29 06:56:11 +02:00
|
|
|
/** Base Top with no Periphery */
|
2016-11-23 00:01:45 +01:00
|
|
|
class BaseTop(implicit p: Parameters) extends BareTop
|
2016-10-29 06:56:11 +02:00
|
|
|
with TopNetwork {
|
2016-10-29 12:30:49 +02:00
|
|
|
override lazy val module = new BaseTopModule(this, () => new BaseTopBundle(this))
|
2016-10-29 06:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-11-23 00:01:45 +01:00
|
|
|
class BaseTopBundle[+L <: BaseTop](_outer: L) extends BareTopBundle(_outer)
|
2016-10-29 06:56:11 +02:00
|
|
|
with TopNetworkBundle
|
|
|
|
|
2016-11-23 00:01:45 +01:00
|
|
|
class BaseTopModule[+L <: BaseTop, +B <: BaseTopBundle[L]](_outer: L, _io: () => B) extends BareTopModule(_outer, _io)
|
2016-10-29 06:56:11 +02:00
|
|
|
with TopNetworkModule
|
2016-11-23 01:58:24 +01:00
|
|
|
|
|
|
|
trait L2Crossbar extends TopNetwork {
|
|
|
|
val l2 = LazyModule(new TLXbar)
|
|
|
|
}
|
|
|
|
|
|
|
|
trait L2CrossbarBundle extends TopNetworkBundle {
|
|
|
|
}
|
|
|
|
|
|
|
|
trait L2CrossbarModule extends TopNetworkModule {
|
|
|
|
}
|