fix sim model generation for circuits with dangling nodes
This commit is contained in:
1 parent
9cebbcce8f
commit
dd4e5c861a
2 files changed
+19
-3
No files matched your search
+3
-3
@@ -188,10 +188,10 @@ class SimOps:
|
||||
levels = []
|
||||
|
||||
ppio2idx = dict((n, i) for i, n in enumerate(circuit.s_nodes))
|
||||
ppos = set([n for n in circuit.s_nodes if len(n.ins) > 0])
|
||||
readers = np.array([1 if l.reader in ppos else len(l.reader.outs) for l in circuit.lines], dtype=np.int32) # for ref-counting forks
|
||||
root_nodes = set([n for n in circuit.s_nodes if len(n.ins) > 0] + [n for n in circuit.nodes if len(n.outs) == 0]) # start from POs, PPOs, and any dangling nodes
|
||||
readers = np.array([1 if l.reader in root_nodes else len(l.reader.outs) for l in circuit.lines], dtype=np.int32) # for ref-counting forks
|
||||
|
||||
level_lines = [n.ins[0] for n in ppos] # start from PPOs
|
||||
level_lines = [n.ins[0] for n in root_nodes]
|
||||
# FIXME: Should probably instanciate buffers for PPOs and attach DFF clocks
|
||||
|
||||
while len(level_lines) > 0: # traverse the circuit level-wise back towards (P)PIs
|
||||
|
||||
@@ -3,6 +3,22 @@ import numpy as np
|
||||
from kyupy.logic_sim import LogicSim, LogicSim2V, LogicSim4V, LogicSim6V
|
||||
from kyupy import bench, logic, sim, verilog
|
||||
from kyupy.logic import mvarray, bparray, bp_to_mv, mv_to_bp
|
||||
from kyupy.techlib import SAED90
|
||||
|
||||
def test_dangling():
|
||||
c = verilog.parse('''
|
||||
module test(i, o);
|
||||
input i; output o; wire dangling;
|
||||
INVX0 dff1 (.INP(i),.ZN(o));
|
||||
assign dangling=o;
|
||||
endmodule
|
||||
''', tlib=SAED90)
|
||||
c.resolve_tlib_cells(SAED90)
|
||||
sim = LogicSim2V(c)
|
||||
p = sim.allocate()
|
||||
p[...] = 0
|
||||
sim.simulate(p)
|
||||
assert p[1,0] == logic.ONE
|
||||
|
||||
def assert_equal_shape_and_contents(actual, desired):
|
||||
desired = np.array(desired, dtype=np.uint8)
|
||||
|
||||
Reference in new issue
Block a user