compile.h
External header file
compileInt.h
Internal header file
compileAffinity.c
Affinity clustering optimized.
compileBEval.c
compileCheck.c
Performs semantic checks on the model.
compileCheckWff.c
Checks for potential formula errors.
compileCmd.c
Shell interface for the compile package.
compileCone.c
Computes the cone of influence of the model variables.
compileEncode.c
Routines that performs the encoding of the symbolic variables into BDD.
compileEval.c
Performs compilation of expression into ADD.
compileFlatten.c
Flattening of the model.
compileFsm.c
FSM data structures and manipulation routines in different formats.
compileFsmUtil.c
general functions for all conjunctive partitioning methods
compileIwls95.c
Build a conjunctively decomposed transition relation using the clustering heuristic by Ranjan et al, Iwls95.
compileMono.c
Routines to performs the computation of the monolithic transition relation.
compileOrd.c
Routines for reading and writing variable orders.
compileStruct.c
Structure used to store compilation results.
compileThreshold.c
Routines to performs the computation of the conjunctively decomposed transition relation.
compileUtil.c
Routines for model computation.
compileWriteBool.c
Creation of an SMV file containing the flattened booleanized model.
compileWriteFlat.c
Creation of an SMV file containing the flattened model.

compile.h

External header file

By: Marco Roveri

()
The symbolic name of the input process selector variable.

compileInt.h

Internal header file

By: Marco Roveri


compileAffinity.c

Affinity clustering optimized.

By: Emanuele Olivetti

Affinity clustering optimized.

list_entryAlloc()
Allocs a list_entry
pairAlloc()
Allocates a pair
bdd_compute_affinity()
Compute the Affinity of two BDD clusters.
list_heap_add()
Add a new entry in support list and new pairs in heap.
list_del()
Delete a cluster in support list.
affinity_move_clusters()
Copy over threshold clusters in result list or in support list & heap.
compileCPMakeAffinityClusters()
OPTIMIZED affinity clustering

compileBEval.c

By: Alessandro Cimatti and Marco Roveri

Conversion from scalar expressions to boolean expressions.

See Alsooptional

expr2bexpr()
Converts a scalar expression into a boolean expression.
detexpr2bexpr()
Converts a scalar expression into a boolean expression.
mk_true()
Support functions for expressions abstract syntax.
expr2bexpr_recur()
Converts a generic expression into a boolean expression.
scalar_atom2bexpr()
Converts an atomic expression into the corresponding (boolean) expression.
add2bexpr()
Converts a ADD into the corresponding (boolean) expression.
add2bexpr_recur()
Converts a ADD into the corresponding (boolean) expression.
mk_new_var()
Create a new (boolean) variable.
range_check()
Checks if the first argument is contained in the second.

compileCheck.c

Performs semantic checks on the model.

By: Marco Roveri

The routines to perform some the semantic checks.
The performed checks are:

Compile_CheckProgram()
Semantic checks on the model.
init_check_program()
Initializes the data structure to perform semantic checks.
init_check_program_recur()
Recursive step of init_check_program
check_circ()
Checks for circular definitions.
check_circular_assign()
Performs circular assignment checking
check_assign()
Checks for multiple or circular assignments.
check_assign_both()
Given a variable, it checks if there are multiple assignments to it.

compileCheckWff.c

Checks for potential formula errors.

By: Andrea Morichetti and Marco Roveri

Routines to check for potential formula errors. A potential error may arise when arguments do not match the formula operator domain, e.g. a AND b, where a or b are not booleans.

Compile_CheckWff()
Checking formula potential errors and results.
check_wff()
Checking formula potential errors and results. It is a front end of Compile_CheckWff
parsecheckwffcmd()
Parses string looking for a simple/ctl/ltl/compute expression.
wff_is_boolean()
Checks if an atom is boolean or symbolic.
wff_is_numeric()
Checks if an atom is numeric or symbolic.
check_wff_recur()
Performs the recursive step of the Compile_CheckWff function.
check_definition()
Returns the definition of a symbol.

compileCmd.c

Shell interface for the compile package.

