MOSFET - Metal-Oxide-Semiconductor FET Металл-Оксид-Полупроводник (МОС) транзистор является основным полупроводниковым прибором в наши дни. Микросхемы содержат десятки миллионов MOSFET транзисторов. Принцип работы MOSFET основан на управлении изменения толщины проводящего канала под действием приложенного поля:
MOSFET состоит из стока, истока и затвора который покрывает узкую приповерхностную полосу канала, по которому течет электрический ток. Затвор (металический) изолирован от канала слоем диэлектрика (оксида кремния SiO2)
поликристалический SiO2 и кристалический Si:
символы для обогащенные MOSFET:
символы для обедненые MOSFET: (хотя в общем-то обедненные PMOS практически не делают)
В зависимости от типа проводимости канала бывают MOSFET N- и P- типа.
MOSFET N-типа
MOSFET N-типа
MOSFET P-типа
MOSFET P-типа
MOSFET можно рассматривать как управляемый резистор. Через затвор протекает только очень малый ток утечки, затвор имеет очень высокое сопротивлении, поэтому MOSFET управляется напряжением.
Действует формула Ic = k (Vзи - Vп)^2, где Ic - ток стока k - коэфициент пропорциональности Vзи - напряжение затвор-исток Vп - пороговое напряжение открытия MOSFET В зависимости от степени легирования MOSFET бывают обогащенные и обедненные. Разница между ними в наличии пропускания некоторого набольшого тока при отсутствии напряжения на затворе.
У обогащенного FET при отсутствии напряжения на затворе может протекать некоторый ток. А у обедненного нет. Меняя степень легирования можно менять характеристики MOSFETа:
MOSFET: (транзистор управляемый полем): +-------------+ | затвор | -----------+ +-------------+ +----------- исток | | оксид | | сток -----------+----+-------------+----+----------- | полупроводник | +----------------------------+ | изолятор | +----------------------------+ | подложка | +----------------------------+ когда между затвором и подложкой разница потенциалов возникает электрическое поле и ток течет от истока к стоку, когда разницы потенциалов нет, то ток практически не течет (сопротивление около 10**6 Ом).
MOS-транзисторы (Metal Oxide Semiconductor) NMOS транзистор: Обозначение переключателя на NMOS транзисторе (когда к затвору приложено напряжение ток течет).
Имплементация NMOS транзистора:
PMOS транзистор: Обозначение переключателя на PMOS транзисторе (когда к затвору приложено напряжение ток не течет).
Имплементация PMOS транзистора:
ВАХ для N-MOSFET (0.25):
ВАХ для P-MOSFET (0.25):
Verilog VHDL позволяет моделировать NMOS и PMOS транзисторы на цифровом уровне (транзисторы рассматриваются как переключатели). Моделирование MOS транзисторов на Verilog HDL.
Таблица истинности для Verilog NMOS транзистора
nmos(out, in, control); --------------------- NMOS | control data | 0 1 x z -----+-------------- 0 | z 0 L L 1 | z 1 H H x | z x x x z | z z z z ---------------------
Таблица истинности для Verilog PMOS транзистора
pmos(out, in, control); --------------------- PMOS | control data | 0 1 x z -----+-------------- 0 | 0 z L L 1 | 1 z H H x | x z x x z | z z z z ---------------------
VHDL-AMS модель N-MOSFET: PACKAGE electricalSystem IS NATURE electrical IS real ACROSS real THROUGH; FUNCTION POW(X,Y: real) RETURN real; FUNCTION SIN(X : real) RETURN real; FUNCTION EXP(X : real) RETURN real; FUNCTION SQRT(X : real) RETURN real; END PACKAGE electricalSystem; use work.electricalsystem.all; entity nmos is generic(mos_type : real := 1.0; -- +1.0 for nmos , -1.0 for pmos T : real := 300.0; W : real := 1.0; L : real := 1.0; vto : real := 1.0; -- Zero-bais threshold voltage kp : real := 2.0e-5; -- transcondiuctanec parameter gamma : real := 0.0; -- body-effect parameter phi : real := 0.6; -- surface inversion potential lambda : real := 0.02; -- channel lenght modulation tox : real := 1.0e-7; -- thin oxide thickness nsub : real := 0.0; -- Substrate doping nss : real := 0.0; -- Surface STate density ld : real := 0.0; -- lateral diffusion; tpg : real := 1.0; -- Type of Gate material uo : real := 600.0; -- Surface mobility af : real := 1.0; -- flicker noise exponent kf : real := 0.0; -- fliccker noise coefficient iss : real := 1.0e-14; -- bulk junction saturation current js : real := 0.0; -- bulk junctioin saturatioin current/ sqr meter pb : real := 0.80; -- bulk junction potential cj : real := 0.0; -- Zero-bias bulk capacitance/ sqr meter mj : real := 0.5; -- bulk junctioin grading coefficient cjsw : real := 0.0; -- Zero bias perimeter capacitance / sqr meter mjsw : real := 0.33; -- Perimiter capacitance rading coefficient fc : real := 0.5; -- forward-bais depletion capacitance coeff cgbo : real := 2.0e-10; -- gate-bulk overlap cap / meter cgdo : real := 4.0e-11; -- gate-drain overlap cap / meter cgso : real := 4.0e-11; -- gate-source overlap cap / meter rd : real := 1.0; -- drain ohmic resistance rs : real := 1.0; -- source ohmic resistance rsh : real := 0.0); -- source and drain sheet resistance port (terminal g,s,d,b : electrical); end entity nmos; architecture behav of nmos is terminal d1, s1 : electrical; quantity vds across idsg through d1 to s1; quantity vdsr across idsr through d1 to d; quantity vgs across igs through g to s1; quantity vbs across ibs through b to s1; quantity vbd across ibd through b to d1; quantity vsr across isr through s1 to s; quantity iss, isd : real := 1.0e-12; quantity beta : real := 8.85e-05; -- gain quantity leff : real := 1.0; -- effective length constant gmin : real := 1.0e-12; quantity vth : real := 0.5; -- threshold voltage quantity ktq : real := 2.586e-2; -- (kT/q) thermal voltage at T=300K constant cox_prime : real := 3.4515e-8; -- oxide capacitance per unit area F/cm2. cox_prime = EOX/TOX quantity cox : real := 3.4515e-8; quantity vds_free : real := 5.0; quantity vgs_free : real := 0.0; constant as : real := 15.0e-12; -- source area constant ad : real := 15.0e-12; -- drain area begin ------ Setting initial conditions initreg : break vgs => 0.0, vbs => 0.0, vth => 0.5; thres_volt : vth == vto + (gamma *(sqrt((2.0*phi)-vbs) - sqrt(phi))); eff_length : leff == L - (2.0*ld); therm_volt : ktq == 2.586e-2 * (T/300.0); sat_scurr : iss == js*as; sat_dcurr : isd == js*ad; gn : beta == kp * ( w/leff); d12_res : vdsr == idsr * rd; oup_res : vds_free == vds; inp_res : vgs_free == vgs; gre : vgs == igs * 1.0e9; capeqn : cox == cox_prime * W * Leff; -- cox_prime * W * Leff src_res : isr == vsr * rs; -- Normal mode ------ Cut off Region regions : if((vgs < vth) and (vds >= 0.0))use gncn : idsg == 1.0e-9 * vds; ------ Linear Region elsif((vds <= (vgs-vth)) and (vgs >= vth) and (vds >= 0.0)) use gnln : idsg == vds*beta*((vgs_free-vth) - (vds_free/2.0))*(1.0 + lambda*vds_free); ------ Saturation Region elsif((vds > vgs-vth) and (vgs >= vth) and (vds >= 0.0)) use gnsn : idsg == (beta/2.0)*(pow((vgs_free-vth),2.0))*(1.0 + lambda*vds_free); -- Inversion mode ------ Cut off Region elsif((vgs < vth) and (vds < 0.0))use gnci : idsg == 1.0e-9 * vds; ------ Linear Region elsif(((-1.0*vds) <= (vgs-vth)) and (vgs >= vth) and (vds < 0.0)) use gnli : idsg == vds*beta*((vgs_free-vth) + (vds_free/2.0))*(1.0 - lambda*vds_free); ------ Saturation Region elsif(((-1.0*vds) > vgs-vth) and (vgs >= vth) and (vds < 0.0)) use gnsi : idsg == -1.0*(beta/2.0)*(pow((vgs_free-vth),2.0))*(1.0 - lambda*vds_free); end use; ----- Substrate diode equations initsub : break vbd => 0.0, vbs => 0.0, ibs => 0.0, ibd => 0.0; ----- Substrate to source subcond1 : if(vbs > 0.0) use bulk1 : ibs == ((iss*(exp(vbs/ktq) - 1.0)) + (gmin*vbs)); elsif(vbs <= 0.0 ) use bulk2 : ibs == ((iss*(vbs/ktq)) + (gmin*vbs)); end use; ----- Substrate to drain subcond2 : if(vbd > 0.0) use bulk3 : ibd == ((isd*(exp(vbd/ktq) - 1.0)) + (gmin*vbd)); elsif(vbd <= 0.0 ) use bulk4 : ibd == ((isd*(vbd/ktq)) + (gmin*vbd)); end use; end architecture behav;
VHDL-AMS модель P-MOSFET: PACKAGE electricalSystem IS NATURE electrical IS real ACROSS real THROUGH; FUNCTION POW(X,Y: real) RETURN real; FUNCTION SIN(X : real) RETURN real; FUNCTION EXP(X : real) RETURN real; FUNCTION SQRT(X : real) RETURN real; END PACKAGE electricalSystem; use work.electricalsystem.all; entity pmos is generic(mos_type : real := 1.0; -- +1.0 for nmos , -1.0 for pmos T : real := 300.0; W : real := 1.0; L : real := 1.0; vto : real := 1.0; -- Zero-bais threshold voltage kp : real := 2.0e-5; -- transcondiuctanec parameter gamma : real := 0.0; -- body-effect parameter phi : real := 0.6; -- surface inversion potential lambda : real := 0.02; -- channel lenght modulation tox : real := 1.0e-7; -- thin oxide thickness nsub : real := 0.0; -- Substrate doping nss : real := 0.0; -- Surface STate density ld : real := 0.0; -- lateral diffusion; tpg : real := 1.0; -- Type of Gate material uo : real := 600.0; -- Surface mobility af : real := 1.0; -- flicker noise exponent kf : real := 0.0; -- fliccker noise coefficient iss : real := 1.0e-14; -- bulk junction saturation current js : real := 0.0; -- bulk junctioin saturatioin current/ sqr meter pb : real := 0.80; -- bulk junction potential cj : real := 0.0; -- Zero-bias bulk capacitance/ sqr meter mj : real := 0.5; -- bulk junctioin grading coefficient cjsw : real := 0.0; -- Zero bias perimeter capacitance / sqr meter mjsw : real := 0.33; -- Perimiter capacitance rading coefficient fc : real := 0.5; -- forward-bais depletion capacitance coeff cgbo : real := 2.0e-10; -- gate-bulk overlap cap / meter cgdo : real := 4.0e-11; -- gate-drain overlap cap / meter cgso : real := 4.0e-11; -- gate-source overlap cap / meter rd : real := 1.0; -- drain ohmic resistance rs : real := 1.0; -- source ohmic resistance rsh : real := 0.0); -- source and drain sheet resistance port (terminal g,s,d,b : electrical); end entity pmos; architecture behav of pmos is terminal d1, s1 : electrical; quantity vds across idsg through d1 to s1; quantity vdsr across idsr through d1 to d; quantity vgs across igs through g to s1; quantity vbs across ibs through s1 to b; quantity vbd across ibd through d1 to b; quantity vsr across isr through s1 to s; quantity iss, isd : real := 1.0e-12; quantity beta : real := 8.85e-05; -- gain quantity leff : real := 1.0; -- effective length constant gmin : real := 1.0e-12; quantity vth : real := 0.5; -- threshold voltage quantity ktq : real := 2.586e-2; -- (kT/q) thermal voltage at T=300K constant cox_prime : real := 3.4515e-8; -- oxide capacitance per unit area F/cm2. cox_prime = EOX/TOX quantity cox : real := 3.4515e-8; quantity vds_free : real := 5.0; quantity vgs_free : real := 0.0; constant as : real := 15.0e-12; -- source area constant ad : real := 15.0e-12; -- drain area begin ------ Setting initial conditions initreg : break vgs => 0.0, vbs => 0.0, vth => 0.5; thres_volt : vth == vto + (gamma *(sqrt((2.0*phi)-vbs) - sqrt(phi))); eff_length : leff == L - (2.0*ld); therm_volt : ktq == 2.586e-2 * (T/300.0); sat_scurr : iss == js*as; sat_dcurr : isd == js*ad; gn : beta == kp * ( w/leff); d12_res : vdsr == idsr * rd; oup_res : vds_free == vds; inp_res : vgs_free == vgs; gre : vgs == igs * 1.0e9; capeqn : cox == cox_prime * W * Leff; -- cox_prime * W * Leff src_res : isr == vsr * rs; -- Normal mode ------ Cut off Region regions : if((vgs > vth) and (vds <= 0.0))use gncn : idsg == -1.0e-9 * vds; ------ Linear Region elsif((vds >= (vgs-vth)) and (vgs <= vth) and (vds <= 0.0)) use gnln : idsg == -1.0*vds*beta*((vgs_free-vth) - (vds_free/2.0))*(1.0 - lambda*vds_free); ------ Saturation Region elsif((vds < vgs-vth) and (vgs <= vth) and (vds <= 0.0)) use gnsn : idsg == -1.0*(beta/2.0)*(pow((vgs_free-vth),2.0))*(1.0 - lambda*vds_free); -- Inversion mode ------ Cut off Region elsif((vgs > vth) and (vds > 0.0))use gnci : idsg == -1.0e-9 * vds; ------ Linear Region elsif(((-1.0*vds) >= (vgs-vth)) and (vgs <= vth) and (vds > 0.0)) use gnli : idsg == -1.0*vds*beta*((vgs_free-vth) + (vds_free/2.0))*(1.0 + lambda*vds_free); ------ Saturation Region elsif(((-1.0*vds) < vgs-vth) and (vgs >= vth) and (vds > 0.0)) use gnsi : idsg == (beta/2.0)*(pow((vgs_free-vth),2.0))*(1.0 + lambda*vds_free); end use; ----- Substrate diode equations initsub : break vbd => 0.0, vbs => 0.0, ibs => 0.0, ibd => 0.0; ----- Substrate to source subcond1 : if(vbs > 0.0) use bulk1 : ibs == ((iss*(exp(vbs/ktq) - 1.0)) + (gmin*vbs)); elsif(vbs <= 0.0 ) use bulk2 : ibs == ((iss*(vbs/ktq)) + (gmin*vbs)); end use; ----- Substrate to drain subcond2 : if(vbd > 0.0) use bulk3 : ibd == ((isd*(exp(vbd/ktq) - 1.0)) + (gmin*vbd)); elsif(vbd <= 0.0 ) use bulk4 : ibd == ((isd*(vbd/ktq)) + (gmin*vbd)); end use; end architecture behav;