Passive Device Artwork Generator, Modeling & Optimization
Conure is a versatile toolkit for designing, simulating, modeling, and optimizing RFCMOS integrated inductors. It seamlessly integrates artwork generation, EM simulation, surrogate modeling with Artificial Neural Networks (ANN), and multi-objective optimization using NSGA-II. Currently, it supports the Cadence EMX simulator, with plans to add OpenEMS.
- Generate inductor layouts from JSON templates.
- Customizable via stacking, line widths, spacing, and dummy fills.
- Create, stack, and fill vias across layers with precise control.
- Automatically generate guard rings with substrate contacts and dummy fills (checkered pattern).
- Train and evaluate neural networks to predict inductance (L) and quality factor (Q).
- Hyperparameter tuning for optimal performance.
- Optimize inductors for target performance using the NSGA-II algorithm.
- Visualize Pareto fronts for trade-off analysis.
- Run EM simulations with Cadence EMX.
- Configurable via JSON.
Conure includes an interactive UiX (User Interaction eXperience) tool combining a Flask backend and a React (Vite) frontend for streamlined artwork description editing and live previews.
./start.sh
Launchesstart_uix.sh
in the background as a daemon, capturing output inuix.log
../start_uix.sh
- Loads environment variables from
.env
(if present). - Defaults: Backend port 5000 (
VITE_BACKEND_PORT
), Frontend port 5173 (FRONTEND_PORT
). - Starts the Flask backend (
uix/backend
) and the React (Vite) frontend (uix/frontend
). - Writes PIDs to
uix.lock
in the project root. - Displays running ports and PIDs.
- Loads environment variables from
./stop.sh
Stops UiX by runningstop_uix.sh
(logging tostop_uix.log
). Ensurestop_uix.sh
is present and executable.
- Logs:
uix.log
— Captures both backend and frontend startup output.stop_uix.log
— Captures UiX shutdown output.
- Lockfile:
uix.lock
— Stores process names and PIDs. The start script detects existing processes to prevent multiple instances.
- Clone the repository:
$ git clone https://github.com/<your-org>/conure.git $ cd conure
- Create a Python virtual environment and install dependencies:
$ ./setup_venv.sh $ source .venv/bin/activate
- Ensure Cadence EMX is installed and configured if you plan to run EM simulations.
Note: Replace OUTPUT_DIR
and SWEEP_OUTPUT
(in uppercase) with your own desired output directory paths when running the commands.
$ python artwork_generator.py \
--artwork artwork_library/Inductors/Coplanar/Inductor_Coplanar_5.json \
--output OUTPUT_DIR \
--name my_artwork \
--layout \
--svg
$ python simulator.py \
--gds OUTPUT_DIR/my_artwork.gds \
--config simulator/config.json \
--sim emx \
--artwork artwork_library/Inductors/Coplanar/Inductor_Coplanar_5.json \
--output OUTPUT_DIR \
--name my_artwork
$ python sweep.py \
--artwork artwork_library/Inductors/Coplanar/Inductor_Coplanar_5.json \
--sweep sweep.json \
--output SWEEP_OUTPUT \
--layout \
--simulate \
--config simulator/config.json \
--sim emx
Contributions are welcome! Please fork the repo, create a feature branch, and submit a pull request. For major changes, open an issue first to discuss your ideas.
- Fork the repository
- Create a branch:
git checkout -b feature/my-feature
- Commit your changes:
git commit -am 'Add new feature'
- Push to the branch:
git push origin feature/my-feature
- Open a Pull Request
- Habibur Rahman – University of Oslo, Norway
- Adrian Llop Recha – University of Oslo, Norway
- Stefano Fasciani – University of Oslo, Norway
- Pål Gunnar Hogganvik – University of Oslo, Norway
- Kristian Kjelgård – University of Oslo, Norway
- Dag Wisland – University of Oslo, Norway
If you use Conure in your research, please cite:
H. Rahman, A. L. Recha, S. Fasciani, P. G. Hogganvik, K. G. Kjelgård and D. T. Wisland, "Conure: Surrogate-based Artwork Generator for RFCMOS Integrated Inductors," in 2024 IEEE International Symposium on Circuits and Systems (ISCAS), Singapore, May 2024, pp. 1-5. doi: 10.1109/ISCAS58744.2024.10558598
This project is licensed under the MIT License. See LICENSE for details.