-
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:
- undefined symbols
- multiple definition of symbols
- circular definition of symbols
-
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.
- 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:
- Creation of the boolean variables.
- Creation of the BDD representing the inertia of the system when
there are processes. In fact when a process is running the
other processes are stopped, and their state variables don't
change.
- Creation of the BDD representing what does not change in the
system, i.e. the set of invariance. These are introduced in the
model by the keyword "INVAR" or by the normal
assignments (i.e. "ASSIGN x : = y & z;"). These
states are not stored in the transition relation, they are
stored in an a doc variable.
- Creation of the BDD representing the set of initial states.
- Creation of the BDD representing the transition relation.
Various ways of representing the transition relation are offered
the users.
- Monolithic: the monolithic transition relation is
computed.
- Disjunctive Partioned: the transition relation is
stored as an implicitly disjoined list of transition relation.
This kind of partitioning can be used only if the model
considered is an asynchronous one.
- Conjunctive Partioned: the transition relation is
stored as an implicitly conjoined list of transition relation.
This kind of partitioning can be used only if the model
considered is a synchronous one.
- Conjunctive Partioned IWLS95: as the above, but the
heuristic proposed in [1] is used to order partition clusters.
- Computes the fairness constraints. I.e. each fairness constraint
(which can be a CTL formula) is evaluated and the resulting BDD
is stored in the list fairness_constraints_bdd to be
then used in the model checking phase.
[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