2016-03-15 19:12:39 -07:00
|
|
|
# Masque README
|
|
|
|
|
|
|
|
Masque is a Python module for designing lithography masks.
|
|
|
|
|
|
|
|
The general idea is to implement something resembling the GDSII file-format, but
|
2023-01-18 18:14:33 -08:00
|
|
|
with some vectorized element types (eg. circles, not just polygons) and the ability
|
|
|
|
to output to multiple formats.
|
2016-03-15 19:12:39 -07:00
|
|
|
|
2019-04-07 17:58:11 -07:00
|
|
|
- [Source repository](https://mpxd.net/code/jan/masque)
|
2020-09-26 17:41:00 -07:00
|
|
|
- [PyPI](https://pypi.org/project/masque)
|
2019-04-07 17:58:11 -07:00
|
|
|
|
|
|
|
|
2016-03-15 19:12:39 -07:00
|
|
|
## Installation
|
|
|
|
|
|
|
|
Requirements:
|
2022-08-18 23:00:45 -07:00
|
|
|
* python >= 3.8
|
2016-03-15 19:12:39 -07:00
|
|
|
* numpy
|
2023-01-23 22:27:26 -08:00
|
|
|
* klamath (optional, used for `gdsii` i/o)
|
2019-09-30 23:50:40 -07:00
|
|
|
* matplotlib (optional, used for `visualization` functions and `text`)
|
2020-05-19 01:00:00 -07:00
|
|
|
* ezdxf (optional, used for `dxf` i/o)
|
|
|
|
* fatamorgana (optional, used for `oasis` i/o)
|
2019-09-30 23:50:40 -07:00
|
|
|
* svgwrite (optional, used for `svg` output)
|
|
|
|
* freetype (optional, used for `text`)
|
2016-03-15 19:12:39 -07:00
|
|
|
|
|
|
|
|
2019-04-07 17:53:16 -07:00
|
|
|
Install with pip:
|
2016-03-29 13:56:36 -07:00
|
|
|
```bash
|
2021-03-26 10:33:00 -07:00
|
|
|
pip3 install 'masque[visualization,oasis,dxf,svg,text]'
|
2019-04-07 17:53:16 -07:00
|
|
|
```
|
|
|
|
|
|
|
|
Alternatively, install from git
|
|
|
|
```bash
|
|
|
|
pip3 install git+https://mpxd.net/code/jan/masque.git@release
|
2016-03-29 13:56:36 -07:00
|
|
|
```
|
2017-04-19 18:56:14 -07:00
|
|
|
|
2020-09-10 20:18:34 -07:00
|
|
|
## Translation
|
|
|
|
- `Pattern`: OASIS or GDS "Cell", DXF "Block"
|
2023-01-21 21:22:11 -08:00
|
|
|
- `Ref`: GDS "AREF/SREF", OASIS "Placement"
|
2020-09-10 20:18:34 -07:00
|
|
|
- `Shape`: OASIS or GDS "Geometry element", DXF "LWPolyline" or "Polyline"
|
2023-01-21 21:22:11 -08:00
|
|
|
- `repetition`: OASIS "repetition". GDS "AREF" is a `Ref` combined with a `Grid` repetition.
|
2020-09-10 20:18:34 -07:00
|
|
|
- `Label`: OASIS, GDS, DXF "Text".
|
|
|
|
- `annotation`: OASIS or GDS "property"
|
|
|
|
|
|
|
|
|
2017-04-19 18:56:14 -07:00
|
|
|
## TODO
|
2019-04-07 17:58:11 -07:00
|
|
|
|
2020-09-10 20:18:34 -07:00
|
|
|
* Better interface for polygon operations (e.g. with `pyclipper`)
|
|
|
|
- de-embedding
|
|
|
|
- boolean ops
|
2020-08-15 18:23:16 -07:00
|
|
|
* Deal with shape repetitions for dxf, svg
|
2023-01-26 23:51:13 -08:00
|
|
|
* Maybe lib.create(bname) -> (name, pat)
|
|
|
|
* Schematic:
|
|
|
|
- Simple cell:
|
|
|
|
+ Assumes no internal hierarchy, or only other simple hierarchy
|
|
|
|
+ Return pattern, refer to it by a well-known name
|
|
|
|
- Parametrized cell:
|
|
|
|
+ Take in `lib`
|
|
|
|
+ lib.create(), and return a string
|
|
|
|
+ Can have pcell hierarchy inside
|