Finite State Machine Editor For Mac
Copyright and license information Copyright (C) 2000-2015 Stefan Duffner, Rainer Strobel This program is free software; you can redistribute it and/or modify it under the terms of the as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA, USA. Install the above-mentioned required software.
If you install them via a package manager make sure you install the development packages (.-dev). Unpack the source code into the current directory tar xvfz qfsm-0.54.0-Source.tar.gz -directory. And change to that directory. Before invoking CMake you have to make sure that the program qmake is in your global PATH environment variable. The location of qmake depends on your operating system or Linux distribution.
On openSUSE for example it is under: /usr/lib/qt4/bin/ (or simply under /usr/bin on more recent distributions). Thus, if you are using bash, you would have to type: export PATH=/usr/lib/qt4/bin:$PATH. Type: cmake. Then: make. Finally, install Qfsm (as root): make install This will install the executable 'qfsm' to /usr/bin/ and the documentation to /usr/share/doc/qfsm/. If CMake fails to find any of the dependencies but you know you have the development headers/libraries installed, add -DLIBRARYSEARCHDIRS= and -DINCLUDESEARCHDIRS= to the cmake command. If you want to create a project file for your IDE (e.g.
KDevelop), add -GKDevelop3 to the cmake command above. This will create a.kdevelop file in the build directory which can be opened by KDevelop. To create a new file: select “New”. For more details, see To open an existing Qfsm file: select “Open”.
To open the most recently opened Qfsm files: select “Open Recent”. To save the current FSM to a Qfsm file: select “Save”. To save the current FSM under a different name: select “Save As”. To export the current FSM to a foreign file format: select “Export”.
For more details, see To print the current FSM: select “Print”. To open a new window with a separate working area where a different FSM can be edited: select “New Window”. Note that you can copy, cut and paste states and transitions from/to different FSMs. To close the current FSM: select “Close”. To quit Qfsm: select “Quit”. To undo the last action: select “Undo”.
To cut the currently selected states and transitions to the clipboard: select “Cut”. To copy the currently selected states and transitions to the clipboard: select “Copy”. To paste the clipboard into the current FSM: select “Paste”. To delete the currently selected states and transitions: select “Delete”. To switch to the select mode: select “Select”. For more details, see To select all states and transitions of the current FSM: select “Select All”.
To deselect all objects: select “Deselect All”. To open the options dialog: select “Options”.
For more details, see. To show/hide the state codes inside the states: select “State Codes”. Each state has a unique identifier, called state code, which is an integer that is automatically determined by Qfsm. To show/hide the Moore outputs inside the states: select “Moore Outputs”. Each state defines its Moore outputs which are the values that are sent to the outputs of the FSM when the respective state is reached.
To show/hide the Mealy input conditions on the transitions: select “Mealy Inputs”. Mealy inputs are asynchronous inputs to the FSM.
They can trigger transitions from one state to another if the condition of the respective transition is satisfied. To show/hide the Mealy outputs on the transitions: select “Mealy Outputs”. Mealy outputs are outputs of the FSM that were sent when a transition is triggered. Thus, each transition can define the Moore outputs that are sent when it is triggered. To show/hide the shadows of the states: select “Shadows”. To show/hide the grid on the working area: select “Grid”.
To show/hide the window displaying the names of the inputs and outputs of a finite state machine: select “IO View”. To switch to the pan mode: select “Pan View”.
For more details, see To switch to the zoom mode: select “Zoom”. For more details, see To zoom the view in: select “zoom in”. The current zoom value is shown in the leftmost part of the status bar. To zoom the view out: select “zoom out”. The current zoom value is shown in the leftmost part of the status bar. To set the zoom to the original value (100%): select “Zoom 100%”.
The current zoom value is shown in the leftmost part of the status bar. Name Enter a name for the FSM. The name is used for example when exporting to the following formats: VHDL, Verilog HDL or Ragel. Version You can enter the version of the FSM. This is a free character string that is only used when printing the diagram.
Type Select the type. The type attribute determines which type of information is processed by the FSM, i.e.
Finite State Machine Editor For Machine
The inputs, the outputs etc. Binary FSMs process zeros and ones at the inputs or outputs.
Finite State Machine Editor For Mac Free
This is the main type used for hardware design. ASCII FSMs process characters (i.e. Letters, digits etc.). These characters are coded in ASCII format using 8 bits.
This type of FSM can be used either for hardware design or to create string parsers. The 'Free Text' type allows to specify inputs and outputs using any kind of character string of variable length. This type of FSM cannot be simulated afterwards because the input conditions won't be interpreted.
Moore outputs and Mealy inputs/outputs If you are creating a 'binary' FSM you can specify the number of bits of the moore output and mealy input/output and their respective names. The names are lists of character strings separated by commas. If you do not want to choose the names you can leave these fields blank and they will be automatically set. Fonts You can specify the font to use for the state names and for the input conditions and outputs displayed on the transitions. Arrow Type You can choose the type of arrow to use for drawing transitions.
Draw initial transition You can tick or not this option if you want to draw or not the initial transition or if you want to reset or start the transition. When you want to modify the properties of an existing FSM you can select Machine-Edit from the main menu and the same dialog box displays. As soon as you click OK the changes take effect. In this mode you can select, move or modify graphical objects. To select a state or a transition, click on it with the left mouse button.
To select several states or transitions at the same time, hold down the shift key. You can then apply further actions on selected graphical objects, i.e. Copy or edit, by using the menu. To unselect all the selected graphical objects, click on the background. To show the context menu for a state or a transition, click with the right mouse button on the state or transition.
To modify the properties of a state or a transition, double-click on the state or transition. It opens a dialog in which you can modify the properties. To select multiple graphical objects, draw a rectangle holding the left mouse button around the graphical objects you want to select. To move state or transitions, select them and drag them to the desired position. To move the transition control points, select the respective transition and then drag one of the control points. The transition control points are indicated by small red and green points when a transition is selected.
The red points control the form of the transition, i.e. The green ones are used to attach them to a starting and end state. Name Enter a name for the state. Code Normally you do not need to fill this field. This is a unique identifier of the state you create, it is filled automatically. Moore Outputs Enter the outputs sent by the FSM.
In 'binary' FSMs this is a string of zeros and ones and in 'ASCII' FSMs this is just one character. Entry actions Enter the actions (functions, e.g. 'doThis') that shall be executed when entering the state. Used only for 'free text' machines and the SMC export.
Exit actions Enter the actions (functions, e.g. 'doThat') that shall be executed when exiting the state.
Finite State Machine Editor For Mac Pro
Used only for 'free text' machines and the SMC export. Radius Enter the radius of the drawn circle of the state, in pixels. Line width Enter the line width of the outline of the state. Colour If you want to change the colour of the outline of the state, click on the “Colour” button.
Description You can enter a description of the state. This is only for documentation purposes.
To modify an existing state: 1) switch to the 'select mode' (see ). 2) double-click on the respective state Or 2) select one state and select State-Edit from the main menu.
Adding and modifying transitions To create a new transition: 1) you need first to: - create a FSM or - open an existing file. To create a FSM, select File-New (see ) To open an existing file, select File-Open from the main menu and choose the desired file. 2) create at least one state (see ). 3) switch to the 'add transition' mode (see ). To create a transition from state A to state B, press and hold the left mouse button on state A and release it on state B.
To draw loops, i.e. Transitions that go from one state to itself, press and release the mouse button on the same state.
The 'Transition properties' dialog opens.To specify or modify the properties of the state, fill the dialog. Condition Type Choose the type of the condition. The type of the condition determines the format in which you enter the input condition in the next field.
Input If the condition type is binary, enter a string of zeros and ones representing the Mealy input that should trigger this transition. You can also use the character 'x' meaning: 'don't care'. You can also specify several alternative sets of inputs linked with ' ' (OR). If the condition type is ASCII enter a character or specify an expression in a specific format which is explained in detail in. For 'free text' conditions enter any input character string. However, it has no logical meaning and won't be interpreted, for example when simulating the machine.
For SMC export, put function names here (e.g. Output Enter the Mealy output sent from the FSM when the transition is activated, i.e. The input condition is satisfied. Depending on the type of the condition the format is either a string of zeros and ones (binary) a character (ASCII) or any character string (free text). Note that in case of an ASCII character it can also be an escape sequence. For more details on escape sequences, see For SMC export, put function names here (e.g. Description You can enter a description of the transition.
This is only for documentation purposes. To modify the properties of an existing transition: 1) switch to the 'select mode' (see ). 2) double-click on the respective transition Or 2) select one transition and select Transition-Editfrom the main menu. To change the bend of the transition as well as its start state and end state: 1) switch to the “Select mode” 2) click on the transition.
Four control points appear. You can drag them around with the left mouse button. The green ones allow you to change the start and end state. With the red ones you can change the bend of the transition. Unambigous Conditions Checks if the FSM has transitions with conditions that are ambiguous, i.e.
Transitions that are activated simultaniously by the same input (in the same state). Note that ambiguous transitions are only allowed in non-deterministicFSMs, which are currently not supported by Qfsm. Initial state Checks if the FSM has an initial state. Final state Checks if the FSM has a final state. No dead locks Checks if the FSM has states where it can get of out, i.e. States with no transitions going out.
Completeness Checks if for every possible input in every state there exists a transition that is activated. States reachable Checks if all the states of the FSM are reachable. Final states reachable Checks if all the final states of the FSM are reachable.
Transitions connected Checks if all the transitions of the diagram are actually connected to a start end an end state. Note that sometimes a transition looks as if it is connected to a state but in fact the connection point is slightly away from it. A log of the checks that have been performed is printed in the protocol field at the bottom of the window. Input 1) Enter the input data in the text field 2) select one of the formats: binary, hexadecimal or ASCII. 3) you can set or unset input bits using the buttons 0 to 15. When you choose the ASCII format you can also use escape sequences as detailed in. However, you can only enter a single character.
Thus, ' d'or ranges, for example, are not allowed. Output Choose the format of the current FSM, i.e. Binary, hexadecimal or ASCII. State Name and State Code fields display the current state of the FSM. The red or green point next to it indicates if the FSM is in a final state or not, i.e. Green for final state and red otherwise. There are two modes to send input data: - click on the Send button or, press the Enter key) - click on the Clock button.
In the clock mode, Qfsm periodically sends the data in the input text field on the top of the dialog to the FSM. You can specify the frequency of the clock in the input field at the bottom right. For ASCII input, the input text field is cleared after each clock signal, which allows to simulate the behaviour of ASCII FSMs in real-time by pressing different keys. To exit the Clock Mode, click once again on the Clock button. To reset the FSM, click on the Reset Button.
This sets the FSM to its initial state. Include asynchronous output Tick this option if you want the asynchronous outputs (Mealy outputs) to be printed in the table cells together with the resulting states. Resolve inverted conditions Tick this option if you want the inverted conditions to be printed using the inversion descriptor, e.g. 'NOT a', or without it, i.e. Printing every character (or binary string) except the ones in the condition. In the case of 'NOT a'this would be the two ranges ' 000-`'and 'b- 0FF'.
Which one is clearest depends on the respective FSM. Orientation Tick the different options in order to determine the orientation of the table, i.e. If current states represent the different rows of the table and the events the columns or vice-versa. Ragel file export For the ragel (.rl) file format only ASCII FSMs can be exported. The resulting file serves as an input for the ragel state machine compiler. The ragel state machine compiler is a compiler that generates code from a high-level state machine description language. In this way, you can create string parsers for example.
For details refer to the. A dialog allows you to create a so-called action file. That means, the ragel state machine specification is divided into two files.
One that contains the state machine logic (which I will call FSM file here) and an action file that contains the action definitions and a framework calling the state machine. Thus, the action file actually includes the FSM file. The name of the action file is determined automatically by appending 'action'at the end of the file name. The idea is that you create the action file only once at the beginning, and then edit this file manually to define the specific actions. You can then modify your FSM logic in Qfsm as many times as you want and regenerate the FSM file without losing your own action definitions.
Example: suppose you have created an ASCII FSM and you export it under the name myFSM.rl. If you check the option 'Create action file' the action file will be created under the name myFSMactions.rl. Using ragel you can compile the action file: ragel -C -o myFSM.c myFSMactions.rl This will create a file, called myFSM.c with the C code of the FSM.
It will contain a function: int parse(char. string)that parses an input string and returns 1 if the FSM accepts it, i.e. Finishes in a final state, and 0 otherwise. SMC file export Similarly to ragel, the State Machine Compiler (SMC) transforms a textual state machine description (a.sm file) into code in one of the following languages: C, C, C#, Groovy, Java, JavaScript, Lua, Objective-C, Perl, PHP, Python, Ruby, Scala, TCL, VB.net. Again, there is a separation into two parts of code, i.e.
One class defines the FSM and is generated by SMC from the.sm file. The other is called the application class, or 'AppClass', which you have to write yourself and which should contain an instance of the FSM class. In the AppClass, you can issue events by calling the respective methods of your FSM class, i.e. The events/actions that you have defined as inputs in the FSM.
And you have to define the actions/events (i.e. Methods) that the FSM will call, i.e. The FSM transition outputs and entry/exit actions. For details refer to the. Qfsm can generate the.sm file from your graphical state diagram. This only works for 'free text' FSMs, and the inputs and outputs of the machine are not simple ASCII symbols or binary bits but method names, for example 'run' or 'suspend'. Several output actions (or events) can be specified by a comma-separated list.
Qfsm also supports state entry and exit actions, as well as default transitions (but not default states). Transition guards can also be added after the input events, for example 'doThis ctxt.isValid'. The object 'ctxt' refers to your AppClass. Here is a screenshot of a FSM for the purpose of exporting to SMC. Tfsmname.vhd The VHDL testbench instantiating the FSM module, a clock generation process, an initial reset and a stimuliobserver process.
Pfsmname.vhd A VHDL package declaration and body with all the necessary subprograms used in the testbench. Fsmnamestimuli.vec The file includes all the stimuli and expected results necessary for a complete verification of a finite state machine. Fsmnameresult.log Errors are documented in this file.
Per default, these files can be written to different directories within a clearly structured design directory. Therefore, in the export options a 'Base Directory' input string is asked, first: Basedirectory +-src fsmname.fsm efsmname.vhd afsmnamearchitecturename.vhd tfsmname.vhd pfsmname.vhd +-stimuli fsmnamestimuli.vec +-log fsmnameresult.log. State Chart XML A 'free text' FSM can be exported in the State Chart XML format as proposed by the W3C. Fouz al fahad to create lipstick range for mac 2017. The specification of SCXML can be found. Note that each transition is triggered by an event. And the text that is entered as transition input is used as the name of the event. The text that is entered as the transition output is interpreted as the name of an event that is to be sent when the transition is triggered.
Thus, if the output linked to a transition is non-empty a corresponding tag will be written. Grid You can choose the colour and size of the grid displayed on the working area. You can activate the grid via the main menu entry View-Grid.
Shadows You can determine if shadows are to be drawn and the their colour. Transitions You can determine the appearance of input conditions and outputs drawn on top of the transitions. Tooltips You can determine if tooltips should be shown or not when moving the mouse pointer over a state or a transition. Initial transition descriptor Enter the text that is displayed next to the initial transition. Default: 'Reset'.
Inversion descriptor Enter the text that is displayed before inverted transition conditions. Default: 'NOT'. 'Any input' descriptor Enter the text that is displayed for transitions that are activated by any input. Default: 'any'. Default transition descriptor Enter the text that is displayed for default transitions. Default: 'default'.