This example has been updated. Find the latest version at CMOS Image Sensor - Angular Response.
There are many design challenges for micron-scale CMOS microlens arrays that focus light through the color filters, metallic interconnects and multiple oxide layers contained in the image sensor. This example shows how to setup a 3D CMOS image sensor simulation and how to calculate the optical efficiency of each pixel for a plane wave at a given angle of incidence.
A screenshot of CMOS_3D.fsp is shown above. From top to bottom, the main components of the image sensor are the microlens array, red/green/blue color filters, light shields and wires, and the active Si substrate layer. Each pixel is 2um wide, making the simulation region 4x4um wide. The simulation region uses periodic boundary conditions in the X and Y directions and PML absorbing boundary conditions in the Z direction. For non-normal incidence, the periodic BCs must be replaced with Bloch BCs. A plane wave source is incident on the top of the structure. The source wavelength is 550nm (green). We expect high transmission through the green pixels and low transmission through the red and blue pixels.
Due to the complex nature of image sensor structures, it is worth spending some time parameterizing your design. This will reduce the possibility of errors, and make it possible to easily perform parameter sweeps and optimization of the design. Consider all the structures that make up the image sensor.
The model: The model should be used to set any parameters that affect multiple objects in the simulation. For example, the pixel size affects not only the physical image sensor structure but also the size of the FDTD simulation region and the positions of a number of monitors. Other parameters can be brought into the model for convenience. For example, the choice of using Bloch rather than periodic boundaries depends on whether we intend to make the source use non-normal angles of incidence. By adding this parameter to the model, we can easily make it change all relevant FDTD simulation boundaries to Bloch or Periodic, as desired.
The image sensor: The image sensor is an extremely complex physical object composed of hundreds or thousands of primitives. In this example, we have made the image sensor a Construction group, which means that the children cannot be individually modified. Each time the parameters of the image sensor are modified, all children are deleted and the entire image sensor is rebuilt based on script commands, which can include importing information from GDS files or AFM data from text files. While this is difficult to setup initially, it avoids any possibility of error. In this example, the parameters of the image sensor are
•ax, ay : the dimensions of the sub-pixel, 2 microns initially
•microlens shift, shift angle: the offset of the microlens and the shift angle which defines the direction of the offset
•rendering detail: a number between 0 and 1 that defines the amount of detail used when drawing the structures such as microlenses in the four view windows, often called rendering. Setting this value to 0 will make the rendering very fast and will make the GUI more usable. This setting has no impact on simulation results.
•use_AFM_data: a value of 1 will make the script import AFM data for the microlens surface, while a value of 0 uses the a polynomial and conic surface for the microlenses. For this AFM data import to work, the file CMOS_microlens_AFM.ldf must be saved to the same directory as your fsp file. In this example, we use the loaddata command to load this data from the ldf file, but it could also be read from a text file using the importsurface command. Please note that using AFM data will make your fsp files much larger, and you will likely want to keep a low setting for the "rendering detail".
The FDTD simulation region: The properties of the simulation can be set here. Remember that any properties that are set by the model should not be modified as they will be overwritten immediately.
The mesh override region: This makes a larger x and y mesh in the Silicon region. Please see note below.
The source: This is a plane wave source, the incident angle and polarization can be controlled.
Monitors: There are a number of monitors to look at different field profile cross sections. Note that the positions of these monitors are set by the model, and will change if the pixel dimension is modified in the model.
The pixel_transmission analysis group: This analysis group will be used to calculate the fraction of source power that goes into the Si, as well as the fraction under the red, blue and green pixels. This analysis can optionally make figure plots of the filter used to represent the different depletion regions, as well as the Poynting vector at the surface of the Si.
Whenever a parameter is added to the model, analysis groups or structure groups, you must write a script that indicates how that parameter should be used. For example, the parameters added to the model are shown below on the left, and the setup script is shown on the right. We can see how the parameters "pixel size", "microlens shift" and "shift angle" are used to set the properties of the image sensor structure group. The image sensor structure group will then run its own script to rebuild the image sensor based on these new settings.
Note: Conformal meshing
This structure uses Perfect Electrical Conductor (PEC) to represent all the metallic vias and light shields. The mesh refinement setting has been changed to "Conformal variant 1" to apply the conformal mesh technology to the PEC interfaces as well as the other interfaces. If you use real metal materials, such as Aluminum, you should likely return to using the default "Conformal" meshing.
This simulation requires approximately 250MB of RAM, and will run around 1 minute on a modern desktop computer. When the simulation is complete, run the analysis script named CMOS_analysis.lsf to calculate the optical efficiency and to generate the following figures.
The script will plot the electric field intensity through the middle of the Green - Blue pixels, and the Red - Green pixels. The figures show high transmission through the green pixels and low transmission through Blue and Red.
|E|^2 field distribution at 550nm in vertical cross-section through the middle of the pixels.
Time domain movie of |E|^2 from the simulation at the same position as the above figures.
Next, the script plots the normal component of the Poynting vector (Pz) at the surface of the Si active layer, which was recorded by the power monitor named transmission. Once again, this figure clearly shows high power transmission through the two green pixels, and low transmission through Blue and Red.
To calculate the power absorbed in each pixel, (optical efficiency), we integrate Pz over the depletion region of the pixel. The easiest way to integrate Pz over an arbitrary region is to create an binary integration filter that defines the area to integrate. The following figure shows all four depletion regions (the sum of all the binary integration filters). Each depletion region is a 1x1um square depletion region with rounded corners.
Optical efficiency is defined as the fraction of the power incident in the pixel that is absorbed in the depletion region of the pixel: OE = absorbed power / injected power
By integrating Pz over the entire surface of the Si layer and normalizing by the injected power, we find that 38% of the power is transmitted through the device to the Si layer.
Power into Si layer: 0.38
16.5% of the power was absorbed in each green depletion region, for a total green efficiency of about 33%. The efficiency of the red and blue pixels is about 0.3%.
Power through red pixel : 0.003
Power through 2 green pixels: 0.33
Power through blue pixel : 0.003
The example simulations provided on this page, and other pages in the CMOS image sensor section typically use a mesh accuracy setting of 1 or 2. Using the conformal mesh technology, a mesh accuracy of 2 is sufficient for many problems which justifies the small additional time to create the conformal mesh. However, it is recommended that you test your convergence by running simulations at higher accuracies at least once to be sure that you do not see any significant changes to your results. To increase the simulation accuracy, consider the following modifications:
•Increase the mesh accuracy slider (from 1-2) to 3-4
•Reduce the PML reflectivity to 1e-5 instead of 1e-4. This will increase the number of PML layers.
•Increase the simulation time (from 250 fs) to 500 fs
The file CMOS_3D.fsp already contains a parameter sweep that can be used to test the mesh accuracy. Running this sweep on a 4 processor, 8 core, AMD workstation, we could run the simulation in 15 seconds, with a memory requirement of 60 MB. By a mesh accuracy of 8, the simulation time was 2 hours and 36 minutes while the memory requirements increased to 7GB. The relative increase in time and memory increase is shown below, normalized to the result at a mesh accuracy of 1. In the figures below, we can see the change in optical efficiency to the Si surface and the optical efficiency in the green pixel regions as a function of mesh accuracy. For both results, the difference in optical efficiency between a mesh accuracy of 2 and mesh accuracy of 8 is less than 1%. Some of the noise in the green pixel results is simply due to the integration filter being applied on a coarse mesh.
We strongly recommend running the majority of your simulations with lower accuracy settings to save time. It is far easier to setup, test or optimize a simulation that takes a few seconds to minutes, compared to a simulation that takes several hours. Obviously re-running your final results at a higher accuracy is a good idea, but it is not efficient for the initial simulations.
After running the convergence sweep, the following lines of script can be used to create the convergence plot of the optical efficiency.
mesh = getsweepdata("convergence","mesh accuracy");
Pall = getsweepdata("convergence","Pall");
Pg = getsweepdata("convergence","Pg");
plot(mesh,Pall,Pg,"mesh accuracy","Optical Efficiency (Green)","Convergence test");
legend("Si surface","Green pixels");