From df1ed32765510421fee07a8d5ff29afa9ce7c7c5 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Wed, 10 Apr 2013 21:33:45 +0200 Subject: [PATCH] genlib/record/connect: add match_by_position --- migen/genlib/record.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/migen/genlib/record.py b/migen/genlib/record.py index 4d7906475..d309a1b24 100644 --- a/migen/genlib/record.py +++ b/migen/genlib/record.py @@ -96,7 +96,11 @@ class Record: def raw_bits(self): 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 = [] for f in self.layout: field = f[0] @@ -104,14 +108,16 @@ class Record: if isinstance(self_e, Signal): direction = f[2] 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: - 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: raise TypeError else: - for slave in slaves: - r += self_e.connect(getattr(slave, field)) + for slave, it in zip(slaves, iters): + r += self_e.connect(getattr(slave, next(it)[0]), + match_by_position=match_by_position) return r def __len__(self):