hdl.ir: accept LHS signals like slices as Instance io ports.

This is unlikely to work with anything except Slice and Cat, but
there's no especially good place to enforce it. (Maybe in Instance?)
This commit is contained in:
whitequark 2019-06-03 02:39:14 +00:00
parent b8a61edc2f
commit c6a0761b3a
2 changed files with 9 additions and 6 deletions

View file

@ -373,9 +373,12 @@ class Fragment:
else: else:
assert defs[sig] is self assert defs[sig] is self
def add_io(sig): def add_io(*sigs):
assert sig not in ios for sig in flatten(sigs):
ios[sig] = self if sig not in ios:
ios[sig] = self
else:
assert ios[sig] is self
# Collect all signals we're driving (on LHS of statements), and signals we're using # Collect all signals we're driving (on LHS of statements), and signals we're using
# (on RHS of statements, or in clock domains). # (on RHS of statements, or in clock domains).
@ -400,8 +403,8 @@ class Fragment:
subfrag.add_ports(value._lhs_signals(), dir=dir) subfrag.add_ports(value._lhs_signals(), dir=dir)
add_defs(value._lhs_signals()) add_defs(value._lhs_signals())
if dir == "io": if dir == "io":
subfrag.add_ports(value, dir=dir) subfrag.add_ports(value._lhs_signals(), dir=dir)
add_io(value) add_io(value._lhs_signals())
else: else:
parent[subfrag] = self parent[subfrag] = self
level [subfrag] = level[self] + 1 level [subfrag] = level[self] + 1

View file

@ -603,7 +603,7 @@ class InstanceTestCase(FHDLTestCase):
i_rst=self.rst, i_rst=self.rst,
o_stb=self.stb, o_stb=self.stb,
o_data=Cat(self.datal, self.datah), o_data=Cat(self.datal, self.datah),
io_pins=self.pins io_pins=self.pins[:]
) )
self.wrap = Fragment() self.wrap = Fragment()
self.wrap.add_subfragment(self.inst) self.wrap.add_subfragment(self.inst)