mirror of
https://github.com/enjoy-digital/litex.git
synced 2025-01-04 09:52:26 -05:00
flow: hooks
This commit is contained in:
parent
a49dcb328a
commit
6cf38bfcba
1 changed files with 45 additions and 0 deletions
45
migen/flow/hooks.py
Normal file
45
migen/flow/hooks.py
Normal 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
|
Loading…
Reference in a new issue