|
|
|
|
@ -192,7 +192,7 @@ class SimOps:
@@ -192,7 +192,7 @@ class SimOps:
|
|
|
|
|
root_nodes = set([n for n in circuit.s_nodes(KYUPY) if len(n.ins) > 0] + [n for n in circuit.nodes if len(n.outs) == 0]) # start from POs, PPOs, and any dangling nodes |
|
|
|
|
readers = np.array([1 if l.reader in root_nodes else len(l.reader.outs) for l in circuit.lines], dtype=np.int32) # for ref-counting forks |
|
|
|
|
|
|
|
|
|
level_lines = [n.ins[0] for n in root_nodes if len(n.ins) > 0 ] |
|
|
|
|
level_lines = [n.ins[0] for n in sorted(root_nodes, key=lambda n: n.index) if len(n.ins) > 0 ] |
|
|
|
|
# FIXME: Should probably instanciate buffers for PPOs and attach DFF clocks |
|
|
|
|
|
|
|
|
|
while len(level_lines) > 0: # traverse the circuit level-wise back towards (P)PIs |
|
|
|
|
@ -346,3 +346,12 @@ class SimOps:
@@ -346,3 +346,12 @@ class SimOps:
|
|
|
|
|
|
|
|
|
|
self.pippi_c_locs = np.concatenate([self.pi_c_locs, self.ppi_c_locs]) |
|
|
|
|
self.poppo_c_locs = np.concatenate([self.po_c_locs, self.ppo_c_locs]) |
|
|
|
|
|
|
|
|
|
def cone_ops(self, origin_lines: set[int]): |
|
|
|
|
active_lines = {l for l in origin_lines} |
|
|
|
|
ops = [] |
|
|
|
|
for kind, out0, in0, in1, in2, in3, *params in self.ops: |
|
|
|
|
if in0 in active_lines or in1 in active_lines or in2 in active_lines or in3 in active_lines or out0 in origin_lines: |
|
|
|
|
ops.append((kind, out0, in0, in1, in2, in3, *params)) |
|
|
|
|
active_lines.add(out0) |
|
|
|
|
return np.asarray(ops, dtype=np.int32) |
|
|
|
|
|