a range for interrupt lines [start, end)
case class IntRange(start: Int, end: Int)
- start
Int
(param) start of the range, inclusive. - end
Int
(param) end of the range, exclusive. - size
() => Int
the size of the range. - overlaps
(IntRange) => Boolean
whether two ranges overlaps. - offset
(x:Int) => IntRange(start+x, end+x)
shift a range.
- apply
(end:Int) => IntRange(0,end)
(implicit) generate a range.
Parameter for a shared interrupt port (downwards).
case class IntSourceParameters(
range: IntRange,
resources: Seq[Resource] = Seq(),
nodePath: Seq[BaseNode] = Seq())
- range
IntRange
(param) the interrupt range of this source. - resources
Seq[Resource]
(param) - nodePath
Seq[BaseNode]
(param) - name
String
use the lazyModule's name as name.
Parameter for a shared interrupt port (upwards).
case class IntSinkParameters(
nodePath: Seq[BaseNode] = Seq())
- nodePath
Seq[BaseNode]
(param) - name
String
use the lazyModule's name as name.
U type used for interrupt node.
case class IntSourcePortParameters(sources: Seq[IntSourceParameters])
- source
Seq[IntSourceParameters]
(param) parameters of the transactions sharing the same port - num
Int
the number ofinterrupt lines.
- apply
(num:Int = 1, ports:Int = 1, sources:Int = 1, resources:Seq[Resource] = Nil) => Seq[IntSourceParameters]
A simple function to generate initalIntSourcePortParameters
. Note: the generated ranges need legalization.
D type used for interrupt node.
case class IntSinkPortParameters(sinks: Seq[IntSinkParameters])
- sink
Seq[IntSinkParameters]
(param) parameters of the transactions sharing the same port
- apply
(ports:Int = 1, sinks:Int = 1) => Seq[IntSinkParameters]
A simple function to generate initalIntSinkPortParameters
. Note: the generated ranges need legalization.
E type used for interrupt node.
case class IntEdge(source: IntSourcePortParameters, sink: IntSinkPortParameters)
object IntImp extends NodeImp[IntSourcePortParameters, IntSinkPortParameters, IntEdge, IntEdge, Vec[Bool]]
- edgeI
(IntSourcePortParameters, IntSinkPortParameters) => IntEdge
get the input edge parameter. - edgeO
(IntSourcePortParameters, IntSinkPortParameters) => IntEdge
get the output edge parameter. - bundleI
(IntEdge) => Vec[Bool]
get input bundle. - bundleO
(IntEdge) => Vec[Bool]
get output bundle. - color
() => "#0000ff"
blue. - reverse
() => true
reverse IO direction. - labelI
(IntEdge) => String
label input edge with the number of interrupts. - labelO
(IntEdge) => String
label output edge with the number of interrupts. - connect
(bo: => Vec[Bool], bi: => Vec[Bool], ei: => IntEdge) => (m:Option[LazyModule], bind:()=>Unit)
Connect inputs with outputs. - mixO
(IntSinkPortParameters, InwardNode[IntSourcePortParameters, IntSinkPortParameters, Vec[Bool]]) => IntSourcePortParameters
Insert node into parameters. - mixI
(IntSinkPortParameters, InwardNode[IntSourcePortParameters, IntSinkPortParameters, Vec[Bool]]) => IntSourcePortParameters
Insert node into parameters.
- case class IntIdentityNode extends IdentityNode
- case class IntSourceNode extends SourceNode
- case class IntSinkNode extends SinkNode
- case class IntNexusNode extends NexusNode
- case class IntOutputNode extends OutputNode
- case class IntInputNode extends InputNode
- case class IntBlindOutputNode extends BlindOutputNode
- case class IntBlindInputNode extends BlindInputNode
- case class IntInternalOutputNode extends InternalOutputNode
- case class IntInternalInputNode extends InternalInputNode
A crossbar for interrupts.
The interrupt range are rearranged.
class IntXbar()(implicit p: Parameters) extends LazyModule
- intnode
IntNexusNode
the diplomacy object to record port connections for module generation. - module
LazyModuleImp
- io
Bundle
module I/O ports:
inVec[Bool]
input ports.
outVec[Bool]
output ports.
- io
Interrupt input synchronizer.
class IntXing(sync: Int = 3)(implicit p: Parameters) extends LazyModule
- sync
Int
number of pipeline needed to synchronize the interrupt signal. - intnode
IntIdentityNode
the diplomacy object to record port connections for module generation. - module
LazyModuleImp
- io
Bundle
module I/O ports:
inVec[Bool]
input ports.
outVec[Bool]
output ports.
- io
For each out
, it is sync pipelined of in
.
out := (0 to sync).foldLeft(in) { case (a, _) => RegNext(a) }
Last updated: 21/07/2017
CC BY-NC-SA 4.0, © (2017) Wei Song
Apache 2.0, © (2016-2017) SiFive, Inc
BSD, © (2012-2014, 2016) The Regents of the University of California (Regents)