File tree Expand file tree Collapse file tree 4 files changed +10
-5
lines changed
core/src/main/scala/dfhdl/platforms/resources
lib/src/main/scala/dfhdl/platforms/resources Expand file tree Collapse file tree 4 files changed +10
-5
lines changed Original file line number Diff line number Diff line change @@ -9,6 +9,9 @@ trait Resource extends ResourceContext:
9
9
private val connections = mutable.ListBuffer [Resource ]()
10
10
protected [resources] def connect (that : Resource ): Unit =
11
11
connections += that
12
+ private val downstreamDeps = mutable.ListBuffer [ResourceDeps ]()
13
+ private [resources] def addDownstreamDep (that : ResourceDeps ): Unit =
14
+ downstreamDeps += that
12
15
// will always return at least this resource
13
16
private lazy val allConnections : List [Resource ] =
14
17
val visited = mutable.Set [Resource ]()
@@ -24,7 +27,7 @@ trait Resource extends ResourceContext:
24
27
if (res.isEmpty) List (this ) else res
25
28
end allConnections
26
29
lazy val allSigConstraints : List [SigConstraint ] =
27
- allConnections.flatMap(_.directAndOwnerSigConstraints).merge
30
+ ( allConnections ++ downstreamDeps) .flatMap(_.directAndOwnerSigConstraints).merge
28
31
owner.addResource(this )
29
32
end Resource
30
33
Original file line number Diff line number Diff line change 1
1
package dfhdl .platforms .resources
2
2
3
3
trait ResourceDeps extends Resource :
4
- protected def deps : List [Resource ]
4
+ protected lazy val upstreamDeps : List [Resource ]
5
5
override protected [resources] def connect (that : Resource ): Unit =
6
- deps .lazyZip(that.asInstanceOf [ResourceDeps ].deps ).foreach {
6
+ upstreamDeps .lazyZip(that.asInstanceOf [ResourceDeps ].upstreamDeps ).foreach {
7
7
case (r1, r2) => r1.connect(r2)
8
8
}
9
9
super .connect(that)
10
+ for (dep <- upstreamDeps)
11
+ dep.addDownstreamDep(this )
Original file line number Diff line number Diff line change @@ -3,4 +3,4 @@ package dfhdl.platforms.resources
3
3
trait DiffPair extends ResourceDeps :
4
4
val pPin : IO
5
5
val nPin : IO
6
- protected def deps : List [Resource ] = List (pPin, nPin)
6
+ lazy val upstreamDeps : List [Resource ] = List (pPin, nPin)
Original file line number Diff line number Diff line change @@ -4,4 +4,4 @@ import dfhdl.compiler.ir.constraints
4
4
5
5
class IOBus [T <: IO ](val ios : T * ) extends ResourceDeps :
6
6
def apply (i : Int ): T = ios(i)
7
- protected def deps : List [Resource ] = ios.toList
7
+ lazy val upstreamDeps : List [Resource ] = ios.toList
You can’t perform that action at this time.
0 commit comments