Hello DEVSIM community!
I’d like to ask a question regarding the construction of a barrier at a heterojunction between two layers, n+ and n, where the n+ layer is intended to act as a unipolar barrier. This is part of an nBn structure.
Right now, I’m facing issues with how to properly define this barrier. As far as I understand, the barrier should be located at the interface between these two regions. It seems to block current to some extent, but I’m encountering two main problems:
First, the barrier I’ve defined doesn’t block current as effectively as expected — the difference can be several orders of magnitude. Second, it exhibits strange behavior near zero volts. For example, at 0.1 V the current is one or two orders of magnitude higher than at 0.5 V.
def CreateBarierElectronModel(device, interface, bias):
if bias == "reverse":
eq = "(Electrons@r1 - Electrons@r0*exp(-ElectronCharge * (Uc-top_bias+bot_bias + 2.038) / kT))"
for name, equation in (
("BarrierElectrons", eq),
("BarrierElectrons2", "BarrierElectrons"),
("BarrierElectrons:Electrons@r0", "-exp(-ElectronCharge * (Uc-top_bias+bot_bias + 2.038)/ kT)"),
("BarrierElectrons:Electrons@r1", "1"),
("BarrierElectrons2:Electrons@r0", "BarrierElectrons:Electrons@r0"),
("BarrierElectrons2:Electrons@r1", "BarrierElectrons:Electrons@r1"),
):
interface_model(
device=device, interface=interface, name=name, equation=equation
)
else:
eq = "(Electrons@r0 - Electrons@r1*exp(-ElectronCharge * (-Uc+top_bias-bot_bias + 2.038) / kT))"
for name, equation in (
("BarrierElectrons", eq),
("BarrierElectrons2", "BarrierElectrons"),
("BarrierElectrons:Electrons@r0", "1"),
("BarrierElectrons:Electrons@r1", "-exp(-ElectronCharge * (-Uc+top_bias-bot_bias + 2.038) / kT)"),
("BarrierElectrons2:Electrons@r0", "BarrierElectrons:Electrons@r0"),
("BarrierElectrons2:Electrons@r1", "BarrierElectrons:Electrons@r1"),
):
interface_model(
device=device, interface=interface, name=name, equation=equation
)
return "BarrierElectrons"
The code above shows how I define the barrier between the two regions. The two different cases represent the situation when the polarity of the applied voltage is reversed — since the barrier should only block current in one direction.
The parameter Uc is the calculated barrier that can appear at the n±n junction, and it depends on doping levels:
Uc = kT/e * ln(Nd+ / Nd).
The value 2.038 corresponds to the conduction band offset between these two materials.
The reason I chose to define the barrier this way is because I still don’t fully understand how the interface equations work in DEVSIM. So I assumed that these values could be directly inserted into the continuity equations and the current density equations for these two regions.
def CreateInterface(device, interface, bias = "reverse"):
"""
Enforces potential, electron, and hole continuity across the interface
"""
CreateSiliconOxideInterface(device, interface)
if interface == "top_barrier_interface":
if bias == "reverse":
modelname = CreateBarierElectronModel(device=device, interface=interface, bias=bias)
interface_equation(
device=device,
interface=interface,
name="ElectronContinuityEquation",
interface_model=modelname,
type="fluxterm",
)
else:
ename = CreateContinuousInterfaceModel(device, interface, "Electrons")
interface_equation(
device=device,
interface=interface,
name="ElectronContinuityEquation",
interface_model=ename,
type="continuous",
)
elif interface == "barrier_absorber_interface":
if bias == "reverse":
ename = CreateContinuousInterfaceModel(device, interface, "Electrons")
interface_equation(
device=device,
interface=interface,
name="ElectronContinuityEquation",
interface_model=ename,
type="continuous",
)
else:
modelname = CreateBarierElectronModel(device=device, interface=interface, bias = bias)
interface_equation(
device=device,
interface=interface,
name="ElectronContinuityEquation",
interface_model=modelname,
type="fluxterm",
)
else:
ename = CreateContinuousInterfaceModel(device, interface, "Electrons")
interface_equation(
device=device,
interface=interface,
name="ElectronContinuityEquation",
interface_model=ename,
type="continuous",
)
hname = CreateContinuousInterfaceModel(device, interface, "Holes")
interface_equation(
device=device,
interface=interface,
name="HoleContinuityEquation",
interface_model=hname,
type="continuous",
)
This part of the code shows how I define the interface for the remaining regions.
The graph above shows how the electron and hole concentrations change when a voltage of 0.5 V is applied. The voltage is applied to the bottom contact, which is located at a position of 3.65 µm.
In the graph, you can see a linear change in hole and electron concentrations in the top contact layer. I overlooked this while modeling the barrier, and I’m not sure when it stopped generating the mesh in this region — even though I am explicitly creating it.