Gds2Para
GDSII File Parsing, IC Layout Analysis, and Parameter Extraction
Install / Use
/learn @purdue-onchip/Gds2ParaREADME
gds2Para
Complete Integrated Circuit (IC) Layout Analysis from GDSII Design File to Parasitics Extraction
This layout analyzer is written in C++ as part of a wider API for the electromagnetic design validation of VLSI IC, package, and board designs. The code design follows a philosophy intended to have the most extensibility and highest level of automation possible for increasingly complex integrated circuits, packages, and boards. Design information from the Graphic Database Stream II (GDSII) file is parsed and stored alongside simulation input information.
A nonstandard mode of operation allows an interconnect modeling platform (IMP) file to be translated to a GDSII file design. Another nonstandard control mode translates a GDSII file design into a Planar Straight Line Graph which may be used as input to Delaunay triangulation software.
Once a design is loaded, the information can be written to another GDSII file or analyzed with a full-wave simulation to extract parasitics between user-specified ports. Parasitics are preferably reported through a Xyce subcircuit file (SPICE derivative from Sandia National Laboratories), though a Standard Parasitic Exchange Format (SPEF) file may be output alternatively. Please carefully read this README.md file for an overview, dependencies, and usage instructions.
Overview
Simulate (-s) Mode Top-level Flowchart
<img src="https://github.com/purdue-onchip/gdsii-interface/blob/master/images/gds2Para_mode-s.png" width=600 alt="Simulate (-s) Mode Flowchart">Packages
| Packages / Library | Languages | Headers | Description | | -------------------------------- | ---------------- | -------------------------------------- | ----------------------------------------------------------------- | | C Standard Library | C | CCtype, Cerrno, Cmath, Cstdio, Cstdlib, Cstring, Ctime | Utilities for testing character categorization, C language error numbers, basic arithmetic operations, C language input/output, manipulating the char* data type, and dates and timers | | C++ Standard Library: Algorithms | C++ | Algorithm | Useful algorithms including sorting | | C++ Standard Library: Containers | C++ | Queue, Set, Stack, Unordered_map, Unordered_set, Vector | Utilities for handling queues and priority queues, sets and multisets, LIFO stacks, associative data types, dictionary collection types, and collection data types from existing C++ data types | | C++ Standard Library: I/O | C++ | FStream, IOStream | Plain text file input/output and command line input/output | | C++ Standard Library: Numerics | C++ | Complex | Complex floating point number arithmetic | | C++ Standard Library: Strings | C++ | String | Utilities for easy string handling | | C++ Standard Library: Utilities | C++ | Utility | General C++ utilities such as pairs and swapping | | Eigen | C++ | Sparse | API for sparse matrix storage | | HYPRE | Fortran/C/C++ | HYPRE, HYPRE_krylov, HYPRE_parcsr_ls | LLNL library of preconditioners and multigrid solvers | | Limbo | C/C++ | GdsReader, GdsWriter | API for GDSII file parsing and writing | | MakeUtils | Makefile | n/a | Makefile utilities that help find build dependencies | | Math Kernel Library | Fortran/C/C++ | MKL, Mkl_spblas | Intel libraries for parallel mathematics include BLAS, LAPACK, and Pardiso | | Open Message Passing Interface | Fortran/C | n/a | Open MPI compilation and runtime tools for parallel computing | | Parser-SPEF | C++ | parser-spef | API for SPEF file processing | | Preprocessor | C/C++ | n/a | Inclusion, definitions, and macros such as assertion with message |
Note that modern compilers that support the following language standards are needed to make the package dependencies: GNU Fortran (superset of F95) for Fortran, C99 for C language, and C++17 for C++.
Custom Classes
| Structure / Class Name | Header | Description | | ------------------------ | ----------------------- | ------------------------------------------------------------------| | AsciiDataBase | limboint | Full GDSII design being read/constructed with file name, metadata, units, data of all geometric cells, and conductor information | | GeoCell | limboint | GDSII geometric cell with name, metadata, and all GDSII elements | | boundary | limboint | GDSII element for a polygonal boundary | | path | limboint | GDSII element for a path | | node | limboint | GDSII element for an electrical node | | box | limboint | GDSII element for a box outline | | textbox | limboint | GDSII element for a text box | | sref | limboint | GDSII element for a structure reference | | aref | limboint | GDSII element for an array reference | | strans | limboint | Linear transformation applied to some GDSII elements | | pslg | limboint | Lists of vertices, segment connections, and regions for a PSLG | | SolverDataBase | solnoutclass | Design name, output files, information other than layout, and all results of the simulation necessary for parameter extraction | | SimSettings | solnoutclass | Simulation settings including units, design limits, and frequency sweep parameters | | Layer | solnoutclass | Layer information from physical stack-up including name, GDSII layer number, z-coordinates, and material properties | | Waveforms | solnoutclass | Needed information for time-domain plots (unimplemented) | | Parasitics | solnoutclass | Collection of ports and sparse matrices for admittance parameters | | Port | solnoutclass | Port information including name, reference direction, supply and return coordinates, and containing GDSII layer | | Aperture | solnoutclass | Standard template details for a Gerber photoplotter aperture | | fdtdMesh | fdtd | Master class for all discretization, conductor, and solver data | | fdtdPatch | fdtd | Information of a single discretized patch | | fdtdBound | fdtd | Information of a single conductor or dielectric boundary region | | fdtdCdt | fdtd | Solver information common to all conductors | | fdtdOneCondct | fdtd | Solver information regarding discretization and excitation of a single conductor region | | fdtdPort | fdtd | Solver representation of a port |
Developers
All software is under active development without any notices regarding the timing of nature of updates. Contributions are welcome through forking and pull requests. Please direct all questions, bug reports, and issues relating to this repository to the primary maintainer:
- Dan Jiao, Synopsys Professor of ECE, Elmore Family School of ECE, Purdue University
Developers:
- Michael Hayashi, Former Graduate Research Assistant, Elmore Family School of ECE, Purdue University
- Dr. Li Xue, Former Graduate Research Assistant, Elmore Family School of ECE, Purdue University
- Dr. Shuzhan Sun, Former Graduate Research Assistant, Elmore Family School of ECE, Purdue University
Related Skills
ui-ux-pro-max-skill
59.1kAn AI SKILL that provide design intelligence for building professional UI/UX multiple platforms
ui-ux-pro-max-skill
59.1kAn AI SKILL that provide design intelligence for building professional UI/UX multiple platforms
onlook
25.0kThe Cursor for Designers • An Open-Source AI-First Design tool • Visually build, style, and edit your React App with AI
Figma-Context-MCP
14.2kMCP server to provide Figma layout information to AI coding agents like Cursor
