

                               Foundation Flows
                            ----------------------
                              Version : 17.10-p003_1

The scripts provided here are intended to be used by Cadence AEs as the starting 
point for assisting customers in building an implementation environment with Innovus.
They provide a working example containing guidelines and recomendations for command 
sequences and options.  Some customization is expected as each customer and design 
will have unique requirements. The goal was to capture a general methodology from 
which to build upon.

                ------------------------------------

The foundation flows reside in the SCRIPTS directory (created by writeFlowTemplate).  
This directory can be renamed and/or moved but the contents within the SCRIPTS
directory must remian unchanged.  The scripts directory is accessed by the
variable "vars(script_root) <path>" in the setup.tcl.

The setup.tcl is the main input file to the foundation flow. It defines all 
the input data required to run each of the foundation flows. 

Additionally, an edi_config.tcl must be created toset flow variables, 
desired command options, and optional plug-ins.  

Finally, for LP/CPF flows, an additional config file (lp_config.tcl) can 
optionally be used to help automate some low power related tasks.

                ------------------------------------

The TEMPLATES directory contains templates for all of these files which can
be manually copied and edited:
  
	TEMPLATES/INNOVUS/setup.tcl
	TEMPLATES/INNOVUS/innovus_config.tcl 
	TEMPLATES/INNOVUS/lp_config.tcl 

There is also a utility that can be used to generate these files based on 
existing design data.  To generate, run EDI, load an initial database, 
and 'source SCRIPTS/gen_setup.tcl' or run the new command generateFFSetupFile.

This will generate a *.auto.tcl files which can be reviewed/edited
and then renamed. 

                ------------------------------------

The EXAMPLES directory contains some example configuation files as well as
some sample plug-ins.

                ------------------------------------

To generate the foundation flow scripts based on your setup , do the following:

	tclsh <path_to>/SCRIPTS/gen_flow.tcl -m <flat | hier > <steps>

    where <steps> = single step, step range, or 'all'

To execute the flow, run 'make <target>'
