Extracting Concentrations from Arbitrary Shaped Well Regions


It is often the case when simulating charged coupled devices (CCDs) or image sensors, that a designer wishes to know how many electrons or holes are contained within an arbitrary shaped n or p-well region for a given bias point or after exposure to light for a certain time and intensity.

The arbitrary shaped well will be defined by a metallurgic junction following all the process steps, usually simulated with the process simulator, ATHENA.

This article is for designers who feel that making the usual presumption that the well is rectangular in shape, will result in too great an error in the answer. If the well approximates to a rectangular shape, the usual area “Probe” statement will suffice. However, if the well has a very arbitrary shape, in order to obtain accurate numbers, we have to perform a numerical integration over the whole well shape. This numerical integration can be calculated using a series of extract statements inside a “LOOP” statement in the “Deckbuild” run time environment.


Example Structure

A simple example will be used to demonstrate the numerical integration technique. An N+ well region was created by implanting arsenic with a dose of 3e15/cm3 (70keV) and boron with a dose of 5e13/cm3 (15keV) into a mask with a 1um opening. The boron implant was required to define the metallurgic junction and give us another species to extract during the numerical integration. The implants were then co-diffused for 20 minutes at 950 Centigrade to create a more arbitrary shape. The simple N+ well structure is shown in Figure 1.

Figure 1. The N+ Well used to demonstrate the numerical integration technique.

Since we know how much arsenic and boron was implanted to create the well region, we should be able to predict the answer we get for the total number of arsenic and boron atoms in the well from the numerical integration technique to a reasonable level of accuracy. Any impurity can be extracted in the same way, such as electron an hole concentrations for example.

For a device of 1um width (1um in the “Z” direction), the total number of calculated arsenic atoms should be slightly less than:

The implanted dose (atoms/cm2) x surface area (cm2).

Since the mask opening and device width are both 1um, the simulated area is 1e-4 x 1e-4 = 1e-8cm2 (1um = 1e-4cm). So the total number of arsenic atoms should be slightly less than

3e15/cm2 x 1e-8cm2 = 3e7 arsenic atoms.

Similarly, the total number of boron atoms should be slightly less than

5e13/cm2 x 1e-8cm2 = 500,000 boron atoms.

The reason we are expecting slightly less atoms than we implanted is because some of the implanted atoms will have diffused outside the boundary defined by the metallurgic junction (since the dopant boundary is not atomically abrupt). Since boron diffuses faster than arsenic, we would also expect a higher percentage of boron atoms to lie outside the junction.



The method of numerical integration using the extract statements will slice the structure into horizontal bars, and integrate the species of interest between the first occurrence of the metallurgic junction in each slice and the second occurrence of the metallurgic junction in that same slice. The algorithm will then sum up the total number of the extracted species in all of the slices until it no longer finds any metallurgic junctions in a slice.

This basic method of integrating the number of a species in several slices bounded by metallurgic junctions can be modified for most shapes, even if this particular algorithm is not suitable for your particular shape.

Numerical integration in this case is simply the calculation of the area under the curve of the graph of concentration versus distance between the bounding metallurgic junctions for each slice. The complete integration is then the sum of the concentrations for all the slices.


Worked Example

The full extraction routine for the particular structure illustrated in figure 1 above is given below this paragraph. The purpose of each line will then be described. The user can then modify the various variables and details of the routine to suit their particular structure and species they wish to extract. In this example, two species are integrated within the well region, namely the total number of boron atoms and the total number of arsenic atoms, since these quantities are known.

Here is the complete extraction routine for both species:-

##### Numerical Integration Extraction Routine #####

set width=1set depth=0.2
set steps=40
set increment=$depth/$steps
set yval=$increment/2.0
set totalarsenic=0.0
set totalboron=0.0

LOOP steps=$steps

extract name=”j1” xj material=”Silicon”
mat.occno=1 y.val=$yval junc.occno=1
extract name=”j2” xj material=”Silicon”
mat.occno=1 y.val=$yval junc.occno=2

