|
|
@ -144,6 +144,7 @@ class VerilogTransformer(Transformer): |
|
|
|
c.io_nodes[positions[name]] = n |
|
|
|
c.io_nodes[positions[name]] = n |
|
|
|
if sd.kind == 'input': |
|
|
|
if sd.kind == 'input': |
|
|
|
Line(c, n, Node(c, name)) |
|
|
|
Line(c, n, Node(c, name)) |
|
|
|
|
|
|
|
deferred_assignments = set() |
|
|
|
while len(assignments) > 0: |
|
|
|
while len(assignments) > 0: |
|
|
|
more_assignments = [] |
|
|
|
more_assignments = [] |
|
|
|
for target, source in assignments: # pass 1.5: process signal assignments |
|
|
|
for target, source in assignments: # pass 1.5: process signal assignments |
|
|
@ -163,7 +164,7 @@ class VerilogTransformer(Transformer): |
|
|
|
source_sigs.append(s) |
|
|
|
source_sigs.append(s) |
|
|
|
for t, s in zip(target_sigs, source_sigs): |
|
|
|
for t, s in zip(target_sigs, source_sigs): |
|
|
|
if t in c.forks: |
|
|
|
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)) |
|
|
|
Line(c, c.forks[t], Node(c, s)) |
|
|
|
elif s in c.forks: |
|
|
|
elif s in c.forks: |
|
|
|
assert t not in c.forks, 'assignment between two driven signals' |
|
|
|
assert t not in c.forks, 'assignment between two driven signals' |
|
|
@ -173,7 +174,11 @@ class VerilogTransformer(Transformer): |
|
|
|
const_count += 1 |
|
|
|
const_count += 1 |
|
|
|
Line(c, cnode, Node(c, t)) |
|
|
|
Line(c, cnode, Node(c, t)) |
|
|
|
else: |
|
|
|
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 |
|
|
|
assignments = more_assignments |
|
|
|
for stmt in args[2:]: # pass 2: connect signals to readers |
|
|
|
for stmt in args[2:]: # pass 2: connect signals to readers |
|
|
|
if isinstance(stmt, Instantiation): |
|
|
|
if isinstance(stmt, Instantiation): |
|
|
|