By: Marco Roveri

This file contains the interface of the compile package with the interactive shell.

See AlsocmdCmd.c

Compile_Init()
Initializes the compile package.
Compile_End()
Shut down the compile package
CommandProcessModel()
Performs the batch steps and then returns control to the interactive shell.
CommandFlattenHierarchy()
Flattens the hierarchy of modules
CommandShowVars()
Shows model's symbolic variables and their values
CommandEncodeVariables()
Builds the BDD variables necessary to compile the model into BDD.
CommandBuildModel()
Compiles the flattened hierarchy into BDD
CommandBuildFlatModel()
Compiles the flattened hierarchy into SEXP
CommandBuildBooleanModel()
Compiles the flattened hierarchy into boolean SEXP
CommandWriteOrder()
Writes variable order to file.
CommandCPPrintClusterInfo()
Prints out the information of the clustering.
CommandIwls95PrintOption()
Prints the Iwls95 Options.
CommandGo()
Implements the go command
CommandGoBmc()
Implements the go_bmc command
CommandGetInternalStatus()
Implements the get_internal_status command
CommandCheckWff()
Checks formulas potential errors.
CommandWriteModelFlat()
Writes the currently loaded SMV model in the specified file, after having flattened it
CommandWriteModelFlatBool()
Writes a flat and boolean model of a given SMV file

compileCone.c

Computes the cone of influence of the model variables.

By: Marco Roveri and Marco Pistore

