Loogikaväravad on ühe või mitme sisendsignaali järgi väljundsignaali tekitavad. Nendega saab läbi viia keerulisemat arvutiloogikat ning lihtsama otstarbega saab neid kasutada arvuti mälus ja signaali kiireks muutmiseks.
Bipolaarsete transistorite n ja p osade tegemisel pannakse ränikristallid umbes tunniks ~1000 C kraadisesse ahju. Seal lisatakse puuduvaid elemente, mis suudavad kuumusega mõne mikromeetri jagu ränisse siseneneda. Positiivsema (
P) laengu andmiseks kasutatakse ränist perioodilisustabelis vasakule poole jääva tulba elemente (väliskihil 1 elektron vähem kui ränil ja selle võrra positiivsem) ning negatiivse (
N) laengu jaoks ränist vasakule jäävaid elemenete millel on üle 4 elektroni väliskihil.
Bipolaarsete transistorite tegemisel olgu see NPN või PNP on keskmine kiht (
base) kõige õhukesem, et vool saaks sellest kiiresti läbi. Kõik 3 kihti on omaette elektroodidega kuid voolu läbimisvõime on nendes piiratud ja kõige kergem on voolu maksimumi ajada kõige õhukesemas keskmises kihis ning sellele kihile voolu lisamine on transistori sisse-välja lülitamiseks tähtsaim.
I-vool ja pinge on V. I järel olevad c, b ja e näitavad mis kohast nii palju läbi voolab ja voltide puhul näitab tähepaar millise kahe osa vahel on selline pinge erinevus.
Saturation ja
cut-off seisundid on nende transistorite puhul tavaliselt vastavalt sisse lülitatud ja välja lülitatud oleku esindajad.
Cut-off olekus on vool B sisse 0 amprit ja vool puudub E-C vahel. Pinge erinevus E ja C vahel võib olla maksimumis.
Küllastunud (
saturation) olekus on vool läbi B ja C maksimaalne ning idealiseeritud transistori puhul oleks pinge erinevus C ja E vahel 0 volti.
Reaalselt on mõlemal juhul veidi voolu leket või takistust kuid loogikaväravatest aru saamiseks piisab idealiseeritud transistoritele mõtlemisest.
Loogikaväravates on 0 tavaliselt esindatud alla 1 voldise väljundsignaali korral ja 1 maksimumi lähedase pinge väljumisega.
Loogikaväravate sisendsignaalid A ja B saadetakse tavaliselt
base piirkonda muutes sellega kogu transistori elektrijuhtivust. Sisendsignaale võib olla rohkem kui 2. Loogikaväravad ise teevad ülilihtsaid järeldusi kuid nende kombineerimisega saab läbi viia mitmekülgsemat infotöötlust. Neid paigutatakse tavaliselt suures koguses kiipide sisse.
Ringi lisamine loogikavärava sümboli ette või taha vahetab ära sama sisendsignaali korral väljundsignaalide 1 ja 0 väärtused.
AND loogikavärav väljastab tugeva signaali (1) kui kõik erinevad sisendsignaalid on tugevad. Joonise alaosas olevad 3 eri pikkuses horisontaalset sirget (
ground) tähistavad alati 0 volti. Kui A ja B sisendsignaale pole, siis on transistorid välja lülitatud, midagi ei tohiks oluliselt läbi voolata ja väljund on 0. Kui mõlemad sisendid on tugevad, siis saab elekter palju väiksema takistusega neist transistoritest läbi ning väljuda tugeva väljundsignaalina.
Lihtsalt OR värav töötab kui vähemalt üks sisendsignaal on tugevad.
OR väravas peab elekter läbima vähemalt ühe NPN transistori kuid kui vähemalt A või B on aktiivsed, siis saab vool väljuda.
NAND värav on AND vastand olles 0 väljundiga ainult siis kui mõlemad sisendsignaalid on tugevad ning on muidu väljundiga 1. Ülal illustratsioonil on näha, et elekter saab kergesti välja voolata kuid kui mõlemad transistorid tööle saada, siis voolab elekter läbi need kuni maandatakse.
Buffer annab sama väärtuse nagu oli sisendsignaal. Kui sisendsignaal puudub ei saa vool väljuda ja sisendsignaali tekkel saab vool väljuda.
Inverted buffer ehk
NOT värav annab väljundsignaali mis on 1 sisendsignaaliga 0 ning 0 sisendsignaaliga 1. Kui sisend puudub saab elekter väljundsignaali raja kaudu väljuda kuid sisendsignaali olemasolul see maandatakse.
NOR gate on vastupidiseid tulemusi andev kui OR värav. Kui A ja B on nullis, siis on väljund 1. A ja/või B väärtus 1 nullib ära väljundsignaali. Sarnaselt NAND väravaga saab elekter algselt väljuda, sest transistorid ei lase läbi kuid kui A või B on üks saab vool maandamiskohani voolata jättes kõrvale väljundsignaali raja.
"Eksklusiivsed" OR ehk
XOR väravad ei aktiveeru kui kõik saadavad sisendsignaalid on tugevad. Sellised väravad koostatakse mitmest lihtsamast loogikaväravast. Näiteks vasakpoolse näite korral on NOT väravad AND värava ees. Kui A või B üksi on aktiivselt, siis aktiveerub järgnev AND värav ja edasi tulev OR värav laseb need vabamalt läbi. Kui A ja B on mõlemad aktiivselt, siis NOT väravad ei tööta ja AND väravad ei saa tööle minna.
XNOR väravas aktiveerub üks AND värav kui sisendsignaalid puuduvad ja NOT väravad ise ajavad ühe AND värava tööle. Kui mõlemad sisendsignaalid on tugevad, siis aktiveerub teine AND värav kuid 1 ja 0 sisendite korral ei piisa kummagi AND värava aktiveerimiseks.
1976. aastal
tehtud kiip, milles on 4 NAND väravat. Väljundsignaal muutus 10% pealt 90% või 90%'lt 10%'le ~2-10 nanosekundiga.
Mitmed programmid lasevad loogikaväravaid joonistada ja nende mõjusid lihtsustatult läbi proovida. Üheks selliseks on logic.ly, mida saab nende lehel
http://logic.ly/demo/ proovida.

