In this simple example, we consider a dielectric defect placed on a PEC surface to illustrate the simulation methodology for optical inspection systems. A more realistic example of a defect in a semiconductor wafer with a periodic structure is discussed here.
Simulation setup
The base file demo_PEC.fsp includes all the objects required for the simulation, as shown in Fig.1 below. The metal surface is provided by the lower metal simulation boundary and the defect is a dielectric (n=1.5) rectangle with x span=y span=0.4um and height 0.2um. The source wavelength is 1um, so the defect is a subwavelength feature. Note that a mesh override region was used to cover the entire XY plane of the simulation to ensure the mesh is uniform there. As suggested in Optical Defect Metrology (S-Matrix), the DFT monitor used to collect the reflected fields is placed in between the source and the structure, inside an analysis group that extracts the grating order information.
Fig.1 Setup in base simulation file.
Multiple jobs must be created from the base file, where we simply change the injection angles of the source according to the supercell grating orders. The process to create and save the jobs is automated in the script run_simulation.lsf. The first step is finding the in-plane components of the unit vectors corresponding to the grating orders, ux0 and uy0; we use the following script lines:
select("FDTD"); Lx = get("x span"); Ly = get("y span"); select("source1"); f = get("center frequency"); k0 = 2*pi*f/c; kx0_center = 0; ky0_center = 0; n = [ ceil( -(k0+kx0_center)*Lx/(2*pi) ) : floor( (k0+kx0_center)*Lx/(2*pi) )]; m = [ ceil( -(k0+ky0_center)*Ly/(2*pi) ) : floor( (k0+ky0_center)*Ly/(2*pi) )]; ux0 = (n*2*pi/Lx + kx0_center)/k0; uy0 = (m*2*pi/Ly + ky0_center)/k0;
We can find the source's theta and phi angles from the ith and jth elements of ux0 and uy0 arrays using:
uz0 = sqrt( 1-ux0(i)^2-uy0(j)^2 ); uxy0 = sqrt( ux0(i)^2 + uy0(j)^2 ); theta = acos(uz0)*180/pi; phi = atan2(uy0(j),ux0(i))*180/pi;
Before running the script create a folder named “rundir” in your working directory; this is where the script will save the jobs. After all the simulation jobs have been completed, run the script build_S_matrix.lsf, which will collect the data from the saved files to construct the S matrix, as explained in Optical Defect Metrology (S-Matrix). The calculated S matrix, ux0, uy0 and the frequency are stored in the file metal_sim_S_matrix.ldf at the end of this script.
At the start of the two scripts run_simulation.lsf and build_S_matrix.lsf there are some settings that should be the same in both files: the maximum numerical aperture of the input beam (NA_max0) and the names of the base file and of the folder where jobs are saved. Source angles that are not within NA_max0 will not be included in the simulations; this can be useful when the maximum numerical aperture of the illumination system is known in advance.
Optical system simulation (post-processing)
Once the S-matrix has been found, the next step is to include the illumination and collection conditions to find the fields that generate the image of the structure. An example of this procedure is provided in the script calculate_standard_image.lsf, which reads the S-matrix data stored in metal_sim_S_matrix.ldf. The S-matrix can be calculated as described in the previous section or you can download the file metal_sim_S_matrix.ldf from the Associated files.
For the illumination conditions we assume that incident linearly-polarized plane waves within an incident numerical aperture NA_in are focused at a spot (x0_illumination, y0_illumination and z0_illumination) in the object plane, as explained in Optical Metrology – Methodology; the z position of the focus spot provides an additional defocusing D=z0_illumination. Note that the position of the focus is relative to the global position (0,0,0), which is used as the reference for the phase of the S-matrix (see Optical Defect Metrology (S-Matrix)). The polarization angle of the input waves, measured in radians with respect to the x axis, is controlled by the parameter input_polarization_angle. For the collection conditions, the numerical aperture range is set by NA_min and NA_max. All these parameters can be specified in the first part of the script.
The illumination optical transfer function in this case is simply:
$$ H_{\mathrm{in}}\left(\mathbf{k}_{i, j}^{\mathrm{in}}\right)=\left\{\begin{array}{c}{e^{i D \sqrt{k_{o}^{2}-\left(k_{i j}^{\mathrm{in}}\right)^{2}}}, \text { if } k_{i, j}^{\mathrm{in}} \leq k_{o} \mathrm{NA}_{\mathrm{in}}} \\ {0, \text { else }}\end{array}\right. $$
The script applies the illumination conditions and finds the reflected plane waves for all the output angles. This is done by summing all the elements of the S-matrix corresponding to the input angles within the numerical aperture NA_in, multiplied by an input factor that includes the polarization and focusing.
The complex amplitudes of the output s- and p-polarized fields are stored in the matrices Et and Ep. These are the fields that will propagate to the farfield, where they are collected to generate the image. For the collection conditions we also assume a simple optical transfer function that allows collection within a certain range of numerical apertures, between NA_min and NA_max:
$$ H_{\mathrm{out}}\left(\mathbf{k}_{n, m}^{\mathrm{out}}\right)=\left\{\begin{array}{c}{1, \text { if } k_{o} \mathrm{NA}_{\min } \leq k_{n, m}^{\mathrm{out}} \leq k_{o} \mathrm{NA}_{\max }} \\ {0, \text { else }}\end{array}\right. $$
This is applied through a simple filter that multiplies the field amplitudes
Ux = meshgridx(ux0,uy0); Uy = meshgridy(ux0,uy0); filter = (Ux^2 + Uy^2
Finally, to calculate the image we use the chirped z-transform, which combines the plane waves after the filter coherently. This is the same procedure used in the script microscopy_imaging.lsf in Simplified Microscopic Imaging, which corresponds to a standard imaging system. The image intensity plane profile is given by the absolute value squared of this coherent sum:
$$ I_{\mathrm{std}}=\left|\sum_{n, m} \mathbf{E}_{n, m}^{\mathrm{out}} e^{i \mathbf{k}_{n, m}^{\mathrm{out}} \cdot \mathbf{r}}\right|^{2} $$
Results
We can compare the images generated with two different illumination/collection conditions for input light focused at x0_illumination=y0_illumination=0 and with D=0; incoming light is polarized in the x direction so input_polarization_angle=0. In the simulation setup of demo_PEC.fsp, this means that light is focused 0.2um above the metal surface. First we consider a bright field setup where we illuminate and collect light within a numerical aperture of 0.9. As shown in Fig. 2a below, the image of the reflected light is dominated by a bright spot at x=y=0um, which corresponds to the specular reflection of the input beam; the scattering signal from the defect, localized at x=y=1um, is expected to be extremely weak in comparison, so it is not possible to detect the presence of the defect in this bright-field setup.
(a) Bright field: illumination with NA_in=0.9 and collection with NA_min=0, NA_max=0.9.
(b) Dark field: illumination with NA_in=0.7 and collection with NA_min=0.7, NA_max=0.9.
Fig.2 Simulated images generated by a standard imaging system for two illumination/collection conditions.
The alternative is to block the strong specular reflection when collecting the reflected light using a dark-field scheme. As shown in Fig. 2b above, by illuminating within a numerical aperture of 0.7 and collecting the scattered light between 0.7 and 0.9, we can see a clear signal coming from the defect. The difference in the scale of the image intensity confirms that the light scattered by the defect is orders of magnitude smaller than the specular reflection.
Related publications
- O. Golani, I. Dolev, J. Pond, and J. Niegemann, "Simulating semiconductor structures for next-generation optical inspection technologies", Optical Engineering 55 (2), 025102 (2016)
See also
Optical Metrology – Methodology