pyoptics.litho.lens¶
Aberrations of a ray traced projection lens in lithographic imaging: from the lens design to CD, placement and best focus across the slit, and the sensitivities of these to Zernike coefficients.
Lens to projector¶
lens_aberrations() traces a pyoptics.raytrace.System at an image field point and fits Fringe Zernikes to its OPD on the pupil coordinates of Projector, (P_x, P_y) = n’ (d - d_chief)_xy/NA with the image space ray directions d, so that the coefficients can be handed to Projector directly (projector_from_system()). Besides the wavefront it returns two properties of the chief ray that the pupil does not describe:
distortion: the chief ray image point minus the paraxial image point m*object (m: paraxial magnification); in a scanner the uniform part of it (magnification and shift) is corrected by the scanner, the rest is an overlay error,
telecentricity: the chief ray direction; an image in a defocused plane moves sideways by focus*tan(theta_chief).
The Zernike tilts Z_2, Z_3 are relative to the chief ray and shift the image on top of the distortion.
Scanner slit¶
A scanner exposes through a slit (e.g. 26 x 8 mm on the wafer, the long side along x) while mask and wafer move along y; every point of the wafer sees all scan positions y of the slit. through_slit() therefore computes the image at a slit position x as the average of the images at the scan positions y, each one with its own aberrations and placement. Aberrations that vary along y blur the image (image fading); along x they give the CD and placement variation across the slit.
Sensitivities¶
zernike_sensitivity() gives the first and second derivatives of CD, placement and best focus with respect to each Zernike coefficient (central differences), the classic way to compare imaging conditions and to set lens tolerances. predict() turns them into the changes expected for a set of coefficients (linear and diagonal quadratic terms, cross terms neglected).
Polarization¶
lens_jones_pupil() traces the polarization through the lens: Fresnel transmission of every surface, optional thin film coatings (quarter_wave_coating()) and birefringent elements such as CaF2 with its intrinsic birefringence (materials.CubicCrystal), with raytrace.System.trace_polarization(). The result is fitted with pyoptics.litho.jones_pupil and handed to Projector(jones_pupil=…).
Telecentricity¶
lens_telecentricity() compares the geometric telecentricity (the chief ray) with the energetic one: the centroid of the image side ray slopes weighted with the etendue of the rays, the illumination fill and the transmission from the polarization ray trace (coatings, absorption). lens_apodization() hands the real pupil (off axis not centred on the chief ray) and its transmission to Projector(apodization=…), so that the simulation shows the resulting pattern shift through focus.
Two ray traced projection lenses come with pyoptics.raytrace: Caldwell’s dry KrF design (caldwell_krf_lens(), NA 0.56, 4x) and a Zeiss water immersion ArF design from a patent (zeiss_arfi_lens(), NA 1.35, 8x, 11 aspheres, not telecentric in the image space).
Units: the system (e.g. caldwell_krf_lens()) is in mm, the lithography simulation in its own length unit; length_unit is that unit in mm (1e-6 for nm, the default). Field points are image (wafer) coordinates in the units of the system.
References¶
C. Mack, “Fundamental Principles of Optical Lithography: The Science of Microfabrication”, Wiley (2007).
A. Erdmann, “Optical and EUV Lithography: A Modeling Perspective”, SPIE Press (2021).
H.-J. Rostalski, A. Dodoc, A. Epple and H. Beierl, “Refractive projection objective for immersion lithography”, US 7,187,503 B2 (2007).
Classes
Aberrations of a lens at one image field point. |
|
Jones pupil of a ray traced lens. |
|
Image side telecentricity of a lens at one field point. |
|
Printed feature for the threshold model. |
|
Zernike sensitivities. |
|
Feature across the slit. |
Functions
CD, placement and best focus of the first feature of a simulation. |
|
Image space NA of the lens on axis. |
|
Fringe Zernikes, distortion and telecentricity of a lens at an image field point. |
|
Scalar pupil of a ray traced lens for Projector(apodization=...): the real pupil and its power transmission at an image field point. |
|
Polarization ray trace of a lens: its Jones pupil at an image field point. |
|
Geometric and energetic image side telecentricity of a lens. |
|
The placement errors that a scanner corrects: translation, magnification and rotation fitted to the placements of a set of field points, |
|
Changes of CD, placement and best focus predicted from sensitivities. |
|
Projector with the NA, wavelength, reduction ratio and Zernikes of a ray traced lens at an image field point. |
|
Single layer antireflection coating. |
|
CD, placement and best focus across the slit of a scanner. |
|
Derivatives of CD, placement and best focus with respect to Zernike coefficients. |
- class pyoptics.litho.lens.LensAberrations(field, zernikes, rms_residual, distortion, telecentricity, placement, NA)¶
Bases:
tupleAberrations of a lens at one image field point.
- Attributes:
- field(x, y) image field point (units of the system)
- zernikesdict {j: c_j} of Fringe Zernike coefficients in waves (j >= 2)
on the pupil of Projector
- rms_residualRMS of the OPD left by the fit, in waves
- distortion(dx, dy) chief ray image point minus the paraxial image point,
in the length unit of the simulation
- telecentricity(t_x, t_y) x and y components of the chief ray direction
(radians for small angles)
- placement(dx, dy) placement of a small feature, distortion plus the
shift by the Zernike tilts, -(c_2, c_3)*lambda/NA (first order: the centroid of the PSF), in the length unit of the simulation
- NAthe NA that normalizes the pupil coordinates
- NA¶
Alias for field number 6
- distortion¶
Alias for field number 3
- field¶
Alias for field number 0
- placement¶
Alias for field number 5
- rms_residual¶
Alias for field number 2
- telecentricity¶
Alias for field number 4
- zernikes¶
Alias for field number 1
- class pyoptics.litho.lens.Response(cd, placement, best_focus, foci, cd_focus, placement_focus, nils_focus)¶
Bases:
tuplePrinted feature for the threshold model.
- Attributes:
- cd, placementCD and placement (center of the printed feature minus its
nominal center) at focus 0
- best_focusfocus of the largest NILS at the printed edges (vertex of a
parabola through the five foci around the maximum); unlike the vertex of a Bossung curve it is well defined at the isofocal dose too
- foci, cd_focus, placement_focus, nils_focusCD, placement and NILS
through focus
- best_focus¶
Alias for field number 2
- cd¶
Alias for field number 0
- cd_focus¶
Alias for field number 4
- foci¶
Alias for field number 3
- nils_focus¶
Alias for field number 6
- placement¶
Alias for field number 1
- placement_focus¶
Alias for field number 5
- class pyoptics.litho.lens.Sensitivity(terms, delta, nominal, linear, quadratic)¶
Bases:
tupleZernike sensitivities.
- Attributes:
- termsarray of Fringe indices j
- deltastep in waves of the central differences
- nominalResponse without the steps
- linear, quadraticdicts with the keys “cd”, “placement”, “best_focus” of
arrays (one entry per term): first derivatives d/dc_j (length unit per wave) and second derivatives d^2/dc_j^2 (length unit per wave^2)
- delta¶
Alias for field number 1
- linear¶
Alias for field number 3
- nominal¶
Alias for field number 2
- quadratic¶
Alias for field number 4
- terms¶
Alias for field number 0
- class pyoptics.litho.lens.SlitResult(x, y, cd, placement, best_focus, aberrations)¶
Bases:
tupleFeature across the slit.
- Attributes:
- x, yslit positions and scan positions (units of the system)
- cd, placement, best_focusarrays over x, from the scan averaged images
- aberrationsLensAberrations, list (over x) of lists (over y)
- aberrations¶
Alias for field number 5
- best_focus¶
Alias for field number 4
- cd¶
Alias for field number 2
- placement¶
Alias for field number 3
- x¶
Alias for field number 0
- y¶
Alias for field number 1
- pyoptics.litho.lens.lens_NA(system, N=48)[source]¶
Image space NA of the lens on axis.
- Parameters:
- systemraytrace.System
- Nint, optional
Rays across the pupil.
- Returns:
- NAfloat
The largest
n'*|d_xy|of the traced rays.
- pyoptics.litho.lens.lens_aberrations(system, field=(0.0, 0.0), n_terms=36, N=48, NA=None, length_unit=1e-06)[source]¶
Fringe Zernikes, distortion and telecentricity of a lens at an image field point.
- Parameters:
- systempyoptics.raytrace.System
Finite conjugate projection lens.
- fieldpair, optional
Image (wafer) field point (x, y) in the units of the system.
- n_termsint, optional
Fit Z_1 … Z_n_terms (Z_1 is dropped from the result).
- Nint, optional
Rays across the pupil.
- NAnumber, optional
Normalization of the pupil coordinates; rays outside it are not used, so a smaller NA than the lens’s describes the stopped down lens. Default: lens_NA(system).
- length_unitnumber, optional
Length unit of the simulation in units of the system (1e-6: nm for a system in mm).
- Returns:
- LensAberrations
- pyoptics.litho.lens.linear_correction(aberrations)[source]¶
The placement errors that a scanner corrects: translation, magnification and rotation fitted to the placements of a set of field points,
dx = a_0 + a_1*x + a_2*y, dy = b_0 + b_1*y + b_2*x
(magnification along x is set in the lens, along y by the scan speed; a_2 and b_2 are the rotations of mask and wafer).
- Parameters:
- aberrationssequence of LensAberrations
Field points spread over the slit (at least three not on a line).
- Returns:
- correctioncallable
correction(x, y) -> (dx, dy), the fitted placement in the length unit of the simulation; pass it to through_slit().
- pyoptics.litho.lens.projector_from_system(system, field=(0.0, 0.0), n_terms=36, N=48, NA=None, length_unit=1e-06, **kwargs)[source]¶
Projector with the NA, wavelength, reduction ratio and Zernikes of a ray traced lens at an image field point.
- Parameters:
- system, field, n_terms, N, NA, length_unit
As for lens_aberrations().
- kwargs
Further arguments of Projector (n, vectorial, apodization, …).
- Returns:
- Projector
- class pyoptics.litho.lens.LensJonesPupil(P_x, P_y, J, transmission, field, NA)¶
Bases:
tupleJones pupil of a ray traced lens.
- Attributes:
- P_x, P_y(N,) arrays
Normalized pupil coordinates of the rays (as in lens_aberrations()).
- J(N, 2, 2) array
Jones matrices from the object space to the image space, both in the aplanatic bases of the ray directions (the identity for an ideal lens).
- transmissionnumber
Mean intensity transmission of the chief ray (that J is normalized to if normalize was True).
- field, NAimage field point and the NA of the pupil coordinates
- J¶
Alias for field number 2
- NA¶
Alias for field number 5
- P_x¶
Alias for field number 0
- P_y¶
Alias for field number 1
- field¶
Alias for field number 4
- transmission¶
Alias for field number 3
- pyoptics.litho.lens.quarter_wave_coating(n_glass, wavelength, n_coating=None)[source]¶
Single layer antireflection coating.
A quarter wave layer at normal incidence of index n_coating (default sqrt(n_glass), zero reflection; MgF2 has about 1.40 at 248 nm and 1.43 at 193 nm).
- Parameters:
- n_glassnumber
Refractive index of the lens.
- wavelengthnumber
Wavelength in the unit of the thickness.
- n_coatingnumber, optional
Refractive index of the layer.
- Returns:
- list of (n, thickness)
The layers from the air side, for lens_jones_pupil(coating=…).
- pyoptics.litho.lens.lens_jones_pupil(system, field=(0.0, 0.0), N=32, NA=None, coating=None, birefringent=None, normalize=True)[source]¶
Polarization ray trace of a lens: its Jones pupil at an image field point.
Every refraction contributes the Fresnel transmission of its s and p components (with an optional thin film coating), as a 3 x 3 polarization ray tracing matrix (Chipman); the product over the surfaces, between the aplanatic bases of the object and image space ray directions (see propagators.aplanatic_rotation), is the Jones matrix. The bases use the absolute ray directions, which for a lens telecentric on both sides differ little from those relative to the chief ray that the pupil coordinates use. An uncoated surface is a weak diattenuator (s is reflected more, so p is transmitted better) with radial orientation; coatings add retardance. The geometric optical path is not included (that is the wavefront of lens_aberrations()), and neither is the birefringence of the glass (stress, or the intrinsic birefringence of CaF2) unless given as birefringent media (CubicCrystal).
- Parameters:
- systempyoptics.raytrace.System
Finite conjugate projection lens without mirrors.
- fieldpair, optional
Image field point (units of the system).
- Nint, optional
Rays across the pupil.
- NAnumber, optional
Normalization of the pupil coordinates; default lens_NA(system).
- coatinglist of (n, thickness) or callable, optional
Thin film layers on every glass-air surface, from the air side (e.g. quarter_wave_coating()), thickness in the units of the system; or a function coating(i, n_glass) of the surface index returning such a list (or None). None: the coatings of the surfaces themselves (Surface(coating=…), uncoated without).
- birefringentdict {i: medium}, optional
Birefringent media behind the surfaces i (index into system.surfaces), e.g. {38: CubicCrystal(-3.4e-7, “111”)}, any materials.Material; the refractive index is still that of the system.
- normalizebool, optional
Divide by the square root of the transmission of the chief ray and by its scalar phase (see jones_pupil.decompose()), so that the Jones pupil leaves the overall dose unchanged.
- Returns:
- LensJonesPupil
Fit it with jones_pupil.PauliZernikePupil.fit() or PhysicalJonesPupil.fit() to use it in Projector(jones_pupil=…).
- class pyoptics.litho.lens.LensTelecentricity(field, chief, geometric, energetic, transmission, P_x, P_y, T, weight, slope)¶
Bases:
tupleImage side telecentricity of a lens at one field point.
All directions are slopes (dx/dz, dy/dz) in the image space: a feature imaged into a plane defocused by z moves sideways by z times the slope.
- Attributes:
- field(x, y) image field point (units of the system)
- chiefslope of the chief ray (through the centre of the stop), the
geometric telecentricity of the lens design
- geometriccentroid of the slopes of the illuminated cone weighted with
the etendue of the rays (no losses): the chief ray plus the asymmetry of the cone (pupil aberrations, vignetting)
- energeticcentroid weighted with the transmitted power (Fresnel losses,
coatings, absorption), the direction of the energy that arrives at the image point
- transmissionmean transmission of the illuminated cone
- P_x, P_y(N,) arrays, pupil coordinates of the rays relative to the
chief ray (as in lens_jones_pupil())
- T(N,) array, power transmission of the rays
- weight(N,) array, etendue times the illumination fill of the rays
(sums to one)
- slope(N, 2) array, image space slopes of the rays
- P_x¶
Alias for field number 5
- P_y¶
Alias for field number 6
- T¶
Alias for field number 7
- chief¶
Alias for field number 1
- energetic¶
Alias for field number 3
- field¶
Alias for field number 0
- geometric¶
Alias for field number 2
- slope¶
Alias for field number 9
- transmission¶
Alias for field number 4
- weight¶
Alias for field number 8
- pyoptics.litho.lens.lens_telecentricity(system, field=(0.0, 0.0), N=48, fill=None, coating=None, birefringent=None, E_in=None, NA=None, delta=0.0001)[source]¶
Geometric and energetic image side telecentricity of a lens.
The geometric telecentricity is the direction of the chief ray. The energetic telecentricity is the centroid of the directions of the light that arrives at the image point: the rays from the object point, each weighted with its etendue (the object side solid angle of its tube, from the Jacobian of the object side direction sines over the pupil grid), with the illumination fill and with its power transmission from the polarization ray trace (Fresnel losses, coatings, absorption in absorbing media). An apodization that is not symmetric about the chief ray, as off axis, where the rays meet the surfaces asymmetrically, moves the centroid away from the chief ray. The centroid of the slopes is what moves the image through focus: the intensity centroid of a field moves along z with the power weighted mean of k_xy/k_z of its plane waves.
- Parameters:
- systempyoptics.raytrace.System
Finite conjugate projection lens without mirrors.
- fieldpair, optional
Image field point (units of the system).
- Nint, optional
Rays across the pupil.
- fillnumber or callable, optional
Illumination of the object side cone, on the pupil coordinates (u_x, u_y) = n (d - d_chief)_xy/NA_object of the object space ray directions d (NA_object = NA*|magnification|): a number sigma fills the disk
|u| <= sigmauniformly, a function fill(u_x, u_y) gives the relative radiance (the edge of the disk is smoothed over one step of the pupil grid). None (default): the whole cone that the stop passes, as for the light diffracted by a small feature or for incoherent illumination.- coating, birefringentoptional
As for lens_jones_pupil(); an absorbing glass enters as birefringent={i: materials.Isotropic(n, k)} for the media behind the surfaces i.
- E_inJones vector (2,), optional
Polarization in object space (on the aplanatic basis); None: unpolarized.
- NAnumber, optional
Normalization of the pupil coordinates; default lens_NA(system).
- deltanumber, optional
Step of the pupil coordinates for the Jacobian.
- Returns:
- LensTelecentricity
- pyoptics.litho.lens.lens_apodization(system, field=(0.0, 0.0), N=48, coating=None, birefringent=None, E_in=None, NA=None, transmission=True, n_rim=180)[source]¶
Scalar pupil of a ray traced lens for Projector(apodization=…): the real pupil and its power transmission at an image field point.
The pupil of Projector is a disk about the chief ray. Off axis the image of the stop need not be centred on the chief ray (pupil coma of the lens): the cone that the stop passes is shifted against it, and the light near its rim is clipped asymmetrically. The returned amplitude is zero outside the real pupil (the convex hull of the traced rays and of rim rays through the edge of the stop) and inside it the square root of the power transmission of the rays relative to that of the chief ray (Fresnel losses, coatings, absorption), interpolated linearly. Give the Projector an NA somewhat larger than the lens’s (and use the same NA here and in lens_aberrations()) so that its disk contains the shifted pupil; sigma of the illumination is relative to the NA of the Projector.
- Parameters:
- systempyoptics.raytrace.System
Finite conjugate projection lens without mirrors.
- fieldpair, optional
Image field point (units of the system).
- Nint, optional
Rays across the pupil.
- coating, birefringent, E_in
As for lens_telecentricity().
- NAnumber, optional
Normalization of the pupil coordinates (that of the Projector); default lens_NA(system).
- transmissionbool, optional
Include the transmission; False gives the real pupil only (1 inside).
- n_rimint, optional
Rays through the edge of the stop.
- Returns:
- apodizationcallable
apodization(P_x, P_y), the amplitude transmission on the pupil coordinates of the Projector. Do not combine it with a normalized Jones pupil of the same lens, which contains the transmission too.
- pyoptics.litho.lens.feature_response(sim, threshold=0.3, dose=1.0, foci=None, N=401, direction=None)[source]¶
CD, placement and best focus of the first feature of a simulation.
The feature is searched within a quarter period around its nominal center plus the shift by the projector’s Zernike tilt, so that large placement errors are followed; where no feature is found (e.g. behind a contrast reversal far out of focus) CD and placement are nan.
- Parameters:
- simLithoSimulation
- threshold, dosenumbers, optional
Threshold model.
- fociarray, optional
Foci for best focus and the through focus values (should contain 0). Default: 11 foci over +-lambda/(2 NA^2).
- Nint, optional
Samples of the cut over one pitch (the cut covers two pitches).
- direction{“x”, “y”}, optional
Cut direction, see LithoSimulation.cut_coordinates().
- Returns:
- Response
- pyoptics.litho.lens.zernike_sensitivity(sim, terms=range(2, 26), delta=0.02, threshold=0.3, dose=1.0, foci=None, N=401, direction=None)[source]¶
Derivatives of CD, placement and best focus with respect to Zernike coefficients.
Each coefficient is changed by +-delta (waves) on top of the projector’s own Zernikes; first and second derivatives follow from central differences.
- Parameters:
- simLithoSimulation
- termssequence of int, optional
Fringe indices.
- deltanumber, optional
Step in waves; small enough for the quadratic terms to describe the response (default 0.02, i.e. 20 milliwaves).
- threshold, dose, foci, N, direction
As for feature_response().
- Returns:
- Sensitivity
- pyoptics.litho.lens.predict(sensitivity, zernikes)[source]¶
Changes of CD, placement and best focus predicted from sensitivities.
sum_j L_j c_j + Q_j c_j**2/2with the first and second derivatives L_j, Q_j; mixed terms (e.g. defocus and spherical aberration together) are neglected.- Parameters:
- sensitivitySensitivity
- zernikesdict
Coefficients {j: c_j} in waves; terms without sensitivities are ignored.
- Returns:
- dict
Predicted changes for “cd”, “placement” and “best_focus”.
- pyoptics.litho.lens.through_slit(sim, system, x, y=(0.0,), threshold=0.3, dose=1.0, foci=None, correction=None, n_terms=36, N_pupil=32, N=401, direction=None, length_unit=1e-06)[source]¶
CD, placement and best focus across the slit of a scanner.
At each slit position x, the cuts through focus for all scan positions y (with the Zernikes, distortion and telecentricity of the lens at (x, y)) are averaged, which is the image a scanned wafer point receives. The placement is relative to the nominal position of the feature at the paraxial image point (minus the correction).
- Parameters:
- simLithoSimulation
Mask, illumination and projector; the Zernikes of the projector are replaced by those of the lens, its NA normalizes the pupil.
- systempyoptics.raytrace.System
The lens, at the wavelength of the projector.
- xarray
Slit positions (image side, units of the system).
- yarray, optional
Scan positions, e.g. np.linspace(-4, 4, 5) for an 8 mm slit; one position (default 0) gives the static image.
- threshold, dose, foci, N, direction
As for feature_response().
- correctioncallable, optional
correction(x, y) -> (dx, dy): placement removed by the scanner, e.g. from linear_correction().
- n_terms, N_pupil, length_unit
As for lens_aberrations() (n_terms, N, length_unit).
- Returns:
- SlitResult