(1) Overview


Linear mode and Geiger mode Avalanche Photodiodes (APDs) are the detectors of choice for the detection of very weak optical signals. Since Geiger mode APDs are capable of detecting signals at the single photon level, they are also called Single Photon Avalanche Diodes (SPADs). APDs are used in numerous applications, e.g. high-speed optical fibre communication systems and quantum key distribution systems.

To obtain new designs for APDs and SPADs, an experimental, iterative process is usually undertaken, adding significant lead times and expense. This is largely because simulation models for APDs & SPADs generally fall into one of the two following categories: (i) highly accurate but too computationally demanding for device simulation purposes, and (ii) computationally undemanding but too simplistic to produce sufficiently accurate results. Full Band Monte Carlo (FBMC) models [1] and Analytical Band Monte Carlo (ABMC) models [2] are in the former category, whereas Random Path Length (RPL) [3] models and recurrence equations [4] are in the latter.

Simple Monte Carlo (SMC) modelling [5, 6, 7, 8] offers an attractive combination of being sufficiently accurate while having reasonable computational demand. Compared to FBMC and ABMC models, SMC modelling uses a simplified band structure, reducing computational requirements. Crucially, it retains sufficient details of the semiconductor band structure to accurately simulate APD and SPAD properties of practical significance. Using SMC modelling will allow APD researchers to explore a wider range of designs inexpensively, before committing to expensive and time-consuming wafer growth and device fabrication.

The Simple Monte Carlo Simulator was developed to simulate silicon SPADs in [9] using a parameter set for Silicon from [5]. The simulator has been expanded to accept parameter sets for Gallium Arsenide [6] and Indium Gallium Phosphide [7]. A parameter set for Indium Aluminium Arsenide is available from [8] but is excluded here, because the parameter set contains an additional mechanism not used by the other materials.

The aim of this software is to provide an accessible tool for the Simple Monte Carlo modelling of APDs and SPADs made from Silicon, Gallium Arsenide and Indium Gallium Phosphide. The software can be used for other materials in the future should new parameter sets become available.

Implementation and architecture

The Simple Monte Carlo Simulator has been written in C++ and uses five classes. Three modes exist within the Simulator: the diode properties mode, the drift velocity mode, and the impact ionization coefficient mode.

The three modes within the Simple Monte Carlo Simulator are implemented as separate functions. The class dependencies of each function are illustrated schematically in Figure 1 and we provide brief explanations for each of the classes here.

Figure 1 

Schematic of how the different modes and classes interact in the Simple Monte Carlo Simulator.

The SMC Class contains the SMC parameter sets for all the materials that have been implemented. The Tools Class calculates and stores the interaction probabilities and scattering rates needed for the simulations. The Device Class uses the supplied device doping profile to calculate the electric field profile of the device for any given voltage. The Carrier Class stores all the tracked variables for each electron and hole in the simulations. It is also used to update the carriers’ momentum on a random direction scatter. The Histogram Class calculates the mean and standard deviation of a data set and uses these to perform a 1D Gaussian fitting to the data set. The histogram class has a separate GitHub repository, https://github.com/jdpetticrew/Gaussian-Histogram-Fitter.

The diode properties mode of the Simple Monte Carlo Simulator is described in detail here. Its process flow is shown schematically in Figure 2. The probability arrays contain scattering rates for the carriers (electrons or holes), calculated using equations 2.1, 2.2 and 2.3 from [8]. The carriers’ scattering mechanisms included in the simulator are phonon absorption, phonon emission, impact ionization and self-scattering. When a carrier encounters phonon absorption or phonon emission scattering, the carrier’s energy, E, is increased or decreased by the material’s phonon energy. Carriers with energy larger than the impact ionization threshold energy, Eth, may initiate impact ionization scattering events. In an impact ionization event, an additional electron and hole are generated at the position of the initiating carrier. The excess energy (E – Eth) is split evenly between the three carriers. Self-scattering does not alter the carrier’s position or energy.

Figure 2 

Flow Chat of Simple Monte Carlo Process.

After the probability arrays are calculated, the electric field profile of the APD/SPAD design is calculated using a 1D Poisson field solver. Simulation for a given set of conditions consists of a large number of trials. To begin each trial, a carrier (electron or hole) is injected into the device’s active region, i.e. where electric field exists. The choice of either an electron or a hole is determined by the user’s specification of pure electron or pure hole injection.

