Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

flow: simplify actor fragment interface

  • Loading branch information...
commit a6e5f3e76680f619b89aa47aaef77209ccb63aaa 1 parent 683e6b4
@sbourdeauducq sbourdeauducq authored
View
4 examples/dataflow.py
@@ -1,7 +1,7 @@
import sys
import networkx as nx
-from migen.fhdl import verilog
+from migen.fhdl import verilog
from migen.flow.ala import *
from migen.flow.network import *
from migen.flow.composer import *
@@ -13,7 +13,7 @@
c3 = (a1 + a2)*a3
c = CompositeActor(g)
-frag = c.get_control_fragment() + c.get_process_fragment()
+frag = c.get_fragment()
print(verilog.convert(frag))
View
22 migen/flow/actor.py
@@ -146,28 +146,26 @@ def get_control_fragment(self):
elif self.scheduling_model.model == SchedulingModel.PIPELINE:
return _control_fragment_pipe(self.scheduling_model.latency, stb_i, ack_o, stb_o, ack_i, self.busy, self.pipe_ce)
elif self.scheduling_model.model == SchedulingModel.DYNAMIC:
- raise NotImplementedError("Actor classes with dynamic scheduling must overload get_control_fragment")
+ raise NotImplementedError("Actor classes with dynamic scheduling must overload get_control_fragment or get_fragment")
def get_process_fragment(self):
raise NotImplementedError("Actor classes must overload get_process_fragment")
+ def get_fragment(self):
+ return self.get_control_fragment() + self.get_process_fragment()
+
def __repr__(self):
return "<" + self.__class__.__name__ + " " + repr(self.scheduling_model) + " " + repr(self.sinks()) + " " + repr(self.sources()) + ">"
-def get_conn_control_fragment(source, sink):
- assert isinstance(source, Source)
- assert isinstance(sink, Sink)
- comb = [
- source.ack.eq(sink.ack),
- sink.stb.eq(source.stb)
- ]
- return Fragment(comb)
-
-def get_conn_process_fragment(source, sink):
+def get_conn_fragment(source, sink):
assert isinstance(source, Source)
assert isinstance(sink, Sink)
assert sink.token.compatible(source.token)
sigs_source = source.token.flatten()
sigs_sink = sink.token.flatten()
- comb = [Cat(*sigs_sink).eq(Cat(*sigs_source))]
+ comb = [
+ source.ack.eq(sink.ack),
+ sink.stb.eq(source.stb),
+ Cat(*sigs_sink).eq(Cat(*sigs_source))
+ ]
return Fragment(comb)
View
12 migen/flow/network.py
@@ -20,18 +20,12 @@ def __init__(self, dfg):
SchedulingModel(SchedulingModel.DYNAMIC),
endpoints=our_endpoints)
- def get_control_fragment(self):
- this = sum([get_conn_control_fragment(x[2]['source'], x[2]['sink'])
+ def get_fragment(self):
+ this = sum([get_conn_fragment(x[2]['source'], x[2]['sink'])
for x in self.dfg.edges(data=True)], Fragment())
- others = sum([node.get_control_fragment() for node in self.dfg], Fragment())
+ others = sum([node.get_fragment() for node in self.dfg], Fragment())
busy = Fragment([self.busy.eq(optree('|', [node.busy for node in self.dfg]))])
return this + others + busy
-
- def get_process_fragment(self):
- this = sum([get_conn_process_fragment(x[2]['source'], x[2]['sink'])
- for x in self.dfg.edges(data=True)], Fragment())
- others = sum([node.get_process_fragment() for node in self.dfg], Fragment())
- return this + others
def add_connection(dfg, source_node, sink_node, source_ep=None, sink_ep=None):
if source_ep is None:
View
10 migen/flow/plumbing.py
@@ -25,10 +25,7 @@ def __init__(self, layout, *subrecords):
SchedulingModel(SchedulingModel.COMBINATORIAL),
self.ins, self.destination)
- def get_process_fragment(self):
- return Fragment() # nothing to do
-
- def get_control_fragment(self):
+ def get_fragment(self):
source = self.sources()[0]
sinks = self.sinks()
comb = [source.stb.eq(optree('&', [sink.stb for sink in sinks]))]
@@ -43,7 +40,4 @@ def __init__(self, layout, *subrecords):
SchedulingModel(SchedulingModel.COMBINATORIAL),
self.source, self.outs)
- def get_process_fragment(self):
- return Fragment() # nothing to do
-
- # TODO def get_control_fragment(self):
+ # TODO def get_fragment(self):

0 comments on commit a6e5f3e

Please sign in to comment.
Something went wrong with that request. Please try again.