flow/perftools: refactor to use hooks

This commit is contained in:
Sebastien Bourdeauducq 2012-07-06 23:36:23 +02:00
parent 6cf38bfcba
commit 518501c493

View file

@ -1,10 +1,8 @@
from migen.fhdl.structure import * from migen.flow.hooks import *
from migen.flow.actor import *
from migen.sim.generic import PureSimulable
class EndpointReporter(PureSimulable): class EndpointReporter(EndpointHook):
def __init__(self, endpoint): def __init__(self, endpoint):
self.endpoint = endpoint super().__init__(endpoint)
self.reset() self.reset()
def reset(self): def reset(self):
@ -30,34 +28,18 @@ class EndpointReporter(PureSimulable):
else: else:
return "N/A" return "N/A"
def do_simulation(self, s): def on_ack(self):
if s.rd(self.endpoint.stb):
if s.rd(self.endpoint.ack):
self.ack += 1 self.ack += 1
else:
def on_nack(self):
self.nack += 1 self.nack += 1
else:
def on_inactive(self):
self.inactive += 1 self.inactive += 1
class DFGReporter: class DFGReporter(DFGHook):
def __init__(self, dfg): def __init__(self, dfg):
assert(not dfg.is_abstract()) super().__init__(dfg, lambda u, ep, v: EndpointReporter(u.actor.endpoints[ep]))
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_reporter = self.nodepair_to_ep[(u, v)]
else:
ep_to_reporter = dict()
self.nodepair_to_ep[(u, v)] = ep_to_reporter
ep = data["source"]
ep_to_reporter[ep] = EndpointReporter(u.actor.endpoints[ep])
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
def get_edge_labels(self): def get_edge_labels(self):
d = dict() d = dict()