Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 228ca258232fbf2c1745db5a39fd935e710685a5
- migen/genlib/fsm.py | 11 +++++++++++
- 1 file changed, 11 insertions(+)
- diff --git a/migen/genlib/fsm.py b/migen/genlib/fsm.py
- index 85f3a40..3d5bac4 100644
- --- a/migen/genlib/fsm.py
- +++ b/migen/genlib/fsm.py
- @@ -6,6 +6,7 @@ class FSM:
- self._state = Signal(max=nstates)
- self._next_state = Signal(max=nstates)
- + self._last_state = Signal(max=nstates)
- for n, state in enumerate(states):
- setattr(self, state, n)
- self.actions = [[] for i in range(len(states))]
- @@ -31,6 +32,15 @@ class FSM:
- def act(self, state, *statements):
- self.actions[state] += statements
- + def entering(self, state):
- + return (self._state == state) & (self._last_state != state)
- +
- + def ongoing(self, state):
- + return self._state == state
- +
- + def exiting(self, state):
- + return (self._state != state) & (self._last_state == state)
- +
- def get_fragment(self):
- cases = dict((s, a) for s, a in enumerate(self.actions) if a)
- comb = [
- @@ -38,4 +48,5 @@ class FSM:
- Case(self._state, cases)
- ]
- sync = [self._state.eq(self._next_state)]
- + sync += [self._last_state.eq(self._state)]
- return Fragment(comb, sync)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement