fanout generator
This commit is contained in:
1 parent
da98ca2db7
commit
e64845e8c0
1 file changed
+17
-2
+17
-2
@@ -96,10 +96,10 @@ class Node:
|
||||
by allocating an array or list :code:`my_data` of length :code:`len(n.circuit.nodes)` and
|
||||
accessing it by :code:`my_data[n.index]` or simply by :code:`my_data[n]`.
|
||||
"""
|
||||
self.ins: list[Line] = GrowingList()
|
||||
self.ins: GrowingList[Line] = GrowingList()
|
||||
"""A list of input connections (:class:`Line` objects).
|
||||
"""
|
||||
self.outs: list[Line] = GrowingList()
|
||||
self.outs: GrowingList[Line] = GrowingList()
|
||||
"""A list of output connections (:class:`Line` objects).
|
||||
"""
|
||||
|
||||
@@ -615,6 +615,21 @@ class Circuit:
|
||||
if marks[n]:
|
||||
yield n
|
||||
|
||||
def fanout(self, origin_nodes):
|
||||
"""Generator function to iterate over the fan-out cone of a given list of origin nodes.
|
||||
|
||||
Nodes are yielded in topological order.
|
||||
"""
|
||||
marks = [False] * len(self.nodes)
|
||||
for n in origin_nodes:
|
||||
marks[n] = True
|
||||
for n in self.topological_order():
|
||||
if not marks[n]:
|
||||
for line in n.ins.without_nones():
|
||||
marks[n] |= marks[line.driver]
|
||||
if marks[n]:
|
||||
yield n
|
||||
|
||||
def fanout_free_regions(self):
|
||||
for stem in self.reversed_topological_order():
|
||||
if len(stem.outs) == 1 and 'dff' not in stem.kind.lower(): continue
|
||||
|
||||
Reference in new issue
Block a user