flow: hooks
This commit is contained in:
parent
a49dcb328a
commit
6cf38bfcba
|
@ -0,0 +1,45 @@
|
|||
from migen.fhdl.structure import *
|
||||
from migen.flow.actor import *
|
||||
from migen.sim.generic import PureSimulable
|
||||
|
||||
class EndpointHook(PureSimulable):
|
||||
def __init__(self, endpoint):
|
||||
self.endpoint = endpoint
|
||||
|
||||
def on_ack(self):
|
||||
pass
|
||||
|
||||
def on_nack(self):
|
||||
pass
|
||||
|
||||
def on_inactive(self):
|
||||
pass
|
||||
|
||||
def do_simulation(self, s):
|
||||
if s.rd(self.endpoint.stb):
|
||||
if s.rd(self.endpoint.ack):
|
||||
self.on_ack()
|
||||
else:
|
||||
self.on_nack()
|
||||
else:
|
||||
self.on_inactive()
|
||||
|
||||
class DFGHook:
|
||||
def __init__(self, dfg, create):
|
||||
assert(not dfg.is_abstract())
|
||||
self.nodepair_to_ep = dict()
|
||||
for u, v, data in dfg.edges_iter(data=True):
|
||||
if (u, v) in self.nodepair_to_ep:
|
||||
ep_to_hook = self.nodepair_to_ep[(u, v)]
|
||||
else:
|
||||
ep_to_hook = dict()
|
||||
self.nodepair_to_ep[(u, v)] = ep_to_hook
|
||||
ep = data["source"]
|
||||
ep_to_hook[ep] = create(u, ep, v)
|
||||
|
||||
def get_fragment(self):
|
||||
frag = Fragment()
|
||||
for v1 in self.nodepair_to_ep.values():
|
||||
for v2 in v1.values():
|
||||
frag += v2.get_fragment()
|
||||
return frag
|
Loading…
Reference in New Issue