OpenMPL stands for open multiple patterning lithography framework.
Stitch Insertion | Graph Simplification | Decomposition |
---|---|---|
-
- Recommend GCC 4.8 or later.
- Other compilers may also work, but not tested.
-
- Require 3.8.2 or later.
-
- Require 1.55...1.72.
- Need to install and visible for linking.
- Custom installation path may require to export
BOOST_ROOT
for CMake.
-
- Integrated as a git submodule.
-
Gurobi (Optional)
- ILP solver.
-
Wei Li, Yuzhe Ma, Qi Sun, Lu Zhang, Yibo Lin, Iris Hui-Ru Jiang, Bei Yu, David Z. Pan, “OpenMPL: An Open Source Layout Decomposer”, accepted by IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems (TCAD). (preprint)
-
Wei Li, Yuzhe Ma, Qi Sun, Yibo Lin, Iris Hui-Ru Jiang, Bei Yu, David Z. Pan, "OpenMPL: An Open Source Layout Decomposer", IEEE International Conference on ASIC (ASICON), Chongqing, China, Oct. 29–Nov. 1, 2019. (preprint) (slides)
We provide the docker version to avoid annoying compilation. You can pull the image by
$ docker pull wadmes/openmpl:latest
The OpenMPL folder locates in /home/OpenMPL
$ 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 be changed via
cmake .. -DCMAKE_INSTALL_PREFIX=your_installation_path
- 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.
Small benchmarks (ISCAS) Download big benchmarks (ISPD19) Download
$ 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. Another example for large benchmark: /bin/run_big.sh
-
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
- BSD-3-clause License [LINK]
Name | Affiliation | |
---|---|---|
Yibo Lin | School of EECS, PKU | [email protected] |
Bei Yu | CSE Dept, CUHK | [email protected] |
Wei Li | CSE Dept, CUHK | [email protected] |
Yuzhe Ma | CSE Dept, CUHK | [email protected] |
David Z. Pan | ECE Dept, UT Austin | [email protected] |