flow: hooks

This commit is contained in:
Sebastien Bourdeauducq 2012-07-06 23:36:10 +02:00
parent a49dcb328a
commit 6cf38bfcba
1 changed files with 45 additions and 0 deletions

45
migen/flow/hooks.py Normal file
View File

@ -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