Thursday, December 8, 2011

Loogikaväravad


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.

3 comments:

  1. Lisasin loogikaväravate tekstile olulisi täiendusi

    ReplyDelete
  2. "NAND värav on AND vastand olles 0 väljundiga ainult siis kui mõlemad sisendsignaalid on tugevad ning muidu 0 väljundiga."

    Väike typo sattunud siia :)

    ReplyDelete