compile.h
External header file
compileInt.h
Internal header file
compileCheck.c
Performs semantic checks on the model.
compileCmd.c
Shell interface for the compile package.
compileConj.c
Routines to performs the computation of the conjunctively decomposed transition relation.
compileDisj.c
Routines to performs the computation of the disjunctively decomposed transition relation.
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.
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.
compileUtil.c
Routines for model computation.

compile.h

External header file

By: Marco Roveri

()
The symbolic name of the input process selector variable.
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.

compileInt.h

Internal header file

By: Marco Roveri


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.

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
CommandBuildVariables()
Builds the BDD variables necessary to compile the model into BDD.
CommandBuildModel()
Compiles the flattened hierarchy into BDD
CommandComputeFairnessConstraints()
Evaluates the fairness constraints
CommandDumpModel()
Saves the current internal representation of the model
CommandAddTrans()
Modifies the transition relation
CommandAddInit()
Modifies the set of initial states.
CommandAddFairness()
Adds a fairness constraint to the model
CommandRestoreModel()
Restores the model after interactive model modification.
CommandWriteOrder()
Writes variable order to file.
CommandIwls95PrintClusterInfo()
Prints out the information of the Iwls95 clustering.
CommandIwls95PrintOption()
Prints the Iwls95 Options.
CommandGo()
Implements the go command
CommandGetInternalStatus()
Implements the get_internal_status command

compileConj.c

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

By: Marco Roveri

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

See AlsocompileMono.c, compileIwls95.c, compileDisj.c

Compile_CompileModelConj()
Builds an implicitly conjoined transition relation.
print_conj_part_info()
Prints the BDD size of the transitions.
print_conj_part_detailed_info()
Prints the symbolic variables of each partition and each cluster.
compileCompileModelConjRecur()
Recursively build the portioned transition relation.
make_quantifiers()
Computes the cube to be quantified for each cluster.
make_support_list()
Given a list of {A|B}DDs then return the list of the corresponding set of support.

compileDisj.c

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

By: Marco Roveri

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

See AlsocompileMono.c, compileIwls95.c, compileConj.c

Compile_CompileModelDisj()
Builds the disjunctively partitioned transition relation.
print_disj_part_info()
Prints the BDD size of the partitions.
add_to_bdd_and_abstract_input()
Abstract the input variables from the given BDD.

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.
init_state_vars()
Initializes the array necessary to extract minterms from BDDs
make_state_vars()
Creates the array necessary to extract minterms from a BDD.
free_state_vars()
Free the array necessary to extract minterms.
reset_encode()
Reset the counters necessary to the encoder.
get_bdd_state_var()
Adds a new boolean variable to the DD package.
get_bdd_input_var()
Adds a new boolean variable to the DD package.

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.

Compile_FlattenHierarchy()
Traverses the module hierarchy and extracts the information needed to compile the automaton.
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.

compileIwls95.c

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

By: Marco Roveri

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, compileDisj.c, compileConj.c

Compile_CompileModelIwls95()
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.
Iwls95MakeClusters()
Forms the clusters of relations based on BDD size heuristic.
Iwls95PrintOption()
Prints the option values used in IWLS95 technique for image computation.
Iwls95PrintClustersInfo()
Prints out the info for each cluster.
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.
print_iwls95cp_part_info()
print_iwls95cp_detailed_info()
compileCompileModelIwls95Recur()
Given a list of expression, then the corresponding list of ADD is returned.
Iwls95ComputeBenefit()
Computes the benefit of the given cluster.
CheckQuantificationSchedule()
Given a list of clusters representing the relations this function checks if the schedule is correct.
IwlsCheckMonolithic()
Checks that the And_i Ti == Mon_T
Iwls95CLuster_equal()
Checks if two clusters are equal.
Iwls95DeleteCluster()
Deletes a given cluster from a list of clusters.
Iwls95PrintCluster()
Prints the cluster information.

compileMono.c

Routines to performs the computation of the monolithic transition relation.

By: Marco Roveri

Routines to performs the computation of the monolithic transition relation.

See AlsocompileIwls95.c, compileConj.c, compileDisj.c

build_model_monolithic()
Builds the monolithic transition relation.
print_monolithic_info()
Prints statistical information on monolithic transition relation.

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.


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.

()
The "running" symbol.
sym_intern()
Builds an internal representation for a given string.
create_process_symbolic_variables()
Creates the internal process selector variable.
Compile_BuildVarsBdd()
The ADD variables are built.
build_proc_selector()
Creates the running ADD variable.
Compile_CompileFrame()
Computes the ADD representing what does not change between two consecutive states.
build_real_state_variables()
Computes the real_state_variables, a list of ADDs, one for each symbolic scalar variable.
Compile_CompileInit()
Computes the init_bdd.
Compile_CompileModel()
Builds the the transition relation of the model.
compute_fairness_constraints()
Computes the set of fairness constraints BDD.
print_model_statistic()
Prints out model statistics.
build_proc_selector_recur()
Performs the recursive step of build_proc_selector.

Last updated on 990908 16h51