From 50a5d8a29070874f75ca0f268a9f58219e1b0650 Mon Sep 17 00:00:00 2001 From: Stefan Holst Date: Sat, 8 Jul 2023 22:52:10 +0900 Subject: [PATCH] one cell inherits name in substitute, sim fix --- src/kyupy/circuit.py | 10 +++++++++- src/kyupy/sim.py | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/kyupy/circuit.py b/src/kyupy/circuit.py index 5b7b31f..0b8da39 100644 --- a/src/kyupy/circuit.py +++ b/src/kyupy/circuit.py @@ -343,8 +343,15 @@ class Circuit: the signal lines are connected appropriately. The number and arrangement of the input and output ports must match the pins of the replaced node. """ + ios = set(impl.io_nodes) impl_in_lines = [n.outs[0] for n in impl.io_nodes if len(n.ins) == 0] impl_out_lines = [n.ins[0] for n in impl.io_nodes if len(n.ins) > 0] + designated_cell = None + if len(impl_out_lines) > 0: + n = impl_out_lines[0].driver + while n.kind == '__fork__' and n not in ios: + n = n.ins[0].driver + designated_cell = n node_in_lines = list(node.ins) + [None] * (len(impl_in_lines)-len(node.ins)) node_out_lines = list(node.outs) + [None] * (len(impl_out_lines)-len(node.outs)) assert len(node_in_lines) == len(impl_in_lines) @@ -356,7 +363,8 @@ class Circuit: ios = set(impl.io_nodes) for n in impl.nodes: # add all nodes to main circuit if n not in ios: - node_map[n] = Node(self, node.name + '~' + n.name, n.kind) + suffix = '' if n == designated_cell else f'~{n.name}' + node_map[n] = Node(self, node.name + suffix, n.kind) elif len(n.outs) > 0 and len(n.ins) > 0: # output is also read by impl. circuit, need to add a fork. node_map[n] = Node(self, node.name + '~' + n.name) for l in impl.lines: # add all internal lines to main circuit diff --git a/src/kyupy/sim.py b/src/kyupy/sim.py index a83c0a9..4729be2 100644 --- a/src/kyupy/sim.py +++ b/src/kyupy/sim.py @@ -161,10 +161,10 @@ class SimOps: self.s_len = len(circuit.s_nodes) if isinstance(c_caps, int): - c_caps = [c_caps] * len(circuit.lines) + c_caps = [c_caps] * (len(circuit.lines)+3) if a_ctrl is None: - a_ctrl = np.zeros((len(circuit.lines), 3), dtype=np.int32) + a_ctrl = np.zeros((len(circuit.lines)+3, 3), dtype=np.int32) # add 3 for zero, tmp, tmp2 a_ctrl[:,0] = -1 # special locations and offsets in c_locs/c_caps