Unified Lithography Evaluation Framework
A modular Python toolkit bridging academic tensor-based optimization and industrial mask manufacturing. Standardized metrics, model-agnostic evaluation, and end-to-end OASIS workflow.
Computational Lithography Pipeline
Architecture Layers
API Façade
An object-oriented entry point — Mask, LitheEngine, Report — re-exported at the package root for fab- and EDA-shaped callers who think in masks and engines, not tensors and registries. Frozen-dataclass Mask with suffix-sniffing constructors (from_oasis / from_pt / from_npy / from_gds); LitheEngine.optimize and .evaluate wrap the existing functional API with a teardown lifecycle. The functional API is unchanged.
from openlithohub import Mask, LitheEngine, Report Data Layer
Unified dataset adapters for mask optimization (LithoBench .npy NeurIPS'23, LithoSim HuggingFace Parquet NeurIPS'25, GAN-OPC paired masks TCAD'20), hotspot detection (ICCAD'16 Problem C EUV), and real PDKs (ASAP7 standard cells, FreePDK45 + NanGate OCL, ORFS-routed RISC-V mock-alu with 2 µm / 5 µm tile cutting). All adapters yield consistent LithoSample records with nm-aware metadata.
from openlithohub.data import LithoBenchDataset, Asap7Dataset, FreePdk45Dataset, OrfsArtifactDataset Benchmark Layer
EPE, PV Band, shot count, stochastic robustness metrics. MRC/DRC compliance as hard-fail gating.
Models Layer
Decorator-based registry on a minimal LithographyModel interface. Ships with rule-based OPC, LevelSet-ILT (with optional Hopkins forward), and Neural-ILT (U-Net).
Workflow Layer
Tiling, contour extraction (manhattan & curvilinear), B-spline fitting, OASIS export.
CLI Layer
Seven Typer command groups: eval, optimize, leaderboard, simulate, synth, hackathon, export, with rich formatted output.
Evaluation Metrics
Edge Placement Error
Distance between predicted and target contour edges. Computed via Sobel-based edge extraction and nearest-point distance calculation.
Process Variation Band
Resist contour variation across dose/focus window. Measures robustness to manufacturing process fluctuations.
Shot Count
Mask write time proxy for MBMW and VSB writers. Counts rectangular shots needed to reproduce the mask pattern.
Stochastic Robustness
Monte Carlo photon noise simulation for EUV. Computes bridge/break probability via random photon sampling. A higher-fidelity Monte-Carlo failure path also runs against any registered simulator backend.
EUV 3D-Mask Shadow Proxy
First-order shadowing proxy for EUV reflective masks. Anisotropic kernel parameterised by absorber thickness and chief-ray azimuth flags layouts at risk of large 3D errors without paying for a Maxwell solver.
Simulator Hook API
Vendor-neutral BaseSimulator ABC. Hopkins reference adapter ships in-tree; Calibre nmOPC and Tachyon adapters are config-validated stubs ready for users with vendor toolchain access.
Synthetic Layout Generator
PDK-aware synthetic layouts (FreePDK45, ASAP7) — SRAM cells, contact arrays, randomly routed metal — that pass MRC by construction. CLI batch export plus a DiffusionLayoutGenerator stub for the upcoming generative path.
Real PDK Adapters
Industrial-grade layouts via three klayout-backed adapters: ASAP7 standard cells (BSD-3-Clause), FreePDK45 + NanGate Open Cell Library, and ORFS-routed RISC-V mock-alu cut into 2 µm / 5 µm AI-OPC inference tiles. Runs end-to-end through openlithohub eval run --dataset asap7|freepdk45|orfs.
Manufacturing Compliance
- verified MRC — MASK RULE CHECK
Minimum width and spacing rule check using morphological opening. Hard-fail gating ensures only compliant masks proceed.
- rule DRC — DESIGN RULE CHECK
Full design rule verification: minimum area, notch detection, width/spacing analysis. Catches geometry defects before tape-out.
- precision_manufacturing PROCESS NODE CONFIGS
DTCO-aware parameters for 3nm EUV, 5nm EUV, 7nm, and 45nm nodes. Auto-configures pixel size, wavelength, and MRC thresholds.
import torch from openlithohub.benchmark.metrics import compute_epe, compute_pvband from openlithohub.benchmark.compliance import check_mrc # Load predicted and target masks predicted = torch.load("predicted_mask.pt") target = torch.load("target_mask.pt") # Compute metrics epe = compute_epe(predicted, target, pixel_size_nm=1.0) pvb = compute_pvband(predicted, defocus_range_nm=20.0) mrc = check_mrc(predicted, min_width_nm=40.0) print(f"EPE: {epe['epe_mean_nm']:.2f} nm") print(f"PV Band: {pvb['pvband_mean_nm']:.2f} nm") print(f"MRC passed: {mrc.passed}")
End-to-End Pipeline
Dataset adapters normalize to LithoSample tensors.
LevelSet-ILT or Neural-ILT generates optimized mask.
Compute EPE, PV Band, MRC/DRC compliance.
Contour → B-spline → fab-ready .oas file.
From Tensor to Tape-Out, Without Friction
Helpers that close the gap between AI research workflows and real fab pipelines. Use them in a notebook, in CI, or alongside your sign-off deck.
Paper-Ready Visualization
openlithohub.vis.plot_contours emits IEEE / SPIE column-width figures with a colorblind-safe palette, vector PDF defaults, and Type-42 fonts. One call, no rcParams archaeology.
plot_contours(target, predicted, save_path="fig.pdf", style="ieee") Hermetic Dummy Layouts
generate_dummy_layout produces deterministic, DRC-clean test patterns with only NumPy and PyTorch. CI runs without dataset downloads; Colab runs without `[workflow]` extras.
mask = generate_dummy_layout(size=256, seed=0) EDA Bridge Templates
Export an OASIS file and we'll emit a minimal Calibre .svrf deck and Synopsys IC Validator runset alongside it — load straight into your fab toolchain for a sanity DRC.
emit_bridge_bundle("mask.oas", BridgeRules(min_width_nm=40, min_spacing_nm=40)) Three-Minute Colab Quickstart
Open notebooks/quickstart.ipynb in Colab and go from `pip install` to a paper-ready figure without any local setup.
!pip install 'openlithohub[jupyter]' Standard MRC Rule-Deck Schema (RFC 0003)
A single JSON / TOML format for MRC rules — min width, spacing, curvature radius, feature area, plus provenance. load_rule_deck() validates against the in-tree schema and adapts to the existing check_mrc / check_curvilinear_mrc functions.
deck = load_rule_deck("rules/freepdk45_metal1.json") Export to ONNX / TorchScript / TensorRT
The new openlithohub export CLI ships any registered model out as ONNX (dynamo path, with a TorchScript fallback for non-torch.export-able models like NeuralILT). TensorRT-ready out of the box.
openlithohub export --model neural-ilt --format onnx Process-Window-Aware ILT
LevelSetILTModel.predict(process_window=True) swaps nominal-only MSE for a 5-corner weighted loss across dose × defocus. The new workflow.process_window module ships ProcessWindowCorner, DEFAULT_PW_CORNERS, and pw_fidelity_loss — drop-in replacements for nominal MSE in any ILT loop. Defaults stay nominal: no API break.
model.predict(layout, process_window=True) SRAF Non-Printing Penalty
sraf_print_penalty(aerial, sraf_mask, print_threshold=0.30, margin=0.05) is a differentiable squared-ReLU loss that punishes SRAF-region aerial intensity above the print floor. Catches "SRAF accidentally printed on wafer" inside the gradient loop, complementing the post-hoc MRC compliance gate.
from openlithohub.benchmark.metrics import sraf_print_penalty Auto-Calibration with Adam
The new auto_calibration.ipynb notebook inverts a GaugeTable of measured CDs onto resist threshold + Gaussian σ in <30 s on CPU using torch.optim.Adam. No bespoke calibration code — same autograd graph the rest of OpenLithoHub already uses.
notebooks/auto_calibration.ipynb pre-fit MAE 1.999 px → ~0 px