Skip to content

TSMC 130 - Flowkit

To get access to the design flow, you can either clone the repositories below or use the direct download links. The core part of the scrips is open and common among all design flows. The main repositories that include technology specific information, require a valid 3-way NDA for the specific technology. For more info contact asic.support@cern.ch.

The flow is developed and supported by the CERN ASIC Support Service with contributions from the HEP community. Any contribution, be it minor or major, is very welcome. Please see Contributing.

Requirements

The flow is based on Cadence Flowkit and uses the following tool versions:

  • Genus 21.10

  • Innovus 21.11

  • Tempus 21.11

  • Voltus 21.11

Setup

1. Clone or download the repository

1.1 If you have access to CERN GitLab

git clone https://gitlab.cern.ch/asic-design-support/digital-design-flows/hep-tsmc130/hep-digital-flow-tsmc-65nm.git
this repository contains the main Flowtool file (flow.yaml) and other configuration files (inside config/). These files are project-dependent, so you need to edit them (see below).

Clone the submodule:

git submodule init
git submodule update --remote --merge

You should have one submodule folder populated (common-scripts), which contains technology-independent flow steps and scripts.

This submodule is project- and technology-independent and should not be modified unless you have specific needs. This structure allows to keep the flow steps updated, without overwriting your project configuration. When an update on either of the submodules is available, a simple git submodule update --remote --merge will get you the latest version.

1.2 If you don't have access to CERN GitLab

Alternatively you can download the latest releases here:

Tar file download not available

2. Edit the configuration files

  • Take a look at the two config files:

    • config/setup.yaml contains design and tool related variables
      • flow_root must be adjusted to point to the 'impl' directory in the flow repository.
      • rtl_list, rtl_dirs and/or rtl_listfile must be altered/filled to point to your RTL sources
    • config/setup_mmmc.yaml contains the MMMC definitions (change this only if needed)
  • Put your SDC files inside config/constraints/. Don't forget to associate them to the correct mode in the MMMC config.

  • Fill in the file config/cds.lib to include your base cds.lib (usually in your home folder) and any other needed cds.lib (for macros, IPs, etc.).

    • By default (with an RTL-only design), no changes to the cds.lib are needed, and it will be copied to the work directory automatically
  • Put your UPF power intent files inside config/power_intent/.

3. Familiarize with the flow

The file flow.yaml is the main configuration file to manage the Flowkit execution. The file is composed of different sections:

  • Flow Setup section: can be disregarded.

  • Feature Definition section: lists and describes the available flow features. You can enable optional features by adding them to the "features:" YAML key, or by passing them on the command line when invoking Flowtool with the -enabled <feature> option.

  • Flow Step Definitions section: reads in the TCL files where the flow steps are defined. Should you have a file with custom flow steps, add it to the user_flow_steps list. The flow_current key contains the list of flows (defined in the Flow Definitions section) that will be run by default by Flowtool.

  • General Flow Configuration section: reads all the other YAML configuration files.

  • Flow Definitions section: defines the flows and all the steps inside them. There are many possibilities to customize the flow, which are beyond the scope of this README. Some tips are described in the comments at the beginning of the section.

4. Run the flow

Create or go to any working directory you like. Ensure that all neccessary changes in setup.yaml and setup_mmmc.yaml have been made. Following that, the flow may be invoked using the command:

flowtool -file <path to main repository>/flow.yaml [options]

Some useful options are:

  • -predict summary and -predict verbose to get a prediction of the steps that will be executed without actually running the flow

  • -from <step> and -to <step> to run the flow only from or to a specific step (-flow <flow> is a shorthand for -from <first step of flow> -to <last step of flow>)

  • -interactive loads the configuration files and open an interactive session of the tool, but does not execute anything (use run_flow <step> inside the tool to run step by step)

  • -verbose to see the live output of the tool session

Examples

Run a prediction of all flow steps that will be run:

flowtool -file <path to main repository>/flow.yaml -predict verbose

Run the whole flow (as defined by flow_current in scripts/flow.yaml) with limited output info:

flowtool -file <path to main repository>/flow.yaml

Run the whole flow with the full tool output:

flowtool -file <path to main repository>/flow.yaml -verbose

Run the synthesis flow only:

flowtool -file <path to main repository>/flow.yaml -flow synthesis

Run until a particular step:

(If the name of the flow step is not unique, use a hierarchical name, like -to place.block_finish)

flowtool -file <path to main repository>/flow.yaml -to init_floorplan

Load the configuration and flow steps and open an interactive session of the tool (doesn't run anything):

flowtool -file <path to main repository>/flow.yaml -interactive

Run the flow with an interactive session open:

flowtool -file <path to main repository>/flow.yaml -flow implementation -interactive_run

Run with a single tool session for each tool (by default, Flowtool opens a new session at every flow):

(This saves runtime, but you get aggregated logs and reports by tool instead of by step)

flowtool -file <path to main repository>/flow.yaml -isolate tool

Notes for triplicated designs

This flow provides the tmr_design feature, which turns on some additional steps to take case of particular constraints for TMR designs, like preserving voters and special placement distance constraints. However, every designer has its own preference for implementing triplication, and so these steps will never be general enough to cover all possible use cases. By default, this these steps are disabled, so that the implementation flow can be used also for other use cases. To enable the extra flow steps, you may either add -tmr_design to the features: attribute in flow.yaml, or you can use flowtool <your_arguments> -enabled tmr_design.

If you are using this flow to implement a TMR design, you should take a look at the special TMR steps and customize them to suit your needs, naming conventions, particular design choices, etc, or add new ones from scratch. These steps are for example:

  • c_set_preserve_objects

  • c_set_dont_touch

  • c_unset_dont_touch

  • c_tmr_set_place_distance

  • c_tmr_set_tieoffs_distance

  • c_tmr_create_regions (this is an example and it's not included in the flow)

Maintainers

Contributing

All types of contributions, being it minor and major, are very welcome! Feel free to create issues or create a branch and generate a merge requests on the repository. For more info contact asic.support@cern.ch

Terms and conditions

BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.