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.
compileCP.c
Methods of CPCluster, CPList, CPTrans structures
compileCPUtil.c
Utilities for the CP data structures.
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.
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, Emanuele Olivetti

()
The empty CP List
()
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
compute_bdd_affinity()
Compute the Affinity of two BDD clusters.
compute_bdd_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

compileCP.c

Methods of CPCluster, CPList, CPTrans structures

By: Emanuele Olivetti

Methods of CPCluster, CPList, CPTrans structures for all conjunctive partitioning methods.

CPClusterAlloc()
Allocates and initializes memory for a cluster.
CPClusterDup()
Duplicates a cluster allocating necessary memory.
CPClusterFree()
Frees the memory allocated for CPCluster struct.
()
Frees the memory allocated for CPCluster struct.
CPClusterEqual()
Checks if two clusters are equal.
CPClusterGetTi()
Returns a pointer to the transition inside the cluster
CPClusterSetTi()
Sets the transition inside the cluster
CPClusterGetEi()
Returns a pointer to the variables to be quantified
CPClusterSetEi()
Sets the variables to be quantified inside the cluster
CPClusterGetInfo()
Returns a pointer to the (optional) info of the cluster
CPClusterSetInfo()
Sets the (optional) info inside the cluster
()
Frees the info of a cluster
CPListGetItem()
Returns the cluster held by the current position of the list
CPListNext()
Returns the next position in the list
CPListCons()
Adds a cluster on top of a given list
CPListReverse()
Reverses a given list
CPListLength()
Returns the number of items in the list
CPListAlloc()
Creates a list with a given cluster
CPListFree()
Frees the list of clusters and all its elements
CPListIsEmpty()
Tests if a list is empty.
CPListIsNotEmpty()
Tests if a list is empty.
()
Frees the list of clusters and all its elements
()
Frees the only Info field of each cluster
CPListDup()
Dups a given list of clusters
CPListDeleteCluster()
Deletes every occurrence of a cluster in a list
CPListAddOneCluster()
Adds one cluster and compute the variables to be quantified
CPListCheckComparing()
Compare two transition relations
CPListBuildSchedule()
Builds the quantification schedule of a given cluster list
CPListBuildElementaryBDDList()
Builds a clustered transition relation given variables and assumptions
CPListBuildThreshold()
Forms the clusters of relations based on BDD size heuristic.
CPListBuildMonolithicBDD()
Builds the monolithic transition relation BDD
CPListBuildMonolithicBDDFromCPlist()
Builds the monolithic transition relation BDD
CPListBuildMonolithic()
Builds the monolithic transition relation BDD in a CPList
CPListPrintInfo()
Prints size of each cluster in a given clustered transition relation
CPListPrintClustersInfo()
Prints detailed information of a given transition relation
CPListPrintDetailedInfo()
Prints detailed information of a given transition relation
CPListComputeClustersCube()
Computes the cube of the set of support of all the clusters.
CPListBuildBasicRecur()
Recursively build the portioned transition relation.
CPListBuildScheduleRecur()
Computes the schedule for the given list of clusters
CPTransSetBackward()
Sets the backward transition relation
CPTransGetBackward()
Returns the backward transition relation list
CPTransSetForward()
Sets the forward transition relation
CPTransGetForward()
Returns the forward transition relation list
CPTransAlloc()
Allocates memory for a conjunctive partitioning transition
CPTransFree()
Frees a CPTrans and all data inside
()
Frees a CPTrans and all data inside
CPTransDup()
Duplicates a CPTrans and all data inside
CPTransPrintInfo()
Prints short info associated to a CPTrans
CPTransPrintDetailedInfo()
Prints short detailed associated to a CPTrans

compileCPUtil.c

Utilities for the CP data structures.

By: Emanuele Olivetti and Marco Roveri

Utilities for the CP data structures. Here are provided primitives to add a cluster to a cluster list, and routines to check the correctness of the clustered partioned transition relation.

compileCPCheckPartitionedTransition()
Perform some test on transition relation
CPCheckQuantificationSchedule()
Given a list of clusters representing the relations this function checks if the schedule is correct.
Compile_CPAddClusterAndFillSchedule()
Add the LTL tableau as a new BDD cluster in the transition relation.

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_states()
Print a set of states.
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.
eval_constant()
Evaluates a constant expression.
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
compileFlattenSexpModelAux()
required
compileFlattenSexpModelRecur()
required
compileFlattenConstantSexpCheck()
required
create_process_symbolic_variables()
Creates the internal process selector variable.
mk_and()
required
mk_true()
required
mk_false()
required
type_to_string()
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.


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.
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.
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.

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.
compilePrintBddModelStatistic()
Prints out model statistics.
compileBddFsmPrintInfo()
required
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_expr_pair()
Writes flattened expression pairs 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_expr_pair()
Writes flattened expression pairs 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 2002/07/03 13h:30