State Machine Editor (fizzim?) Design Specifications
The object is to provide a comfortable “bubbles and arrows” design environment, while decoupling this as much as possible from the HDL code implementation. The output will be some sort of database (preferably ascii and preferably with a parser module available in perl). This database will contain both functional information of use to the backend processor as well as graphical information of value to the gui.
A backend processor will read the database and create verilog (or vhdl, or C, or whatever) code. We will supply an intial simple backend in perl. Hopefully others will contribute to the backend project. We should also look at interfacing to fsm_perl, if it still exists.
From the gui’s perspective, there are only two types of objects – states and transitions. Each of these can have attributes assigned. Some attributes are “standard”, but you can add your own. From the point of view of the gui, the only difference is that the standard ones are given to you by default to save typing, and cannot be removed. The gui has little or no understanding of what the attributes mean.
Attributes can also be assigned to the state machine itself. These are global attributes.
Attributes are created and managed on a central tab (probably left-click in an open area, select properties, then select an attributes tab). This allows defaults to be set and so forth. There are three attribute tabs, one for global attributes, one for state attributes, and one for transition attributes. Each attribute has the following fields:
In addition, each attributes table (meaning each tab) can be made visible and placed on the page for those who like everything shown.
Any attribute that is defined will show up on the attributes tab of all objects of the appropriate type. Any user-defined attributes MUST be created in the appropriate attributes definition tab before it will show up on the objects.
Issue: How/when are attribute values placed on page if centrally defined? If user adds one with visibility on, does it auto’ly pop up on all related objects?
Initial location will be on/near the object. The user can then move it and it stays put unless moved again. It would be nice if this location information were relative to the object so that it moves with the object. In the initial implementation, the gui won’t spend a lot of effort trying to find a “nice” location. Just slap it down and let the user move it.
Each attribute should have a “visibility” property. Options are on/off/default. Default value comes from the global attributes page described above.
Standard global Attributes:
Standard state attributes:
This will just be a string (in the “value” field). It will be up to the backend tool to map this to a value however it wants.
Just a string to the gui. For reg’d outputs, a constant. For mealy outputs, this could be an equation.
Standard transition attributes:
This is just a string to the gui.
Users may define their own attributes. These could be specific to a particular backend processor, or this feature could be used to add comments.
In addition to setting properties and attributes, there are some gui operations.
Operations.
Just pops up a new state bubble where you click. You can then select it, move it, resize it, and edit its attributes.
State transition snaps a straight line between the selected states, whose anchor points can then be moved using edit object.
Just puts up loopback arc. Loopback should be the default behavior if no transition equations are true, so this can be just for looks. But it should also be possible to put an equation on the loopback arc and actually have the default behavior be a normal transition arc with an equation of “1”. To make this work, you’d have to give the loopback arc a higher priority than the new default arc. Not sure how hard this will be to implement in the backend processor.
Allows you to grow/shrink bubbles, and move anchor points on transition arrows.
The ends of the arcs stay connected. You can edit the arc points to pretty them up.
Issue: What happens to previously edited transition arc points when one of the states is moved?
Issues:
Enhancements