allow interconnect annotations without forks
This commit is contained in:
1 parent
795cac0716
commit
fc030c6708
1 file changed
+16
-7
+16
-7
@@ -103,6 +103,7 @@ class DelayFile:
|
|||||||
|
|
||||||
delays = np.zeros((len(circuit.lines), 2, 2, 3)) # dataset last during construction.
|
delays = np.zeros((len(circuit.lines), 2, 2, 3)) # dataset last during construction.
|
||||||
|
|
||||||
|
nonfork_annotations = 0
|
||||||
for n1, n2, *delvals in self._interconnects:
|
for n1, n2, *delvals in self._interconnects:
|
||||||
delvals = [d if len(d) > 0 else [0, 0, 0] for d in delvals]
|
delvals = [d if len(d) > 0 else [0, 0, 0] for d in delvals]
|
||||||
if max(max(delvals)) == 0: continue
|
if max(max(delvals)) == 0: continue
|
||||||
@@ -120,19 +121,27 @@ class DelayFile:
|
|||||||
log.warn(f'No line to annotate pin {pn2} of {c2}')
|
log.warn(f'No line to annotate pin {pn2} of {c2}')
|
||||||
continue
|
continue
|
||||||
f1, f2 = c1.outs[p1].reader, c2.ins[p2].driver # find the forks between cells.
|
f1, f2 = c1.outs[p1].reader, c2.ins[p2].driver # find the forks between cells.
|
||||||
|
if f1 == c2 and f2 == c1:
|
||||||
|
nonfork_annotations += 1
|
||||||
|
if nonfork_annotations < 10:
|
||||||
|
log.warn(f'No fork between {c1.name}/{p1} and {c2.name}/{p2}, using {c2.name}/{p2}')
|
||||||
|
line = c2.ins[p2]
|
||||||
|
else:
|
||||||
assert f1.kind == '__fork__'
|
assert f1.kind == '__fork__'
|
||||||
assert f2.kind == '__fork__'
|
assert f2.kind == '__fork__'
|
||||||
if f1 != f2: # at least two forks, make sure f2 is a branchfork connected to f1
|
if len(f2.outs) == 1:
|
||||||
assert len(f2.outs) == 1
|
assert f1 == f2 or f1.outs[f2.ins[0].driver_pin] == f2.ins[0]
|
||||||
assert f1.outs[f2.ins[0].driver_pin] == f2.ins[0]
|
|
||||||
line = f2.ins[0]
|
|
||||||
elif len(f2.outs) == 1: # f1==f2, only OK when there is no fanout.
|
|
||||||
line = f2.ins[0]
|
line = f2.ins[0]
|
||||||
else:
|
else:
|
||||||
log.warn(f'No branchfork to annotate interconnect delay {c1.name}/{p1}->{c2.name}/{p2}')
|
nonfork_annotations += 1
|
||||||
continue
|
if nonfork_annotations < 10:
|
||||||
|
log.warn(f'No branchfork between {c1.name}/{p1} and {c2.name}/{p2}, using {c2.name}/{p2}')
|
||||||
|
line = c2.ins[p2]
|
||||||
delays[line, :] = delvals
|
delays[line, :] = delvals
|
||||||
|
|
||||||
|
if nonfork_annotations > 0:
|
||||||
|
log.warn(f'{nonfork_annotations} interconnect annotations were moved to gate inputs due to missing forks.')
|
||||||
|
|
||||||
return np.moveaxis(delays, -1, 0)
|
return np.moveaxis(delays, -1, 0)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user