From Semiconductor to TransistorLevel Modeling in Julia, including:
- Material properties analysis of electronical characteristics using Fermi-Dirac distribution, Boltzmann-Maxwell distribution, and Blakemore distribution (at this stage limited to Silicon)
- Numerical Simulations of MOS structures and MOS transistors in 1D and 2D powered by VoronoiFVM.jl
- Implementation of industry and research standard MOSFET models (Pah-Sah, Brews, BSIM 6, PSP 103, UICM and EKV), with different mobility models.
- Circuit Level Simulation including DC operating Point, Transient analysys ( Powered by ModelingToolkit.jl ), Ac Analysis ( Powered By ControlSystems.jl )
To get a local copy up and running follow these simple steps.
A Julia instalation with version 1.6 or higher
] add MOSLab
using MOSLab
using Plots
T = 300.0 # Temperature Kelvin
N_a = 5e18 # Bulk Doping in cm^-3
E_a = 0.044 # The ground state energy of the acceptor in eV
t_ox = 4e-7 # oxide thickness in cm
t_si = 2.5e-5 # Silicon thickness
Vgv = 1.0 # Gate Voltage
PB = SemiconductorData(T,BoltzmanDist(),PSilicon(N_a,E_a))
MOS = MOSStructure(Alluminium(),SiO2(),PB,t_ox,t_si)
sol = PoissonVoronoi(Vgv,MOS,201)
BandDiagram(sol)
plot!(legend=:topright)
savefig("BandDiagram.png")
PBFermi = SemiconductorData(T,FermiDist(),PSilicon(N_a))
MOSFermi = MOSStructure(Alluminium(),SiO2(),PBFermi,t_ox,t_si)
plot(-2.3:0.05:2.3,x-> ฯs(x,MOS),label="Boltzmann Distribution")
plot!(-2.3:0.05:2.3,x-> ฯs(x,MOSFermi),label="Fermi Distribution",legend=:topleft)
xlabel!("Vg [V]")
ppsi = ylabel!(L"\psi_s \ [V]")
savefig("psi_comp.png")
using MOSLab
using Plots
using LaTeXStrings
Vg = 0.1 # Gate Voltage
Vd = 1.0 # Dain Voltage
Nx = 101 # Number of grid points on the x direction
Ny = 101 # Number of grid points on the y direction
N_d = 6e16 # Dopants density at the drain and source side in cm ^-3
T = 300.0 # Temperature in Kelvin
Nb = 5.7e17 # Dopants ensity at the bulk in cm ^-3
l = .180e-4 # Channel length
h = 0.5e-4 # Silicon depth
t_ox = 4e-7 # Oxide thickens in cm
Ms = MOSFETInputDeck(N_d,Nb,T,l,h,h/2.0,l,t_ox,:NMOS) # Create the input deck for an NMOS transistor
Vs = ฯs_PSP(Vg,Ms.Gate) # Calculate the surface potential at the gate
G,psi,nn,pp = MOSFETSimulation(Ms,Vs,Vd,Nx,Ny;verbose=false,ฮพโ=0.01) # run 2D MOSFET simulation
gr()
X = unique(G[1,:])
Y = unique(G[2,:])
contour(X,Y,psi,fill=true)
surface(G[1,:],G[2,:],psi,fill=true)
xlabel!(L"x \ [\mu m]")
ylabel!(L"y \ [\mu m]")
plot!(zlabel = L"\psi \ [V]")
yvals = unique(G[2,:])
ySel = G[2,:] .== yvals[end-1]
sum(ySel)
minimum(psi[ySel])
plot(G[1,ySel],psi[ySel],label="\$ \\psi (x,$(yvals[end-1]) ) \$",legend=:bottomleft)
savefig("Psi_channel.png")
plot(G[1,ySel],nn[ySel],label="\$ E_C (x,$(yvals[end-1]) ) \$",legend=:topright)
savefig("nn_channel.png")
using MOSLab
using Plots
using LaTeXStrings
NpolyDoping = 5.5e17 # Gate Npoly doping concentration in cm^-3
N_a = 5.5e17 # Bulk doping concentration in cm^-3
E_a = 0.0# The ground state energy of the acceptor in eV
t_ox = 3.8e-7 # oxide thickness in cm
t_si = 1e-6
CList2 = reshape( range(colorant"blue", stop=colorant"red",length=7), 1, 7 );
MOSf(T) = MOSStructure(NPoly(NpolyDoping),SiO2(),SemiconductorData(T,BoltzmanDist(),PSilicon(N_a,E_a)),t_ox,t_si) ## Calculate Parameters of a MOS Structure the given parameters using Boltzman Distribution at temperature T
transistor_model(T) = BSIM6Model(MOSf(T),1.0e-4,1.0e-4)
Idf(Vg,Vd,T) = Id(Vg,Vd,0.0,transistor_model(T)) ## Calculate the Current using the ACM Model of a transistor having the parameters from MOSf(T) and W =1.0 um, L = 1.0 um, similar contructors are available for the other models
plot()
for Vgv in 0.2:0.2:1.8
plot!(0:0.05:1.8,x->1e6*Idf(Vgv,x,300.0),label="\$V_{GB} = $(Vgv) V\$") # plot Id, Vd characteristics for different VGB
end
PSPG = plot!(xlabel=L"V_{DS} \ [V]",ylabel=L"I_{DS} \ [\mu A]",legend=:topleft)
plot()
for (i,Tv) in enumerate(LinRange(200,500,5))
plot!(0:0.05:1.0,x->1e6*Idf(x,0.1,Tv),label="\$T = $(Tv) K\$",linecolor=CList2[i]) # plot Id, Vg characteristics for different Temperatures
end
PSPD = plot!(xlabel=L"V_{GS} \ [V]",ylabel=L"I_{DS} \ [\mu A]",legend=:topleft,yaxis=:log10)
plot(PSPG,PSPD) # plot both graphs side by side
savefig("TransistorCurves.png")
gmIdf(Vg,Vd,T) = gm(Vg,Vd,0.0,transistor_model(T))/Idf(Vg,Vd,T)
plot()
for (i,Tv) in enumerate(LinRange(200,500,5))
plot!(0:0.01:1.0,x->gmIdf(x,0.1,Tv),label="\$T = $(Tv) K\$",linecolor=CList2[i]) # plot Id, Vg characteristics for different Temperatures
end
PSPD = plot!(xlabel=L"V_{GS} \ [V]",ylabel=L"I_{DS} \ [\mu A]",legend=:topright)
savefig("gmId.png")
using Plots
using MOSLab
NpolyDoping = 5e17 # Gate Npoly doping concentration in cm^-3
N_a = 5e17 # Bulk doping concentration in cm^-3
E_a = 0.044 # The ground state energy of the acceptor in eV
t_ox = 4e-7 # oxide thickness in cm
t_si = 1e-6
MOSf(T) = MOSStructure(NPoly(NpolyDoping),SiO2(),SemiconductorData(T,BoltzmanDist(),PSilicon(N_a,E_a)),t_ox,t_si) ## Calculate Parameters of a MOS Structure the given parameters using Boltzman Distribution at temperature T
g = 1
d = 2
s = 0
M1 = CircuitComponent("M1",ACMModel(MOSf(300.0),1000.0e-4,1.0e-4))
netT = Netlist()
addComponent(netT,M1,Dict("g"=>1,"d"=>d,"s"=>s))
addComponent(netT,CircuitComponent("Vg",VoltageSource(0.3)),Dict("p"=>g,"n"=>s))
addComponent(netT,CircuitComponent("Vd",VoltageSource(1.0)),Dict("p"=>d,"n"=>s))
ckt = Circuit(netT)
res = dc_op(ckt)
for i in 2:length(netT.nodes) # exclude ground
println("$(netT.nodes[i].name): $(res[i-1])")
end
V_n1: 0.3
V_n2: 1.0
J_Vg: 0.0
J_Vd: -0.0005823007996463166
See the open issues for a list of proposed features (and known issues).
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE
for more information.
Joรฃo Roberto Raposo de Oliveira Martins - jrraposo1@gmail.com
Project Link: https://github.com/Rapos0/MOSLab.jl