extract name=”arsenic” area from
material=”Silicon” mat.occno=1
y.val=$yval) where x.min=$j1 and
x.max=$j2 outfile=”extract.dat”

set totalarsenic=($totalarsenic+

extract name=”boron” area from
material=”Silicon” mat.occno=1
y.val=$yval) where x.min=$j1 and
x.max=$j2 outfile=”extract.dat”

set totalboron=($totalboron+

set yval=($yval+$increment) L.END

# Print Final results
echo arsenic = $totalarsenic
echo boron = $totalboron


The first seven lines use set statements that are used to assign values to variable names that will be used to define an approximate region of the device that will contain the well and to initialize variable values for the calculations.

Since we are calculating the number of species in the well volume, we have to specify the well dimension in the Z direction (into the screen). The “set width=1” line specifies the well is 1um into the Z direction. For different well dimensions, type in the appropriate length in microns here.

The “set depth=0.2” line will be used to specify that we want to integrate up to 0.2um into the depth of the silicon. As can be seen from figure 1, a depth of 0.2um is sufficient to accommodate the entire depth of the metallurgic boundary of the well. Once again, use an appropriate number for the depth of the well for your particular device. For the best accuracy and fastest calculation speed, use a depth that is only just deeper than the metallurgic junction of the well, so that the integration routine does not waste time looking for well regions that do not exist.

The “set steps=40” line will be used to instruct our integration routine to divide the integration region between Y=0 and Y=0.2um into 40 slices for the calculation. An optimum number of slices for your particular device would probably be something which creates slices which have approximately the same depth per slice as the smallest mesh spacing in the Y direction.
These three variables described above (width, depth and steps) can be modified by the user to suit their particular structure and level of required accuracy.

The next set of four variables, “increment”, “yval”, “totalarsenic” and “totalboron” initialize variables used in the calculations. The “increment”calculates how far to step down into the structure for each slice of the integration. Obviously, the increment value is the total depth of the integration, divided by the number of slices (steps).

The “yval” is the starting Y location for the first integration which is set to be in the middle of the first slice. “totalarsenic” and “totalboron” are the variables that store the accumulating totals for the number of boron and arsenic atoms that we are trying to calculate.

A “LOOP” statement as the name implies, will loop the section of the input file, bounded by the “L.END” statement, “step” times. In this example, we have requested 40 steps as this is the number of slices we are going to integrate.

The first two extract statements locate the first and second instances of the metallurgic junction in the horizontal direction for each slice. The third extract statement then integrates the number of arsenic atoms in the slice bounded by the metallurgic junctions by calculating the area under the concentration versus distance curve.

The following “set” statement then adds the total calculated arsenic atoms from each extracted slice, to the “totalarsenic” variable, so that after the final slice is integrated, it represents the total number of arsenic atoms in the whole well region. The total arsenic concentration will be in units of atoms/cm3, whereas all the distances over which we are integrating are in units of microns, so we have to multiply by 1e-4 in all three directions to get the correct number of atoms in the well region.

Each part of the loop described to integrate the number of arsenic atoms, is then repeated to calculate the number of boron atoms within the same loop. The “yval” variable at the end of the loop, is then increased by the “increment” value to define the depth of the next slice to be integrated. After the final slice is integrated, the “echo” statements simply asks DeckBuild to print out the values that it has calculated on completion.

In this particular example, the result of the integration was 2.96e7 arsenic atoms and 480,000 boron atoms, conforming to the expected result discussed at the begining of this article. The “missing” arsenic and boron atoms have diffused outside of the metallurgic boundary.



In conclusion, we have shown how to integrate the total number of any species in an arbitrary shaped well bounded by a metallurgic junction. This methodology can be adapted for other shaped wells and species of interest, such as calculating the number of electrons in an image sensor well at any time during the image capture process.

Download PDF version of this article