54bbc00493 | ||
---|---|---|
.. | ||
tools | ||
README.md | ||
fsm.v | ||
fsm_test.v |
README.md
fsm
This module implements a Finite State Machine (FSM). The FSM is composed of states and transitions between them. These need to be specified by the client.
Usage
Have a look at fsm_test.v
for usage examples.
On each run()
, all the possible transitions from the current state are evaluated.
The first transition for the current state, whose condition evaluates to true is
taken (the condition is specified by a transition callback function).
In a successfull transition, the current state changes to the new one. When that happens:
- the client-specified
on_exit()
handler from the current state is called. - the client-specified
on_entry()
handler of the new state is called.
After all transitions are checked, and thus the state is changed, the client-specified
on_run()
handler of the now current state is called.
Plot States and Transitions
This module includes a tool for generating dot diagrams from .v source code, that defines a FSM. The tool is located in fsm_graph.v.
Here is an example of how to generate a .dot file with the graph and transitions:
v run vlib/datatypes/fsm/tools/fsm_graph.v -f vlib/datatypes/fsm/fsm_test.v > graph.dot
You can convert the generated .dot file to a PNG file with Graphviz's dot
conversion tool:
v run vlib/datatypes/fsm/tools/fsm_graph.v -f vlib/datatypes/fsm/fsm_test.v > graph.dot
dot -Tpng graph.dot > graph.png
xdg-open graph.png
You can also visualise it with Graphviz (the dot
command)
& ImageMagick (the display
command):
v run vlib/datatypes/fsm/tools/fsm_graph.v -f vlib/datatypes/fsm/fsm_test.v | dot -Tpng | display
To view the .dot file, you can also use any of the
Graphviz Graphical Interfaces
and xdot
in particular:
v run vlib/datatypes/fsm/tools/fsm_graph.v -f vlib/datatypes/fsm/fsm_test.v | xdot -
In all of the above examples, you can replace vlib/datatypes/fsm/fsm_test.v
with the path to your own .v code that imports and uses fsm
.