For each carrier, the total scattering rate combined with a random number determines the carrier’s drift time and hence the drift distance. Ramo’s theorem [10] is then used to calculate the electrical current due to the carrier’s movement. Knowledge of the drift distance allows the simulator to update the carrier’s new position and new energy (having gained or lost energy by travelling along or against the electric field direction). Then, the scattering probabilities and another random number determines the scattering mechanism for this carrier’s scattering event. A pseudorandom number generator (Mersenne twister) is used to produce the random numbers used in each simulation.

The cycle of determining the new drift time, drift distance and scattering mechanism continues until the carrier has exited the device’s active region. Any additional electrons and holes produced by impact ionization are treated in the same way as the injected carrier. For linear mode APD simulations, the trial ends when all carriers have exited the active region. For Geiger mode APD simulations, the trial is terminated when the current reaches 0.1 mA or at the end of a user specified time limit. At the end of each trial, the avalanche current, whether avalanche breakdown was reached, and the time to breakdown (if applicable) is recorded.

As the simulator progresses from one trial to the other, important statistics are being collected. These include avalanche gain, probability of avalanche breakdown, and the time to breakdown. At the end of the simulation, the simulator outputs these statistics. In addition, the simulator calculates many commonly used device characteristics from the statistics.

For linear mode APDs, the relevant outputs are: the avalanche gain of each trial, mean avalanche gain, mean avalanche current, as well as excess noise factor. For Geiger mode APDs the relevant outputs are, the breakdown probability, a histogram of time to breakdown, as well as the mean time to breakdown.

Having presented the diode properties mode of the Simulator above, the other two modes (the drift velocity mode and the impact ionization coefficient mode) for producing material characteristics are described here. Both material characteristic modes use only two of the five classes from the diode properties mode. Their outputs, the drift velocity and impact ionization coefficients, form part of the validation process for the SMC parameter sets. Hence, these modes are useful for future efforts in obtaining new parameter sets.

In the drift velocity mode, the Simulator calculates the drift velocities for electrons and holes. This simulation involves tracking a single electron travelling in a constant electric field and determines the distance of travel for each drift event. A mean velocity value is obtained from a million drift events. The same simulation is repeated for holes.

In the impact ionization coefficient mode, the distances between successive impact ionization events for carriers travelling in a constant electric field are recorded. For both electrons and holes the mean distance travelled between impact ionization events is derived using 20,000 events. The electron and hole ionization coefficients are given by the inverse of the mean distance between impact ionization events.

Quality control

The results generated from the code have been compared to experimental results for Silicon [9]. The dataset from that paper is available for comparison [11]. Experimental results for Gallium Arsenide and Indium Gallium Phosphide are available for comparison from [6] and [7].

(2) Availability

Operating system


Programming language

C++ >= C++98

List of contributors

Zhou, Xinxin: Developed a previous version of the software. Was at Department of Electronic and Electrical Engineering, University of Sheffield, Sheffield, S3 7HQ, UK. Now at Oclaro, Caswell, Towchester, Northamptonshire, NN12 8EQ, UK.

Tan, Chee Hing: Developed an earlier version of the software. Department of Electronic and Electrical Engineering, University of Sheffield, Sheffield, S3 7HQ, UK.

Software location


Name: ORDA-The University of Sheffield Research Data Catalogue and Repository

Persistent identifier:https://doi.org/10.15131/shef.data.5683939

Licence: Apache 2.0

Publisher: Jonathan Petticrew

Version published: v1.0.0

Date published: 02/01/18

Code repository

Name: GitHub


Licence: Apache 2.0

Date published: 21/12/17



(3) Reuse potential

This software will be of use to electronic engineers in the semiconductor device field looking to improve devices based on Si, InGaP or GaAs. The software also offers a good platform for the development of new parameter sets for additional semiconductor materials where modes of the software can generate data which can be compared against the material parameters, drift velocity, and impact ionization coefficients.

We hope to develop additional parameter sets in the future for other semiconductor materials used in APDs and SPADs.

Bug support is available through the GitHub issues page (https://github.com/jdpetticrew/Simple-Monte-Carlo-Simulator/issues).