From: Sebastien Bourdeauducq Date: Fri, 12 Jul 2013 16:52:34 +0000 (+0200) Subject: flow/actor/PipelinedActor: clean up X-Git-Tag: 24jan2021_ls180~2099^2~528 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c2d6f14087d7ce29353bcc7f7ad63c7c3f9adff9;p=litex.git flow/actor/PipelinedActor: clean up --- diff --git a/migen/flow/actor.py b/migen/flow/actor.py index d3f4ec17..a834046a 100644 --- a/migen/flow/actor.py +++ b/migen/flow/actor.py @@ -90,15 +90,17 @@ class PipelinedActor(BinaryActor): BinaryActor.__init__(self, latency) def build_binary_control(self, stb_i, ack_o, stb_o, ack_i, latency): - valid = Signal(latency) - if latency > 1: - self.sync += If(self.pipe_ce, valid.eq(Cat(stb_i, valid[:latency-1]))) - else: - self.sync += If(self.pipe_ce, valid.eq(stb_i)) - last_valid = valid[latency-1] + busy = 0 + valid = stb_i + for i in range(latency): + valid_n = Signal() + self.sync += If(self.pipe_ce, valid_n.eq(valid)) + valid = valid_n + busy = busy | valid + self.comb += [ - self.pipe_ce.eq(ack_i | ~last_valid), + self.pipe_ce.eq(ack_i | ~valid), ack_o.eq(self.pipe_ce), - stb_o.eq(last_valid), - self.busy.eq(optree("|", [valid[i] for i in range(latency)])) + stb_o.eq(valid), + self.busy.eq(busy) ]