coreplex: tidy up interrupt crossings
This commit is contained in:
parent
e30906589f
commit
ce2b904b19
@ -118,24 +118,21 @@ trait HasRocketTiles extends HasTiles
|
|||||||
// NOTE: The order of calls to := matters! They must match how interrupts
|
// NOTE: The order of calls to := matters! They must match how interrupts
|
||||||
// are decoded from rocket.intNode inside the tile.
|
// are decoded from rocket.intNode inside the tile.
|
||||||
|
|
||||||
val asyncIntXbar = LazyModule(new IntXbar).suggestName(tp.name.map(_ + "AsyncIntXbar"))
|
wrapper.intXbar.intnode := wrapper { IntSyncCrossingSink(3) } := debug.intnode // 1. always async crossign
|
||||||
asyncIntXbar.intnode := debug.intnode // debug
|
|
||||||
wrapper.intXbar.intnode := wrapper.crossIntAsyncIn() := asyncIntXbar.intnode // 1. always crosses
|
|
||||||
|
|
||||||
val periphIntXbar = LazyModule(new IntXbar).suggestName(tp.name.map(_ + "PeriphIntXbar"))
|
// 2. clint+plic conditionak crossing
|
||||||
periphIntXbar.intnode := clint.intnode // msip+mtip
|
val periphIntNode = SourceCardinality { implicit p => wrapper.intXbar.intnode :=? wrapper.crossIntIn }
|
||||||
periphIntXbar.intnode := plic.intnode // meip
|
periphIntNode := clint.intnode // msip+mtip
|
||||||
if (tp.core.useVM) periphIntXbar.intnode := plic.intnode // seip
|
periphIntNode := plic.intnode // meip
|
||||||
wrapper.intXbar.intnode := wrapper.crossIntIn := periphIntXbar.intnode // 2. conditionally crosses
|
if (tp.core.useVM) periphIntNode := plic.intnode // seip
|
||||||
|
|
||||||
val coreIntXbar = LazyModule(new IntXbar).suggestName(tp.name.map(_ + "CoreIntXbar"))
|
lip.foreach { wrapper.intXbar.intnode := _ } // 3. lip never crosses
|
||||||
lip.foreach { coreIntXbar.intnode := _ } // lip
|
|
||||||
wrapper.intXbar.intnode := coreIntXbar.intnode // 3. never crosses
|
|
||||||
|
|
||||||
wrapper.rocket.intOutputNode.foreach { i => // 4. conditionally crosses
|
// From core to PLIC
|
||||||
plic.intnode := FlipRendering { implicit p =>
|
wrapper.rocket.intOutputNode.foreach { i => // 4. conditional crossing
|
||||||
wrapper.crossIntIn := i
|
FlipRendering { implicit p => SourceCardinality { implicit p =>
|
||||||
}
|
plic.intnode :=? wrapper.crossIntOut :=? i
|
||||||
|
} }
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper
|
wrapper
|
||||||
|
@ -393,7 +393,7 @@ class TLDebugModuleOuterAsync(device: Device)(implicit p: Parameters) extends La
|
|||||||
val dmiXbar = LazyModule (new TLXbar())
|
val dmiXbar = LazyModule (new TLXbar())
|
||||||
|
|
||||||
val dmOuter = LazyModule( new TLDebugModuleOuter(device))
|
val dmOuter = LazyModule( new TLDebugModuleOuter(device))
|
||||||
val intnode = dmOuter.intnode
|
val intnode: IntSyncOutwardNode = IntSyncCrossingSource(alreadyRegistered = true) :*= dmOuter.intnode
|
||||||
|
|
||||||
val dmiInnerNode = TLAsyncCrossingSource()(dmiXbar.node)
|
val dmiInnerNode = TLAsyncCrossingSource()(dmiXbar.node)
|
||||||
|
|
||||||
@ -402,7 +402,7 @@ class TLDebugModuleOuterAsync(device: Device)(implicit p: Parameters) extends La
|
|||||||
|
|
||||||
lazy val module = new LazyModuleImp(this) {
|
lazy val module = new LazyModuleImp(this) {
|
||||||
|
|
||||||
val nComponents = intnode.out.size
|
val nComponents = dmOuter.intnode.edges.out.size
|
||||||
|
|
||||||
val io = IO(new Bundle {
|
val io = IO(new Bundle {
|
||||||
val dmi = new DMIIO()(p).flip()
|
val dmi = new DMIIO()(p).flip()
|
||||||
@ -1040,7 +1040,7 @@ class TLDebugModule(implicit p: Parameters) extends LazyModule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val dmOuter = LazyModule(new TLDebugModuleOuterAsync(device)(p))
|
val dmOuter = LazyModule(new TLDebugModuleOuterAsync(device)(p))
|
||||||
val dmInner = LazyModule(new TLDebugModuleInnerAsync(device, () => {intnode.edges.out.size})(p))
|
val dmInner = LazyModule(new TLDebugModuleInnerAsync(device, () => {dmOuter.dmOuter.intnode.edges.out.size})(p))
|
||||||
|
|
||||||
val node = dmInner.tlNode
|
val node = dmInner.tlNode
|
||||||
val intnode = dmOuter.intnode
|
val intnode = dmOuter.intnode
|
||||||
@ -1048,7 +1048,7 @@ class TLDebugModule(implicit p: Parameters) extends LazyModule {
|
|||||||
dmInner.dmiNode := dmOuter.dmiInnerNode
|
dmInner.dmiNode := dmOuter.dmiInnerNode
|
||||||
|
|
||||||
lazy val module = new LazyModuleImp(this) {
|
lazy val module = new LazyModuleImp(this) {
|
||||||
val nComponents = intnode.out.size
|
val nComponents = dmOuter.dmOuter.intnode.edges.out.size
|
||||||
|
|
||||||
val io = IO(new Bundle {
|
val io = IO(new Bundle {
|
||||||
val ctrl = new DebugCtrlBundle(nComponents)
|
val ctrl = new DebugCtrlBundle(nComponents)
|
||||||
|
Loading…
Reference in New Issue
Block a user