fix deferred assignments

This commit is contained in:
stefan committed 2024-11-07 17:06:00 +09:00
1 parent d2357859f6
commit 3b7106be80
1 file changed
+7 -2
+7 -2
View File
@@ -144,6 +144,7 @@ class VerilogTransformer(Transformer):
c.io_nodes[positions[name]] = n
if sd.kind == 'input':
Line(c, n, Node(c, name))
deferred_assignments = set()
while len(assignments) > 0:
more_assignments = []
for target, source in assignments: # pass 1.5: process signal assignments
@@ -163,7 +164,7 @@ class VerilogTransformer(Transformer):
source_sigs.append(s)
for t, s in zip(target_sigs, source_sigs):
if t in c.forks:
assert s not in c.forks, 'assignment between two driven signals'
assert s not in c.forks, f'assignment between two driven signals: source={s} target={t}'
Line(c, c.forks[t], Node(c, s))
elif s in c.forks:
assert t not in c.forks, 'assignment between two driven signals'
@@ -173,7 +174,11 @@ class VerilogTransformer(Transformer):
const_count += 1
Line(c, cnode, Node(c, t))
else:
more_assignments.append((target, source))
if (t, s) in deferred_assignments:
log.info(f'ignoring: assign {t} = {s}')
else:
more_assignments.append((t, s))
deferred_assignments.add((t, s))
assignments = more_assignments
for stmt in args[2:]: # pass 2: connect signals to readers
if isinstance(stmt, Instantiation):