genlib/record/connect: add match_by_position
This commit is contained in:
parent
692794a21f
commit
df1ed32765
|
@ -96,7 +96,11 @@ class Record:
|
||||||
def raw_bits(self):
|
def raw_bits(self):
|
||||||
return Cat(*self.flatten())
|
return Cat(*self.flatten())
|
||||||
|
|
||||||
def connect(self, *slaves):
|
def connect(self, *slaves, match_by_position=False):
|
||||||
|
if match_by_position:
|
||||||
|
iters = [iter(slave.layout) for slave in slaves]
|
||||||
|
else:
|
||||||
|
iters = [iter(self.layout) for slave in slaves]
|
||||||
r = []
|
r = []
|
||||||
for f in self.layout:
|
for f in self.layout:
|
||||||
field = f[0]
|
field = f[0]
|
||||||
|
@ -104,14 +108,16 @@ class Record:
|
||||||
if isinstance(self_e, Signal):
|
if isinstance(self_e, Signal):
|
||||||
direction = f[2]
|
direction = f[2]
|
||||||
if direction == DIR_M_TO_S:
|
if direction == DIR_M_TO_S:
|
||||||
r += [getattr(slave, field).eq(self_e) for slave in slaves]
|
r += [getattr(slave, next(it)[0]).eq(self_e) for slave, it in zip(slaves, iters)]
|
||||||
elif direction == DIR_S_TO_M:
|
elif direction == DIR_S_TO_M:
|
||||||
r.append(self_e.eq(optree("|", [getattr(slave, field) for slave in slaves])))
|
r.append(self_e.eq(optree("|", [getattr(slave, next(it)[0])
|
||||||
|
for slave, it in zip(slaves, iters)])))
|
||||||
else:
|
else:
|
||||||
raise TypeError
|
raise TypeError
|
||||||
else:
|
else:
|
||||||
for slave in slaves:
|
for slave, it in zip(slaves, iters):
|
||||||
r += self_e.connect(getattr(slave, field))
|
r += self_e.connect(getattr(slave, next(it)[0]),
|
||||||
|
match_by_position=match_by_position)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
|
|
Loading…
Reference in New Issue