From: Sebastien Bourdeauducq Date: Tue, 14 Feb 2012 13:00:17 +0000 (+0100) Subject: bus/asmibus/hub: forward data and tag_call X-Git-Tag: 24jan2021_ls180~2099^2~1020 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=46b1f74e98dcdf179c74845faafda5fca7bee572;p=litex.git bus/asmibus/hub: forward data and tag_call --- diff --git a/migen/bus/asmibus.py b/migen/bus/asmibus.py index 335e2cbc..77723b67 100644 --- a/migen/bus/asmibus.py +++ b/migen/bus/asmibus.py @@ -1,4 +1,5 @@ from migen.fhdl.structure import * +from migen.corelogic.misc import optree class FinalizeError(Exception): pass @@ -118,6 +119,12 @@ class Hub: self.time = time self.ports = [] self.finalized = False + + self.call = Signal() + # tag_call is created by finalize() + self.dat_r = Signal(BV(self.dw)) + self.dat_w = Signal(BV(self.dw)) + self.dat_wm = Signal(BV(self.dw//8)) def get_port(self, nslots=1): if self.finalized: @@ -136,6 +143,7 @@ class Hub: for port in self.ports: port.finalize(tagbits, base) base += len(port.slots) + self.tag_call = Signal(BV(tagbits)) def get_slots(self): return sum([port.slots for port in self.ports], []) @@ -143,4 +151,16 @@ class Hub: def get_fragment(self): if not self.finalized: raise FinalizeError - return sum([port.get_fragment() for port in self.ports], Fragment()) + ports = sum([port.get_fragment() for port in self.ports], Fragment()) + comb = [] + for port in self.ports: + comb += [ + port.call.eq(self.call), + port.tag_call.eq(self.tag_call), + port.dat_r.eq(self.dat_r) + ] + comb += [ + self.dat_w.eq(optree("|", [port.dat_w for port in self.ports])), + self.dat_wm.eq(optree("|", [port.dat_wm for port in self.ports])) + ] + return ports + Fragment(comb)