Peaaegu ainus asi mida ma teadsin teha oli kahte omavahel ühendatud NOR väravat kasutav mälu. Lülitid olid sisendsignaaliks ning väravaid töös hoidvaid vooluringe ei näidata. NOR väljundid on nullis kui esineb vähemalt 1 sisendsignaal. Selline mälu säilitab viimase oleku mis oli enne selle viimase sisendsignaali lõppemist.
Näide kuidas selle programmiga midagi liitvat ja salvestavat kalkulaatorit teha.
5x5 piksline ekraan loogikaväravatega.
24.12.2011 lisa
Loogikaväravaid
saab kombineerida
flip-flop'idena
kus kasutatakse loogikaväravate kombinatsioone. Ülal on J-K
flip-flop oma 4 NAND värava kombinatsiooniga, mis säilitavad
ajutiselt enda signaali ja saadavad seda edasi signaaliga, mis tuleb
kellalt. Kella rütmist sõltub kui kiiresti need infot edasi liigutavad.
Kui eri piirkondades on eri sagedusega kellad, siis liigub info nendes
vastavalt erineva kiirusega.
Näide J-K abil saadud info nihkumisest.
Flip-flop'e saab kasutada teksti või pildi lõputult ringluses
hoidmiseks kui viimane
flip-flop ühendada esimesega.
Hägusem (loogikavärava tüübid ei paista hästi)
klipp,
kus hoitakse teksti "FUN" 7x8 pikslisel ekraanil ringlemas.
S-R (
set-reset) flip-
flopid on kõige lihtsamad koosnedes kahest NOR väravast.
Minimalistlik
SR flip-flop'e kasutav info nihutaja logic.ly programmis. Lülitiga sain
valida millal pirn põlema panna ja viimane Q oli ühendatud esimese S
eelse OR väravaga. Kella sagedusega toimus info nihkumine. See töötab
kui vähemalt üks pirn ei tööta kuid kui kõik süttivad, siis jäävad need
sõltumata lülitist kõik tööle. Tõenäoliselt töötaks see tuhande
flip-flop'iga sarnaselt kus muster säilib kuid kõikide lampide
korraga aktiveerimisel jäävad kõik püsivalt särama.
Veidi edasiarendatud mälu. Keskmine "mäletab" viimasena tööle pandud ülemise või alumise mäluraja signaali. "Looping" lüliti peab sees olema mälu ringluses hoidmiseks. Delete lüliti kustutab ühe signaali ringlusest ja ON lisab ühe signaali ringlusesse. Kui näiteks ülemise rajaga panna 2 signaali keskel ringlema, siis see püsib keskmisel ringluses kuigi see kaoks ülemisest. Kui seejärel panna alumisega 1 signaal ringlema, siis hakkaks keskel ainult üks signaal ringlema. Sellega võib paljudest võimalikest signaaliallikatest üksiku aktiivse signaaliallika info automaatselt ringlusesse panna.
Loogikaväravad liitvas kalkulaatoris
Elektroonikaga arvutamises kasutatav kahe eri numbriga matemaatika loodi ~
2200-2500 aastat tagasi Indias kuid sellise arvutiloogika nimi (
Boolean logic) töödati välja 19. sajandi keskel.
Kuna
loogikaväravad töötavad kasutades arve 1 ja 0, siis tuleb pikemad
numbrid mingi loogikaga ühtede ja nullide kombinatsiooniks teha.
Kasutatavaid võimalusi on palju ning vähemalt kaks neist sobivad hästi
liitmiseks.
Vasakul pool võrdusmärki on tavaline
kümnendsüsteemis number ja paremal sama number kahendsüsteemis (allikaks
oli lihtsuse tõttu enamjaolt ühe
mängu
foorum)
0=0
1=1
2=10
3=11
4=100
5=101
6=110
7=111
8=1000
9=1001
10=1010
11=1011
12=1100
13=1101
14=1110
15=1111
16=10000
17=10001
18=10010
19=10011
20=10100
Kahendsüsteemis liitmisel jääb loogikaks see, et 0+0=0,
1+0=1 ja 1+1=10. Näiteks kahe piires liites on see korrapära ilmsem,
(1+0=1) (1+1=10 ehk 2). Kui 1+1=10, siis null jääb paremale poole ja 1
läheb suurema arvuna vasakule. Sama arvu iseendaga liitmisel saadakse
arv, mis on enamjaolt sama kuid mille lõppu lisatakse null (paarisarvud
lõppevad nulliga ja paaritud ühega).
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
Alternatiivina võib numbreid tähistada BCD süsteemis 4 kohaliste 1 ja
0 jadadena kus iga järgnev komakoht on eraldi nelja numbri jada. Liites
kehtib nende puhul sama loogika nagu eelnimetatud süsteemis
(0001+0001=0010).
1001 + 1100 = 10101 (9 + 12 = 21)
Näiteks 9+12
tehtes saadakse numbrid paremalt vasakule: 1+0=1, 0+0=0, 1+0=1 ja
1+1=10.
Full
adder'i skeem, mida kasutatakse liitmises. Loogikaväravates on
esimene liidetav bitt (1 või 0) A ja teine sisestatav bitt B. 1+1=10
tehte edasi kantud 1 on vahendatud C-IN sisendsignaaliga.
Väljundsignaalide puhul on saadud bitt S kaudu edastatud ja kui tekkis
1+1=10 tehtega 1, siis see väljub C-
OUT kanaliga.
XOR värav S ees annab nulli kui mõlemad sisendsignaalid on ühed või
ainult nullid. C-IN signaal üksi võib läbi XOR värava anda S väärtuseks
ühe. Kui A ja B on korraga ühed, siis aktiveerub AND värav, mis annab
edasi 1+1=10 tehte 1 signaali samas kui S väljundiks 0 XOR väravate
tõttu.
A B C-IN | S C-OUT
---------------------
0 0 0 | 0 0
1 0 0 | 1 0
0 1 0 | 1 0
0 0 1 | 1 0
1 1 0 | 0 1
1 0 1 | 0 1
0 1 1 | 0 1
1 1 1 | 1 1
Tabel võimalikest sisend ja väljundsignaalidest.
Mitme
full
adder'i ritta panekul saab need panna mitmekohalisi arve liitma
alustades bit 0 tähisega liitjast. S annab parempoolseima arvu vastuse
ja ülejääk kantakse Cout järgi edasi ning sellise järjekorraga läheb see
kuni suurima arvuni.
Lahutamine
Kahendsüsteemis
lahutamisel
(piisavalt lihtne allikas, et umbes tunniga kahendsüsteemis
lahutamisest, korrutamisest ja jagamisest aru saaks) on tavaliseks võtta
teine arv mille jagu lahutatakse ja vahetatakse ära selle 1 ja 0
väärtused ning tulemusele liidetakse 1 (kõige parempoolsele arvule).
Sellega muudetakse arv negatiivseks ja järgneb positiivse ja negatiivse
arvu liitmine, mis teeb lahutamisega sama välja. Tehtes peavad mõlemad
arvud olema sama pikad ja vajadusel võib lühemas arvus lisada vasakule
nulle.
Näiteks tehe
235-102 (
11101011 - 01100110).
102 on 110010110 kuid pikkuse ühtlustamiseks lisati selle ette 0.
Seejärel liidetakse esimesel arvule
teine "ümber pööratud" arv ning ainsa erinevusena ei lasta sellise
liitmise korral vastusel liidetud arvudest pikemaks saada. Saadud
10000101 annab kümnendsüsteemi teisendades 133.
Väiksest numbrist suurema lahutamisel kasutatakse
teistsugust meetodit.
Näiteks tehe 10010101 - 10110100 (149 -
180)
Alguses
vahetatakse suurema arvu ühed ja nullid omavahel ning liidetakse 1.
Seejärel liidetakse saadu algse väiksema arvuga. Negatiivse arvu
tähistamiseks muudetakse vasakpoolseim väärtus nulliks. Lõppvastuse saab
kui ühed ja nullid uuesti ära vahetatakse ning liidetakse 1. Vastuseks
on 31 (011111) kuid ette lisatud 1 tähistab negatiivset arvu.
Korrutamine
Kahendsüsteemis
korrutamine on sarnane tavalise korrutamisega.
Näiteks tehe
11x7 (1011 x 111).
Pärast
kahendsüsteemi panemist korrutatakse numbrid nagu ka kümnendsüsteemis
aga liitmisel kehtib kahendsüsteemi loogika kus 1+1=10. Saadud 1001101
on 77.
1 ja 0 korrutamiseks sobib lihtsalt AND värav, mis annab ühe 1x1 olukorras ja 0 kui korrutada 0x0 või 1x0.
Jagamine
Jagamises
kehtib ülal illustreeritud jagamise meetod, kus vastus on kõige
ülemisel real.
1 0 1
___________
1 0 1 ) 1 1 0 1 1
− 1 0 1
-----
0 1 1
− 0 0 0
-----
1 1 1
− 1 0 1
-----
1 0
Näites jagati 27 (11011) viiega (101). Saadi 101 (5) ja jäägiks jäi
10 (2). Kui 101 mahtus ülaloleva arvu sisse, siis lisati pandi vastuse
kohta selle puhul 1 alustades vasakult. Kui 101 ei mahtunud, siis
tähistati see nulliga.
9/3 (1001/11) tehe. Alustades vasakult
ei mahu 11 0 sisse ja vastuse vasakpoolseim arv on 0. Sama kordub teise
arvuga kus 10 on väiskem kui 11 kuid kolmas arv (100) on suurem 11'st ja
vastusesse pandi selle puhul 1. 100-11 annab kahendsüsteemis 1 (
kalkulaator).
Lõpus saadud 11 mahutab 11 ja vastuse lõppu tuleb 1. Ees olevad nullid
pole siin vastuse jaoks olulised ja 0011 võrdub 11'ga.