Недостатки NMOS технологии привели к созданию CMOS технологии. CMOS - (Complimentary Metal-Oxide-Semiconductor). Основная идея CMOS: мы не хотим чтобы ток протекал от питания к земле в момент работы, поэтому мы используем пару транзисторов (один n-типа, другой p-типа, один из них соединяет выход с питанием, другой с землей. Они дополняют друг друга (complimentary). В результате ток течет от питания к земле в элементе только в момент переключения, в остальное время энергопотребление значительно меньше. Идея CMOS: CMOS технология
Сравнение мощности рассеяния CMOS и TTL в зависимости от частоты:
NOT
Идея работы как NOT на NMOS технологии: Если Vin имеет высокий уровень, то T1 открыт, а T2 закрыт, как результат Vout cоединен с землей (0). Если же Vin низкий то T1 закрыт, а T2 открыт, Vout соединен с питанием (1). ------------- ---------- Vin | Vout Vin | Vout = NOT -----+------- ----+----- 0 V | +5V 0 | 1 +5V | 0V 1 | 0 -----+------- ----+----- Форма спада на выходе CMOS:
Форма фронта на выходе CMOS:
Зависимость от напряжения питания:
Пример аналогового электрического моделирования CНMOS инвертора:
SPICE: --------------------------------------------------------------- * Oscilloscope(s) .PROBE V(14, 0) R_o_scope_0_0 14 0 1Tohm .PROBE V(15, 0) R_o_scope_0_1 15 0 1Tohm * Function Generator(s) V_fg_plus 14 0 DC 0V AC 3V +PULSE(-3V 3V 0 100ns 100ns 50ms 100ms) * Battery(s) V1 12 0 DC 5 * 3-Terminal Depletion N-MOSFET(s) M_N_DM_Q1 15 14 0 0 NMDideal * 3-Terminal Depletion P-MOSFET(s) M_P_DM_Q2 15 14 12 12 PMDideal * Misc .MODEL NMDideal NMOS(VTO=0 KP=20u LAMBDA=0 PHI=600m GAMMA=0 Rd=0 Rs=0 +IS=10f Cgbo=0 Cgdo=0 Cgso=0 Cbd=0 Cbs=0 PB=800m RSH=0 CJ=0 MJ=500m CJSW=0 +MJSW=500m JS=0 TOX=100n NSUB=0 NSS=0 TPG=1 LD=0 U0=600 KF=0 AF=1 FC=500m +TNOM=27) .MODEL PMDideal PMOS(VTO=0 KP=20u LAMBDA=0 PHI=600m GAMMA=0 Rd=0 Rs=0 +IS=10f Cgbo=0 Cgdo=0 Cgso=0 Cbd=0 Cbs=0 PB=800m RSH=0 CJ=0 MJ=500m CJSW=0 +MJSW=500m JS=0 TOX=100n NSUB=0 NSS=0 TPG=1 LD=0 U0=600 KF=0 AF=1 FC=500m +TNOM=27) .END --------------------------------------------------------------- Вид на осциллографе:
Пример моделирования CMOS NOT на Verilog: module cmos_not(out,in); output out; input in; supply1 pwr; supply0 gnd; assign out = 1'bZ; pmos(out,pwr,in); nmos(out,gnd,in); endmodule
NAND
Идея CMOS NAND та же что и в NMOS NAND. Если V1 и V2 высокие, то Vout соединен с землей (0) (T1L и T2L открыты, T1H и T2H закрыты). В другом случае как минимум один из T1L и T2L закрыт, и один из T1H и T2H открыт, Vout соединен с питанием (1). -------------- ------------- V1 V2 | Vout V1 V2 | Vout = NAND -------+------ -------+----- 0V 0V | +5V 0 0 | 1 0V +5V | +5V 0 1 | 1 +5V 0V | +5V 1 0 | 1 +5V +5V| 0V 1 1 | 0 -------------- -------------
Схема для электрического моделирования CMOS NAND2:
Результаты электрического моделирования:
Пример моделирования CMOS NAND2 на Verilog: module cmos_nand2(out,a,b); output out; input a,b; supply1 pwr; supply0 gnd; wire x; assign out = 1'bZ; pmos(out,pwr,a); pmos(out,pwr,b); nmos(x,gnd,b); nmos(out,x,a); endmodule
NOR
Идея CMOS NOR та же что и в NMOS NOR и CMOS NAND. Любой из T1L и T2L делает 0 на Vout. Оба вместе T1H и T2H делают 1 на Vout. -------------- ------------- V1 V2 | Vout V1 V2 | Vout = NOR --------+----- -------+----- 0V 0V | +5V 0 0 | 1 0V +5V | 0V 0 1 | 0 +5V 0V | 0V 1 0 | 0 +5V +5V | 0V 1 1 | 0 -------------- -------------
Пример моделирования CMOS NOR2 на Verilog: module cmos_nor2(out,a,b); output out; input a,b; supply1 pwr; supply0 gnd; wire x; assign out = 1'bZ; pmos(x,pwr,a); pmos(out,x,b); nmos(out,gnd,a); nmos(out,gnd,b); endmodule
Buffer
Из за электрических свойств транзисторов [не будем углубляться] CMOS буффер имеет специфику и реализуется не как CMOS инвертер, а как 2 инвертора идущих последовательно.
Пример моделирования СMOS буфера на транзисторном уровне на Verilog: module cmos_buf(out,in); output out; input in; supply1 pwr; supply0 gnd; wire x,y; assign x = 1'bZ; pmos(x, pwr, in); nmos(x, gnd, in); assign out = 1'bZ; pmos(out, pwr, x); nmos(out, gnd, x); endmodule
Tristate
CMOS логика позволяет делять тристабильный элемент (Tristate), т.е. элемент на выходе которого может быть высокоимпедансное состояние (состояние с высоким сопротивлением когда ток не течет через элемент). Элементы с тристабильными состояниями очень важны для организации шин. Когда подключенный к шине элемент находится в высокоимпедансном состоянии любое другое устройство выдающее сигнал на шину забивает ток утечки из элемента и устанавливает свой уровень напряжения. Это позволяет свызывать различные узлы компьютера проводниками напрямую (монтажное ИЛИ, схемное ИЛИ). Это состояние реализуется одновременным закрытием обоих транзисторов из CMOS пары. -------------- EN A | OUT = Tristate -------+------ 0 0 | Z 0 1 | Z 1 0 | 0 1 1 | 1 --------------
Пример моделирования СMOS тристабильного элемента на транзисторном уровне на Verilog: module cmos_tristate(out,a,en); output out; input a,en; supply1 pwr; supply0 gnd; wire eni, up, down; cmos_not EN_NOT(eni,en); cmos_nand2 UP_CHAIN(up, en, a); cmos_nor2 DOWN_CHAIN(down, eni, a); assign out = 1'bZ; pmos(out, pwr, up); nmos(out, gnd, down); endmodule
AND
Пример моделирования CMOS AND2 на Verilog: module cmos_and2(out,a,b); output out; input a,b; supply1 pwr; supply0 gnd; wire x,iin; assign iin = 1'bZ; pmos(iin,pwr,a); pmos(iin,pwr,b); nmos(x,gnd,b); nmos(iin,x,a); assign out = 1'bZ; pmos(out, pwr, iin); nmos(out, gnd, iin); endmodule
OR
Пример моделирования CMOS OR2 на Verilog: module cmos_or2(out,a,b); output out; input a,b; supply1 pwr; supply0 gnd; wire x, iin; assign iin = 1'bZ; pmos(x,pwr,a); pmos(iin,x,b); nmos(iin,gnd,a); nmos(iin,gnd,b); assign out = 1'bZ; pmos(out, pwr, iin); nmos(out, gnd, iin); endmodule
XOR
Реализация XOR на CMOS:
Каноническая имплементация XOR на CMOS занимает очень много транзисторов (12) (на схеме еще не показаны 4 транзистора, которые нужны для инвертирования A и B. Есть более хитрые методы реализации XOR используя pass-through logic. Реализация XOR на PTL:
Идея: _ _ XOR(X,Y) = XY + YX ---------- X Y | XOR ----+----- 0 0 | 0 0 1 | 1 1 0 | 1 1 1 | 0 ---------- Если Х = 0, то XOR = Y Если X = 1, то XOR = Y# Пример моделирования CMOS XOR2 на Verilog: module cmos_xor2(out,a, b); output out; input a,b; wire ia, ib; wor x; cmos_not INVERT_A(ia,a); cmos_not INVERT_B(ib,a); assign x = 1'bZ; pmos(x, a, b); nmos(x, a, ib); pmos(x, ia, ib); nmos(x, ia, b); assign out = x; endmodule
Каноническая CMOS реализация XOR с 4мя входами.
XNOR
_ _ XOR(X,Y) = X*Y + X*Y ----------- X Y | XNOR ----+------ 0 0 | 1 0 1 | 0 1 0 | 0 1 1 | 1 ----------- Если Х = 0, то XNOR = Y# Если X = 1, то XNOR = Y XNOR реализуется аналогично XOR в 8ми транзисторную структуру. (В 12 - если канонически)