From: Sebastien Bourdeauducq Date: Fri, 25 Oct 2013 16:50:14 +0000 (+0200) Subject: flow: add AbstractActor busy signals X-Git-Tag: 24jan2021_ls180~2099^2~455 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=892c12bff5df8e22c656f24a6e79f24c606a8c64;p=litex.git flow: add AbstractActor busy signals --- diff --git a/migen/flow/network.py b/migen/flow/network.py index 9bf775a7..62900af8 100644 --- a/migen/flow/network.py +++ b/migen/flow/network.py @@ -14,6 +14,7 @@ class AbstractActor: self.actor_class = actor_class self.parameters = parameters self.name = name + self.busy = Signal() def create_instance(self): return self.actor_class(**self.parameters) @@ -30,6 +31,7 @@ class DataFlowGraph(MultiDiGraph): def __init__(self): MultiDiGraph.__init__(self) self.elaborated = False + self.abstract_busy_signals = dict() def add_connection(self, source_node, sink_node, source_ep=None, sink_ep=None, # default: assume nodes have 1 source/sink and use that one @@ -71,7 +73,9 @@ class DataFlowGraph(MultiDiGraph): self.remove_node(old) def instantiate(self, actor): - self.replace_actor(actor, actor.create_instance()) + inst = actor.create_instance() + self.abstract_busy_signals[id(inst)] = actor.busy + self.replace_actor(actor, inst) # Returns a dictionary # source -> [sink1, ..., sinkn] @@ -237,6 +241,15 @@ class CompositeActor(Module): assert(not hasattr(self, k)) setattr(self, k, v) + # connect abstract busy signals + for node in dfg: + try: + abstract_busy_signal = dfg.abstract_busy_signals[id(node)] + except KeyError: + pass + else: + self.comb += abstract_busy_signal.eq(node.busy) + # generate busy signal self.busy = Signal() self.comb += self.busy.eq(optree("|", [node.busy for node in dfg]))