|
|
|
@ -123,6 +123,9 @@ class VerilogTransformer(Transformer):
@@ -123,6 +123,9 @@ class VerilogTransformer(Transformer):
|
|
|
|
|
assignments = [] |
|
|
|
|
for stmt in args[2:]: # pass 1: instantiate cells and driven signals |
|
|
|
|
if isinstance(stmt, Instantiation): |
|
|
|
|
if stmt.type not in self.tlib.cells: |
|
|
|
|
log.warn(f'Ignoring cell of unknown kind "{stmt.type}"') |
|
|
|
|
continue |
|
|
|
|
n = Node(c, stmt.name, kind=stmt.type) |
|
|
|
|
for p, s in stmt.pins.items(): |
|
|
|
|
if self.tlib.pin_is_output(n.kind, p): |
|
|
|
@ -141,6 +144,8 @@ class VerilogTransformer(Transformer):
@@ -141,6 +144,8 @@ class VerilogTransformer(Transformer):
|
|
|
|
|
c.io_nodes[positions[name]] = n |
|
|
|
|
if sd.kind == 'input': |
|
|
|
|
Line(c, n, Node(c, name)) |
|
|
|
|
while len(assignments) > 0: |
|
|
|
|
more_assignments = [] |
|
|
|
|
for target, source in assignments: # pass 1.5: process signal assignments |
|
|
|
|
target_sigs = [] |
|
|
|
|
if not isinstance(target, list): target = [target] |
|
|
|
@ -167,9 +172,13 @@ class VerilogTransformer(Transformer):
@@ -167,9 +172,13 @@ class VerilogTransformer(Transformer):
|
|
|
|
|
cnode = Node(c, f'__const{s[3]}_{const_count}__', f'__const{s[3]}__') |
|
|
|
|
const_count += 1 |
|
|
|
|
Line(c, cnode, Node(c, t)) |
|
|
|
|
else: |
|
|
|
|
more_assignments.append((target, source)) |
|
|
|
|
assignments = more_assignments |
|
|
|
|
for stmt in args[2:]: # pass 2: connect signals to readers |
|
|
|
|
if isinstance(stmt, Instantiation): |
|
|
|
|
for p, s in stmt.pins.items(): |
|
|
|
|
if stmt.name not in c.cells: continue |
|
|
|
|
n = c.cells[stmt.name] |
|
|
|
|
if self.tlib.pin_is_output(n.kind, p): continue |
|
|
|
|
if s.startswith("1'b"): |
|
|
|
|