2016-12-08 02:27:58 +01:00
|
|
|
// See LICENSE.SiFive for license details.
|
|
|
|
|
2017-07-07 19:48:16 +02:00
|
|
|
package freechips.rocketchip.amba.ahb
|
2016-12-08 02:27:58 +01:00
|
|
|
|
|
|
|
import Chisel._
|
|
|
|
import chisel3.internal.sourceinfo.SourceInfo
|
2017-07-07 19:48:16 +02:00
|
|
|
import freechips.rocketchip.diplomacy._
|
2016-12-08 02:27:58 +01:00
|
|
|
|
|
|
|
object AHBImp extends NodeImp[AHBMasterPortParameters, AHBSlavePortParameters, AHBEdgeParameters, AHBEdgeParameters, AHBBundle]
|
|
|
|
{
|
|
|
|
def edgeO(pd: AHBMasterPortParameters, pu: AHBSlavePortParameters): AHBEdgeParameters = AHBEdgeParameters(pd, pu)
|
|
|
|
def edgeI(pd: AHBMasterPortParameters, pu: AHBSlavePortParameters): AHBEdgeParameters = AHBEdgeParameters(pd, pu)
|
2017-01-20 03:36:39 +01:00
|
|
|
|
2017-02-23 02:05:22 +01:00
|
|
|
def bundleO(eo: AHBEdgeParameters): AHBBundle = AHBBundle(eo.bundle)
|
|
|
|
def bundleI(ei: AHBEdgeParameters): AHBBundle = AHBBundle(ei.bundle)
|
2016-12-08 02:27:58 +01:00
|
|
|
|
|
|
|
def colour = "#00ccff" // bluish
|
|
|
|
override def labelI(ei: AHBEdgeParameters) = (ei.slave.beatBytes * 8).toString
|
|
|
|
override def labelO(eo: AHBEdgeParameters) = (eo.slave.beatBytes * 8).toString
|
|
|
|
|
|
|
|
override def mixO(pd: AHBMasterPortParameters, node: OutwardNode[AHBMasterPortParameters, AHBSlavePortParameters, AHBBundle]): AHBMasterPortParameters =
|
|
|
|
pd.copy(masters = pd.masters.map { c => c.copy (nodePath = node +: c.nodePath) })
|
|
|
|
override def mixI(pu: AHBSlavePortParameters, node: InwardNode[AHBMasterPortParameters, AHBSlavePortParameters, AHBBundle]): AHBSlavePortParameters =
|
|
|
|
pu.copy(slaves = pu.slaves.map { m => m.copy (nodePath = node +: m.nodePath) })
|
|
|
|
}
|
|
|
|
|
|
|
|
// Nodes implemented inside modules
|
2017-09-12 08:33:44 +02:00
|
|
|
case class AHBIdentityNode()(implicit valName: ValName) extends IdentityNode(AHBImp)
|
|
|
|
case class AHBMasterNode(portParams: Seq[AHBMasterPortParameters])(implicit valName: ValName) extends SourceNode(AHBImp)(portParams)
|
|
|
|
case class AHBSlaveNode(portParams: Seq[AHBSlavePortParameters])(implicit valName: ValName) extends SinkNode(AHBImp)(portParams)
|
2017-01-30 00:17:52 +01:00
|
|
|
case class AHBNexusNode(
|
|
|
|
masterFn: Seq[AHBMasterPortParameters] => AHBMasterPortParameters,
|
|
|
|
slaveFn: Seq[AHBSlavePortParameters] => AHBSlavePortParameters,
|
|
|
|
numMasterPorts: Range.Inclusive = 1 to 999,
|
2017-09-12 08:33:44 +02:00
|
|
|
numSlavePorts: Range.Inclusive = 1 to 999)(
|
|
|
|
implicit valName: ValName)
|
2017-01-30 00:17:52 +01:00
|
|
|
extends NexusNode(AHBImp)(masterFn, slaveFn, numMasterPorts, numSlavePorts)
|
2016-12-08 02:27:58 +01:00
|
|
|
|
|
|
|
// Nodes passed from an inner module
|
2017-09-12 08:33:44 +02:00
|
|
|
case class AHBOutputNode()(implicit valName: ValName) extends OutputNode(AHBImp)
|
|
|
|
case class AHBInputNode()(implicit valName: ValName) extends InputNode(AHBImp)
|
2016-12-08 02:27:58 +01:00
|
|
|
|
|
|
|
// Nodes used for external ports
|
2017-09-12 08:33:44 +02:00
|
|
|
case class AHBBlindOutputNode(portParams: Seq[AHBSlavePortParameters])(implicit valName: ValName) extends BlindOutputNode(AHBImp)(portParams)
|
|
|
|
case class AHBBlindInputNode(portParams: Seq[AHBMasterPortParameters])(implicit valName: ValName) extends BlindInputNode(AHBImp)(portParams)
|
2016-12-08 02:27:58 +01:00
|
|
|
|
2017-09-12 08:33:44 +02:00
|
|
|
case class AHBInternalOutputNode(portParams: Seq[AHBSlavePortParameters])(implicit valName: ValName) extends InternalOutputNode(AHBImp)(portParams)
|
|
|
|
case class AHBInternalInputNode(portParams: Seq[AHBMasterPortParameters])(implicit valName: ValName) extends InternalInputNode(AHBImp)(portParams)
|