Each FSM has an internal representation. Each internal representation can be stored on secondary memory on what we call a FSM file. This gives the user the possibility to store intermediate computation results and to exchange information on a FSM and BDD basis. A result of this strategy is to allow the user to perform with great flexibility a certain number of (expensive) operations such as partially traverse a FSM, store intermediate results, and restart reachability analysis afterwards.
Internal and external (on files) formats are pretty alike one to the other. They contain information about the size of the FSM (number of inputs, outputs, latches), names, and BDD representations (for initial state set, next states and output functions, transition relations, and so on). The current format is the following one:
.Fsm <name> .Size .i <Number of Primary Inputs> .o <Number of Primary Outputs> .l <Number of Memory Elements> .EndSize .Ord .ordFile <File Name for the Variable Order File> .EndOrd .Name .i <Name of Primary Input Variables> .ps <Name of Present State Variables> .ns <Name of Next State Variables> .EndName .Index .i <Variable Index for Primary Inputs> .ps <Variable Index for Present State Variables> .ns <Variable Index for Next State Variables> .EndIndex .Delta .bddFile <File Name for the Next State Functions BDD File> .EndDelta .Lambda .bddfile <File Name for the Output Functions BDD File> .EndLambda .InitState .bddFile <File Name for the Initial State Set BDD File> .EndInitState .Tr .bddFile <File Name for the Transition Relation BDD File> .EndTr .Reached .bddFile <File Name for the Reachable State Set BDD File> .EndReached .EndFsm
In general, not all the sections are present, depending on the ``state'' of the program. For example, the reachable state set at the beginning does not exist and storing the FSM implies not storing the section
.Reached .bddfile <File Name for the Reachable State Set BDD File> .EndReached
Functions are given to perform a certain number of operations on the FSM structure. Namely we allow the user to: