# OpenMPL
**Repository Path**: hxp4338777/OpenMPL
## Basic Information
- **Project Name**: OpenMPL
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: BSD-3-Clause
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-12-16
- **Last Updated**: 2021-10-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# OpenMPL
> **OpenMPL** stands for open multiple patterning lithography framework.
| Stitch Insertion | Graph Simplification | Decomposition |
| ---------------- | -------------------- | ------------- |
|
|
|
|
### Pre-requisite
- [GCC](https://gcc.gnu.org)
- Recommend GCC 4.8 or later.
- Other compilers may also work, but not tested.
- [CMake](https://cmake.org)
- Require 3.8.2 or later.
- [Boost](https://www.boost.org)
- Require 1.55 or later.
- Need to install and visible for linking.
- Custom installation path may require to export ```BOOST_ROOT``` for [CMake](https://cmake.org/cmake/help/v3.8/module/FindBoost.html).
- [Limbo](https://github.com/limbo018/Limbo)
- Integrated as a git submodule.
- [Gurobi](https://www.gurobi.com) (Optional)
- ILP solver.
### Publications
* [Wei Li](https://wadmes.github.io/cv/), [Yuzhe Ma](http://yuzhe630.github.io/), [Qi Sun](http://qisunchn.top/), [Lu Zhang](https://zhanlgu.github.io/about/), [Yibo Lin](http://yibolin.com), [Iris Hui-Ru Jiang](http://www.ee.ntu.edu.tw/profile1?id=1060726), [Bei Yu](http://www.cse.cuhk.edu.hk/~byu/index.html), [David Z. Pan](http://users.ece.utexas.edu/~dpan/),
“**OpenMPL: An Open Source Layout Decomposer**”, accepted by IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems (TCAD).
([preprint](https://doi.org/10.1109/TCAD.2020.3042175))
* [Wei Li](https://wadmes.github.io/cv/), [Yuzhe Ma](http://yuzhe630.github.io/), [Qi Sun](http://qisunchn.top/), [Yibo Lin](http://yibolin.com), [Iris Hui-Ru Jiang](http://www.ee.ntu.edu.tw/profile1?id=1060726), [Bei Yu](http://www.cse.cuhk.edu.hk/~byu/index.html), [David Z. Pan](http://users.ece.utexas.edu/~dpan/),
"**OpenMPL: An Open Source Layout Decomposer**",
IEEE International Conference on ASIC (ASICON), Chongqing, China, Oct. 29–Nov. 1, 2019.
([preprint](https://arxiv.org/pdf/1809.07554v3.pdf)) ([slides](http://yibolin.com/publications/papers/DFM_ASICON2019_Li.slides.pdf))
### Docker Version
We provide the docker version to avoid annoying compilation.
You can pull the image by
```bash
$ docker pull wadmes/openmpl:latest
```
The OpenMPL folder locates in `/home/OpenMPL`
### How To Compile
```bash
$ 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
Small benchmarks (ISCAS) [Download](http://www.cse.cuhk.edu.hk/~wli/ISCAS_benchmark.zip)
big benchmarks (ISPD19) [Download](http://www.cse.cuhk.edu.hk/~wli/ISPD19.zip)
### How To Execute
```bash
$ cd bin/
$ ./OpenMPL
```
A table of options :
```bash
-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
### 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](https://github.com/limbo018/OpenMPL/blob/master/LICENSE)]
### Authors
| Name | Affiliation | email |
| ------------ | ------------------- | --------------------------------------------------------- |
| Yibo Lin | School of EECS, PKU | [yibolin@pku.edu.cn](mailto:yibolin@pku.edu.cn) |
| Bei Yu | CSE Dept, CUHK | [byu@cse.cuhk.edu.hk](mailto:byu@cse.cuhk.edu.hk) |
| Wei Li | CSE Dept, CUHK | [werry715@gmail.com](mailto:wli@cse.cuhk.edu.hk) |
| Yuzhe Ma | CSE Dept, CUHK | [yzma@cse.cuhk.edu.hk](mailto:yzma@cse.cuhk.edu.hk) |
| David Z. Pan | ECE Dept, UT Austin | [dpan@ece.utexas.edu](mailto:dpan@ece.utexas.edu) |