liwg06 / OpenMPL

An open multiple patterning framework

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

OpenMPL

OpenMPL stands for open multiple patterning lithography framework.

Stitch Insertion Graph Simplification Decomposition

Pre-requisite

  • GCC

    • Recommend GCC 4.8 or later.
    • Other compilers may also work, but not tested.
  • CMake

    • Require 3.8.2 or later.
  • Boost

    • Require 1.55 or later.
    • Need to install and visible for linking.
    • Custom installation path may require to export BOOST_ROOT for CMake.
  • Limbo

    • Integrated as a git submodule.
  • Gurobi (Optional)

    • ILP solver.

Publications

How To Compile

$ git clone https://github.com/limbo018/OpenMPL.git 
$ cd OpenMPL
$ git submodule update --init --recursive
$ mkdir build
$ cd build
$ cmake .. 
$ make
$ make install

The default installation path is the repo directory. It can bee changed via

cmake .. -DCMAKE_INSTALL_PREFIX=your_installation_path

Features

  • Contact or metal layer decomposition
  • Stitching
  • Support 3 or 4 coloring
  • Density control
  • Multi-threading
  • Small memory usage
  • Multiple algorithms:
    • ILP (Gurobi API)
    • SDP (Csdp API)
    • LP (Gurobi API)
    • Dancing Links

The Csdp API used in OpenMPL has been modified and built for threading safety at high level.

How to Get Benchmarks

Download

How To Execute

$ cd bin/
$ ./OpenMPL

A table of options :

-help (false)                toggle printing help message
-in                          input gds file name
-out ()                      output gds file name
-coloring_distance (0)       a floating point number indicating number of coloring distance in nanometer
-color_num                   an integer indicating number of masks (colors) < 3|4 >
-simplify_level (3)          an integer indicating graph simplification level < 0|1|2|3 >
-thread_num (1)              an integer indicating maximum thread number
-path_layer                  an integer indicating layer for conflict edges
-precolor_layer              an integer indicating layer for pre-colored patterns
-uncolor_layer               an integer indicating layer for coloring
-algo (BACKTRACK)            algorithm type < ILP|BACKTRACK|LP|SDP >
-shape (RECTANGLE)           shape mode < RECTANGLE|POLYGON >
-verbose (false)             toggle controlling screen messages
-dbg_comp_id (4294967295)    debug component id
-use_stitch                  use stitch to avoid conflict
-gen_stitch                  generate stitch candidate
-weight_stitch               a floating point number indicating the weight of stitch

One exmaple : /bin/run.sh.

Possible Compiler Problems

  • default CFLAGS of boost and gurobi are different in newest version

  • downgrade the boost version

  • SimpleMPL.cpp:461:5: error: ‘graph_simplification_type’ has no member named ‘set_isVDDGND’
    
    • checkout to stitch branch in your limbo directory

License

  • BSD-3-clause License [LINK]

Authors

Name Affiliation email
Yibo Lin School of EECS, PKU yibolin@pku.edu.cn
Bei Yu CSE Dept, CUHK byu@cse.cuhk.edu.hk
Wei Li CSE Dept, CUHK werry715@gmail.com
Yuzhe Ma CSE Dept, CUHK yzma@cse.cuhk.edu.hk
David Z. Pan ECE Dept, UT Austin dpan@ece.utexas.edu

About

An open multiple patterning framework

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:C++ 86.3%Language:Shell 10.8%Language:CMake 2.8%Language:C 0.1%