Cross-talk can be introduced both optically and electrically. Due to the wave nature of the optical input, imperfect color filtering, and alignment mismatch in the optical stack, some light will bleed into neighbouring sub-pixels, generating charge in the silicon. Additionally, charge generated from light absorbed in the target sub-pixel may also diffuse into neighbouring sub-pixels and be collected by an adjacent well.
Simulation setup
In the optical simulation, the approach will follow that of the absorbed power (see the 2D example): the FDTD region must extend into the silicon substrate. Bloch boundary conditions will be used to account for the periodicity in at angled incidence in the optical simulation, such that the simulation volume will encompass one RGBG pixel (four sub-pixels).
Generation rate analysis group
Three generation rate analysis objects must be added to the FDTD simulation to record and analyze the absorbed power in the green and blue sub-pixels. You will notice that there are three generation rate objects: The one under the blue channel only, the one under the green channel only, and the one covering both. For the CHARGE simulation we really only need the results of the generation object covering both region under the blue and green channels, but we keep the other two analysis groups to make use of the Jsc output result for each channel for later calculations. The generation rate analysis objects will
- average the generation rate in the y-direction,
- repeat the generation rate in the x-direction (as the optical simulation is periodic), and
- save a generation rate file which can be imported into the CHARGE simulation.
The Analysis tab of the object is shown below:
Injection angle sweep
The sweep task in cis_QE.fsp file is set up to sweep over a 7 points of angles ( 0 degrees to 35 degrees) and for each angle, the source polarization angle is set to both 0 and 90 degrees for a total of 14 simulations. The names of the generation rate output .mat files will be different for each case. Note that since we want incoherent light results, we add up the results from the two polarization angle simulations. The analysis groups have been modified to return the generation rate multiplied by a factor of 0.5, so that when we add the two polarization results, we will have the average generation rate for an incoherent source.
Run and results
Run the sweep task in the FDTD simulation. This may take a while depending on your resources. Once the sweep is done, 14 files should be generated in a sweep folder. The names of the generation rate files corresponding to both channels start with gb and these are the ones that we will load into the CHARGE simulation, in a group named "generation".
You will also notice that the sweep in FDTD returns the same results discussed in the angular response example to generate the optical efficiency.
Generation rate and optical efficiency
In the FDTD project file, use the following lines of script to plot the optical efficiency using the method explained in the example mentioned above. The script also saves the generated current under the blue channel for further calculations in CHARGE.
npts=7; theta=linspace(-35,35,(2*npts-1)); Pb=pinch(getsweepdata("sweep","Pb")); Pg=pinch(getsweepdata("sweep","Pg")); Igen=pinch(getsweepdata("sweep","Igen")); P_blue_s=Pb(1:7); P_blue_p=Pb(8:14); P_blue=(P_blue_s+P_blue_p)/2; P_blue_unfold=[flip(P_blue,1); P_blue(2:npts)]*cos(theta*pi/180); P_green_s=Pg(1:7);
P_green_p=Pg(8:14); P_green=(P_green_s+P_green_p)/2; P_green_unfold=[flip(P_green,1); P_green(2:npts)]*cos(theta*pi/180); plot(theta,P_blue_unfold,P_green_unfold, "angle (degrees)","Optical efficiency"); legend("blue", "green"); write("P_blue.txt",num2str(P_blue_unfold)); write("Igen.txt",num2str(Igen));
Optical efficiency calculated using the optical simulation in FDTD ( blue line). The fraction absorbed in the green (inactive) pixel will indicate the spectral cross-talk in the absorbed light (green line). The script also exports the generated current as well as the power under the blue pixel for further post processing.
In the CHARGE simulation, a generation group has been added to the object tree which contains import generation objects for all of the angles and the two polarizations for each angle. Using the script file cis_QE.lsf , simulations are set up for each angle, and the corresponding generation objects will be enabled. The import generation object will now extend to cover four sub-pixels (GBGB), representing the average generation rate in that cross-section. Note that two polarizations are avaialbe for each angle, and the result is the sum of the two, since the import generation object is additive. The CHARGE simulation is performed at DC steady-state, where the pixels are biased in their reset state (TX gate ON, RST gate ON). This will maintain the pixel state at conditions that would be expected at the onset of illumination (or, for constantly illuminated sensors, at the initial point of charge integration). For a weakly illuminated system, this will provide an accurate estimate of the electrical cross-talk while minimizing the simulation complexity. The user parameter "vdd" is defined in the model, which can be used to set the DC bias of all contacts simultaneously. For example,
setnamed("::model","vdd",3.3);
will apply a 3.3V bias to all gates and FD contacts in the pixel.
The solver region is expanded to encompass four sub-pixels: the blue (far left) and green (far right) of the neighbouring pixels, and the green (inactive) and blue (active) sub-pixels of interest. The CHARGE solver region has open (non-periodic) boundary conditions, which enforce charge conservation by stipulating that no charge will be transported across a boundary in the semiconductor. Therefore, the boundaries of the simulation domain should be extended to include the adjacent cells, such that the charge generated between sub-pixels will correctly be collected at the appropriate contact. The simulation domain must include the contacts for each sub-pixel to correctly set the applied bias on the system.
If you run just one simulation, you can always check the external optical generation rate results from the CHARGE object.
Internal/external quantum efficiencies and cross-talk
Run cis_QE.lsf. For each simulation, the set up is meshed and there is also an "initialize" step. The initialize will be used to generate good initial guess for the solver, and this will require the bulk of the simulation time. Once the simulations are all complete, the rest of the script reports the current collected from each color channel and determine the cross-talk fraction. The value is reported as a fraction of the total current from both green and blue channels. Note that the current is less than the ideal value calculated with FDTD: the ratio of the two is the internal quantum efficiency (IQE). The results are plotted as a function of the source angle.
Related publications
- F. Hirigoyen, A. Crocherie, J. M. Vaillant, and Y. Cazaux, “FDTD-based optical simulations methodology for CMOS image sensors pixels architecture and process optimization” Proc. SPIE 6816, 681609 (2008)
- Wang, Xinyang, "Noise in Sub-Micron CMOS Image Sensors", Ph.D. Thesis, Delft University of Technology