This file contains the functions needed for computing the cone of influence (COI) of a given formula. The COI of all the variables in the model is pre-computed ancd cached the first time a cone of influence is required (function initCoi. Functions are also provided that compute the dependency variables for a formula, namely those variables that appear in the formula or in one of the definitions the formula depends on.

()
Indicates that the dependency computation is ongoing.
()
Indicates that the COI computation should be verbose.
Formula_GetDependencies()
Computes dependencies of a given SMV expression
Formulae_GetDependencies()
Compute the dependencies of two set of formulae
ComputeCOI()
Compute the COI of a given set of variables
formulaGetDefinitionDependencies()
Compute the dependencies of an atom
formulaGetDependenciesRecur()
Recursive call to Formula_GetDependencies.
coiInit()
Pre-compute the COI of the variables

compileEncode.c

Routines that performs the encoding of the symbolic variables into BDD.

By: Marco Roveri

Routines that performs the encoding of the symbolic variables into BDD. At now the only available encoding is the binary one.

See AlsocompileEval.c, compileOrd.c

Compile_EncodeVarsInit()
Initializes the data structure relative to BDD variables.
Compile_EncodeVar()
Encode a variable into BDD.
CompileEncodeVarRecur()
Encodes a scalar variables into boolean variables.
Compile_GetOrdering()
Return the list of variables corresponding to the current order of variables in the system.
print_state()
Prints out the state represented by the given minterm.
print_state_vars()
Prints out the symbolic names of boolean variables stored in a cube.
bdd_count_states()
Return the number of states of a given BDD.
add_count_states()
Return the number of states of a given ADD.
add_shift_forward()
Shift the given set from current variables to next ones.
add_shift_backward()
Shift the given set from next variables to current ones.
bdd_shift_forward()
Shift the given set from current variables to next ones.
bdd_shift_backward()
Shift the given set from next variables to current ones.
bdd_pick_one_state()
Extracts a minterm from a given BDD.
bdd_pick_one_state_rand()
Extracts a random minterm from a given BDD.
make_minterm_vars()
Creates the array necessary to extract minterms from a BDD.
add_var_to_minterm_vars()
Adds a variable to the sarray necessary to extract minterms from a BDD.
free_minterm_vars()
Free the array necessary to extract minterms.
reset_encode()
Reset the counters necessary to the encoder.
get_bool_variable_name()
required
get_bdd_state_var()
required
get_bdd_input_var()
Adds a new boolean variable to the DD package.
create_boolean_state_var()
required
create_boolean_input_var()
required

compileEval.c

Performs compilation of expression into ADD.

By: Marco Roveri

This function contains the code to compile an expression into ADD. This is done by a traversal of the expression.

See AlsocompileUtil.c

()
Return value in case an error occurs.
()
Return value used to indicate that the evaluation of an atom is not yet terminated.
eval()
Given an expression the corresponding ADD is returned back.
eval_tree()
Given a list of expressions, this returns the list of the corresponding ADD.
eval_simplify()
Evaluates the expression given as input in the corresponding context and then simplifies the result using assumption.
eval_struct()
Takes an expression representing an identifier and recursively evaluates it.
eval_num()
Evaluates a number in a context.
enforce_definition()
Returns the definition of a symbol, if defined else report an error.
plus_op()
Adds two integers.
minus_op()
Subtracts two integers
times_op()
Multiplies two integers
divide_op()
Divide two integers
mod_op()
Computes the modulo of the division of two integers
lt_op()
Checks if an integer is less then the other.
gt_op()
Checks if an integer is greater then the other.
numeric_op()
Applies generic function to two operands.
node_plus()
Adds two integer nodes.
node_plus1()
Adds 1 to an integer node.
node_minus()
Subtracts two integer nodes.
node_times()
Multiplies two integer nodes.
node_divide()
Divides two integer nodes.
node_mod()
Computes the modulo of the division between two integer nodes.
node_lt()
Checks if an integer node is less then the other.
node_gt()
Checks if an integer node is greater then the other.
node_union()
Computes the set union of two s_expr.
node_setin()
Set inclusion
node_equal()
Checks for node equality.
add_plus()
Adds two integer ADDs
add_minus()
Subtracts two integer ADDs
add_times()
Multiplies two integer ADDs
add_divide()
Divides two integer ADDs
add_mod()
Computes the modulo of the integer division of two integer ADDs.
add_lt()
Checks if two integer ADDs are in the less then relation.
add_gt()
Checks if two integer ADDs are in the less then relation.
add_union()
Computes the set union of two set ADDs.
eval_sign()
Complements an ADD according to a flag.
unary_op()
Applies unary operation.
binary_op()
Applies binary operation.
ternary_op()
Applies ternary operation.
quaternary_op()
Applies quaternary operation.
if_then_else_op()
Evaluates if_then_else expressions returning the ADD representing IF ifarg THEN thenarg ELSE elsarg.
eval_struct_recur()
Performs the recursive step of eval_struct.
range_check()
Checks if the values of n is in the range allowed for the variable.
get_definition()
Given a symbol, the corresponding ADD is returned.
eval_recur()
Performs the recursive step of the eval function.

compileFlatten.c

Flattening of the model.

By: Marco Roveri

Performs the flattening of the model. We start from the module main and we recursively instantiate all the modules or processes declared in it.
Consider the following example:

MODULE main
...
VAR
a : boolean;
b : foo;
...

MODULE foo
VAR
z : boolean;
ASSIGN
z := 1;
The flattening instantiate the module foo in the main module. You can refer to the variables "z" declared in the module foo after the flattening by using the dot notation b.z.

()
Body of define in evaluation
Compile_FlattenHierarchy()
Traverse the module hierarchy, extracts the informations and flatten the hierarchy.
Compile_FlattenTableau()
Traverse the module tableau, extracts the informations and flatten the tableau.
compileFlattenProcess()
Flatten a hierarchy of SMV processes.
Compile_FlattenSexp()
Builds the flattened version of an expression.
Compile_FlattenSexpExpandDefine()
Flattens an expression and expands defined symbols.
compileFlattenSexpModel()
required
put_in_context()
Put a variable in the current "context"
instantiate_var()
Instantiates the given variable.
instantiate_vars()
Recursively applies instantiate_var.
make_params()
Builds the parameters of a module from the list of formal parameters of the module itself.
instantiate()
Instantiates all in the body of a module.
instantiate_by_name()
Starts the flattening from a given point in the module hierarchy.
compileFlattenHierarchy()
Traverses the module hierarchy and extracts the information needed to compile the automaton.
Flatten_GetDefinition()
Gets the flattened version of an atom.
Flatten_FlattenSexpRecur()
Recursive function for flattenig a sexp.
compileFlattenProcessRecur()
Recursive definition of Compute_FlattenProcess
make_atom_set()
Builds the atom set of the given range
compileFlattenSexpModelRecur()
required
create_process_symbolic_variables()
Creates the internal process selector variable.
mk_and()
required
mk_true()
required

compileFsm.c

FSM data structures and manipulation routines in different formats.

By: Marco Roveri and Emanuele Olivetti

This file provides FSM data structure in different formats, i.e. scalar in sexp, boolean in sexp, boolean in RBC and boolean in BDD. In each format a FSM is composed of the initial states, the invariant conditions, the transition relation and a set of fairness conditions. For each data structure the corresponding constructors/destructors are provided.


compileFsmUtil.c

general functions for all conjunctive partitioning methods

By: Emanuele Olivetti

general functions for all conjunctive partitioning methods

CPClusterInfoAlloc()
Allocates and initializes memory for CPCluster_Info struct.
CPClusterInfoFree()
Frees the memory allocated for CPCluster_Info struct.
CPFreeClustersList()
Frees a list of CPCluster_Info struct.
CPDupClustersList()
Duplicates a list of cluster allocating necessary memory.
compileBuildElementaryBDDList()
Builds BDD list from given variables list.
CPCheckMonolithic()
Checks that the And_i Ti == Mon_T
compileCPCheckPartitionedTransition()
Perform some test on transition relation
CPCheckQuantificationSchedule()
Given a list of clusters representing the relations this function checks if the schedule is correct.
AddOneCluster()
Returns a list with one new cluster and computes its quantifiers.
Compile_CPAddClusterAndFillSchedule()
Add the LTL tableau as a new BDD cluster in the transition relation.
compileBuildBasicCPRecur()
Recursively build the portioned transition relation.
compileCPMakeClusters()
Forms the clusters of relations based on BDD size heuristic.
CPCLuster_equal()
Checks if two clusters are equal.
CPDeleteCluster()
Deletes a given cluster from a list of clusters.
compileBuildSchedule()
Computes the schedule for the given list of clusters
compileCPBuildSchedule()
Computes the schedule for the given list of clusters
CPPrintClustersInfo()
Prints out the info for each cluster.
print_generic_part_info()
required
print_generic_part_bdd_info()
required
print_generic_detailed_info()

compileIwls95.c

Build a conjunctively decomposed transition relation using the clustering heuristic by Ranjan et al, Iwls95.

By: Marco Roveri and Emanuele Olivetti

Conjuncitively partitioned models are very sensitive to the way clusters are built and ordered. The algorithm implemented here takes into account the number of next state variables introduced, when choosing the next cluster in the order. The ordering of the clusters takes into account the "index" of the variables, because it was found that quantifying out a variable from a function becomes computationally less expensive as the depth (the index) of the variable in the BDD ordering increases.

  1. R. K. Ranjan and A. Aziz and B. Plessier and C. Pixley and R. K. Brayton, "Efficient BDD Algorithms for FSM Synthesis and Verification", IEEE/ACM Proceedings International Workshop on Logic Synthesis, Lake Tahoe (NV), May 1995.

See AlsocompileMono.c, compileThreshold.c

Compile_BuildModelIwls95CP()
The implicitly conjoined transition relation is computed accordingly to the heuristic described in IWLS95.
Iwls95GetOptions()
Gets the necessary options for computing the image and returns in the option structure.
Iwls95MakePartition()
Given a list of cluster, this function initializes the data structures to perform image computation.
Iwls95OrderClusters()
This function orders the clusters given as input accordingly with the order heuristic described in IWLS95.
Iwls95ComputeClusterInfo()
Computes the parameters necessary to use iwls95
Iwls95Compute_Supp_Q_Ci()
Computes the set Supp_Q_Ci.
Iwls95ComputeClusterInfoAux()
Computes some global parameters necessary in the ordering of clusters.
Iwls95ComputeCLustersCube()
Computes the cube of the set of support of all the clusters.
Iwls95CubeAnd()
Return the intersection of two cubes.
Iwls95ClusterInfoAlloc()
Allocates and initializes memory for Iwls95Cluster_Info struct.
Iwls95ClusterInfoFree()
Frees the memory allocated for Iwls95Cluster_Info struct.
Iwls95FreeClustersList()
Frees a list of Iwls95Cluster_Info struct.
Iwls95ComputeBenefit()
Computes the benefit of the given cluster.
MixedCLuster_equal()
Checks if two clusters (from different structures) are equal.
Iwls95DeleteCluster()
Deletes a given cluster from a list of clusters.
Iwls95PrintOption()
Prints the option values used in IWLS95 technique for image computation.

compileMono.c

Routines to performs the computation of the monolithic transition relation.

By: Marco Roveri and Emanuele Olivetti

Routines to performs the computation of the monolithic transition relation.

See AlsocompileIwls95.c, compileThreshold.c

Compile_BuildModelMonolithic()
Builds the monolithic transition relation into CP structure.
Compile_BuildModelMonolithicBdd()
Builds the monolithic transition relation BDD.

compileOrd.c

Routines for reading and writing variable orders.

By: Marco Roveri

Routines for reading and writing variable orders.

Compile_ReadOrder()
reads from a file the variable order.
Compile_WriteOrder()
Writes on a file the variable order.

compileStruct.c

Structure used to store compilation results.

By: Marco Roveri

Structure used to store compilation results.


compileThreshold.c

Routines to performs the computation of the conjunctively decomposed transition relation.

By: Marco Roveri and Emanuele Olivetti

Routines to performs the computation of the conjunctively decomposed transition relation.

See AlsocompileMono.c, compileIwls95.c

Compile_BuildModelThreshold()
Builds an implicitly conjoined transition relation.

compileUtil.c

Routines for model computation.

By: Marco Roveri

This file contains the code for the compilation of the flattened hierarchy into BDD:

[1] R. K. Ranjan and A. Aziz and B. Plessier and C. Pixley and R. K. Brayton, "Efficient BDD Algorithms for FSM Synthesis and Verification, IEEE/ACM Proceedings International Workshop on Logic Synthesis, Lake Tahoe (NV), May 1995.

sym_intern()
Builds an internal representation for a given string.
Compile_BuildVarsBdd()
The ADD variables are built.
build_real_state_variables()
Computes the real_state_variables, a list of ADDs, one for each symbolic scalar variable.
Compile_BuildInitBdd()
Computes the BDD representing set of initial states.
Compile_BuildInvarBdd()
Computes the BDD representing model invariants.
print_model_statistic()
Prints out model statistics.
Compile_InitializeBuildModel()
Initializes the build model.
Compile_InitializeSexpBuildModel()
required

compileWriteBool.c

Creation of an SMV file containing the flattened booleanized model.

By: Marco Roveri

Creation of an SMV file containing the booleanized and flattened model, processes will be removed by explicitly introducing a process variable and modifying assignments to take care of inertia.

Compile_WriteFlattenBool()
Prints the flatten version of an SMV model.
write_flatten_vars()
Writes VAR declarations in SMV format on a file.
write_flatten_expr()
Writes flattened expression in SMV format on a file.
write_flatten_bfexpr()
Writes flattened expression in SMV format on a file.

compileWriteFlat.c

Creation of an SMV file containing the flattened model.

By: Marco Roveri

Creation of an SMV file containing the flattened model, processes will be removed by explicitly introducing a process variable and modifying assignments to take care of inertia.

Compile_WriteFlatten()
Prints the flatten version of an SMV model.
write_flatten_vars()
Writes VAR declarations in SMV format on a file.
write_process_selector_define()
Writes DEFINE declarations in SMV format on a file.
write_flatten_define()
Writes DEFINE declarations in SMV format on a file.
write_flatten_expr()
Writes flattened expression in SMV format on a file.
write_flatten_assign()
Writes flattened ASSIGN declarations in SMV format on a file.
print_assign()
Prints an assignement statement

Last updated on 1020327 15h41