Pentru simularea circuitelor vom folosim tot simulatorul din laboratorul 1 și 2, http://www.falstad.com/circuit.
Prin circuite digitale înțelegem circuite în care sunt numai două stări posibile (de exemplu: un tranzistor poate fi în saturație, sau nu conduce). Numim aceste stari nivele logice si le notam prin HIGH sau LOW. Ele pot însemna mai multe lucruri:
Stările HIGH și LOW reprezintă stările TRUE și FALSE din logica booleană. Dacă într-un anumit punct HIGH este definit ca TRUE, atunci avem logică pozitivă. Dacă HIGH este definit ca FALSE, atunci avem logică negativă. De exemplu faptul că un switch este închis este adevarat când outputul sau este LOW.
În circuitele digitale, nivelele logice HIGH și LOW reprezintă anumite intervale (ex: HIGH:3.5-5V, LOW:0-2.5V; între 2.5V si 3.5V nivelul fiind nedefinit).
Imunitatea la zgomot reprezintă nivelul maxim de zgomot ce poate fi adăugat la nivelele logice fară ca poarta logică să funcționeze greșit.
Scopul unui circuit digital este de a prelucra intrări digitale pentru a produce ieșiri digitale. Pentru a realiza acest lucru, se folosesc porți logice. Folosind aceste porți, se pot crea circuite mai complexe.
CMOS(complementary MOS) este o familie de porți logice ce folosește atat tranzistoare nMOS, cât și tranzistoare pMOS pentru a realiza circuite logice ce necesită foarte puțin curent.
Celalalte porți logice se pot realiza pornind de la inversorul CMOS. Tranzițiile între High și Low se fac rapid.
http://www.falstad.com/circuit.
In teoria circuitelor digitale, logica combinatională este domeniul logicii numerice care este implementat de circuite booleene, în care iesirea circuitului depinde numai de stările intrarilor circuitului respectiv. Acest comportament este diferit de cel al logicii secvențiale, unde starea ieșirii depinde nu numai de starea prezentă a intrărilor ci și de stările anterioare. În alte cuvinte, logica secvențială are “memorie” iar logica combinațională nu.
Logica combinațională este folosită în circuite de calcul pentru implementarea algebrei booleene pe semnalele de intrare sau pe datele stocate în memorie. Circuitele digitale conțin de obicei o mixtură de circuite secvențiale și combinaționale. De exemplu, partea UAL-ului care se ocupă numai cu calculele matematice este construită numai cu circuite combinaționale, pe când registrele UAL-ului sunt implementate în logică secvențială. Alte circuite care sunt implementate în logică combinațională: half adder, full adder, sumator carry look-ahead, scăzătoare, multiplexoare, demultiplexoare, encodere și decodere.
Un encoder este un circuit combinațional care comprimă mai multe intrări binare intr-un număr mai mic de ieșiri. De cele mai multe ori este folosit pentru a controla cererile de întrerupere către un procesor, pentru că are proprietatea să reacționeze la intrări în funcție de prioritatea lor și să pună întotdeauna pe ieșire codul intrării cu prioritatea cea mai mare. Drept exemplu aveți în tabelul mai jos modul de funcționare al unui encoder 4 la 2:
I1 | I2 | I3 | I4 | O1 | O2 |
---|---|---|---|---|---|
0 | 0 | 0 | x | 0 | 0 |
0 | 0 | 1 | x | 0 | 1 |
0 | 1 | x | x | 1 | 0 |
1 | x | x | x | 1 | 1 |
Dacă două sau mai multe intrări sunt active la un moment dat, cea cu prioritate mai mare va avea precedentă. În exemplul de mai sus, “x” reprezintă fie un 0 sau un 1 (nu contează ce valoare are intrarea de prioritate mai mică în momentul în care este concomitentă cu una de prioritate mai mare).
Un exemplu de implementare a unui encoder este dat în figura de mai jos:
Funcția inversă unui encoder este implementată de un decoder. Acesta primește “n” intrări și furnizează “2^n” ieșiri . Decodificarea este utilă în aplicații care folosesc multiplexara a datelor, display- uri 7-segment sau decodificarea adreselor de memorie. De exemplu, mai jos aveți un decoder 2 la 4:
Un multiplexor sau mux este un dispozitiv care implementează multiplexarea unor semnale; acesta selectează o intrare analogică sau digitală din “2^n” intrări și o rutează la ieșirea circuitului. Selecția intrărilor se face cu ajutorul a “n” semnale de comandă. Multiplexoarele fac posibilă partajarea unei singure resurse sau mediu de transmisie de către mai multe semnale, de exemplu un convertor Analog-Digital sau o linie de comunicație pot transmite sau măsură mai multe semnale, fără a fi nevoie să se replice structura de măsurare sau transmisie. Un multiplexor poate fi asemanat cu un intrerupator cu un singur contact si mai multe pozitii care este comandat de catre liniile de selectie:
Un multiplexor 2 la 1 este cea mai simplă structură de acest gen. El are urmatoarea ecuație de funcționare:
unde si sunt cele două intrări, este intrarea de selecție iar este ieșirea.
Tabela de adevăr pentru intrările și ieșirile multiplexorului 2 la 1 este următoarea:
S | A | B | Z |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 0 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
Adică ieșirea are valoarea lui A atunci cand S = 0 și valoarea lui B atunci când S = 1.
Folsind aceeași logică se pot construi multiplexoare cu mai mult de două intrări. Cele mai comune sunt 4 la 1, 8 la 1 și 16 la 1:
Un demultiplexor realizează funcția inversă multiplexorului, preia datele de pe o intrare și le ruteaza pe una din cele 2^n iesiri în funcție de starea logică a celor n linii de selecție.
Un exemplu de circuit demultiplexor 1 la 4 este dat în figura de mai jos:
Un sumator este un circuit digital care realizează operația de adunare a numerelor. În calculatoarele moderne, sumatoarele fac parte din Unitatea Aritmetică Logică (UAL) din cadrul procesorului.
Un 'half adder
' este un circuit digital care realizeaza suma a doi operanzi de un singur bit notați și . Un circuit half adder furnizează la ieșire două semnale: și , unde . Mai jos este inclusă tabela de adevăr pentru un half adder:
A | B | C | S |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 |
Un Half Adder este implementat cu două porți logice: un XOR si un AND:
Un sumator complet este un circuit digital care realizează suma a trei operanzi de un bit, notați ca , , și . Sumatorul complet are două ieșiri reprezentate de obicei de către semnalele și unde . Tabela de adevăr a circuitului este dată mai jos:
A | B | Ci | Co | S |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
Un exemplu de implementare a sumatorului complet folosește formulele .
În această implementare poartă SAU finală înainte de ieșirea de carry poate fi înlocuită de o poartă XOR fără să se modifice funcționarea corectă. Acest lucru poate fi avantajos atunci când circuitul este implementat folosindu-se circuite integrate care conț în un singur tip de poartă logică in capsulă lor.
Pentru a reduce timpul necesar unui calcul, determinat în special de propagarea semnalului de carry pe rangurile superioare, proiectanții folosesc sumatorul carry look-ahead. Ele funcționează prin generarea a două noi semnale (P și G) pentru fiecare rang binar în funcție de starea intrărilor : dacă un carry este propagat la rangurile superioare (cel puțin o intrare este '1'), dacă un carry este generat la nivelul acelui rang (ambele intrări sunt '1') sau dacă un carry este oprit la acel rang (ambele intrări sunt '0'). În cele mai multe cazuri, P este ieșirea de suma a unui half adder și G este ieșirea de carry a aceluiași sumator. După ce termenii P și G sunt generati sunt creați biții de carry pentru fiecare rang in parte . Alte arhitecturi pot folosi carry look ahead la un nivel mai avansat cum ar fi Manchester carry chain, sumatorul Brent-Kung sau sumatorul Kogge-Stone.
În cazul adunării binare, se generează carry dacă și numai dacă ambele intrări A și B sunt 1. Dacă scriem că predicatul logic care este adevărat atunci când generează, avem:
Adunarea a două intrări de un bit și va “propaga” dacă în urmă ei va rezultă un carry către rangul superior datorită faptului că avem un carry de la un rang inferior. De exemplu, dacă adunăm 37 + 62 suma cifrelor zecilor (3 și 6) va “propagă” orice carry venit de la rangul inferior (în cazul de față nu se va propagă nimic, dar acest lucru se schimbă dacă adunăm 38 + 62, de exemplu). În cazul adunării binare, propagă dacă și numai dacă cel puțin sau au valoarea 1. Dacă definim că predicatul binar care este adevărat dacă și numai dacă propagă, avem:
Uneori se folosește și o altă definiție a propagării. Conform acesteia, va propagă dacă suma generaza carry dacă avem carry de la rang inferior și nu propagă dacă nu avem carry inferior. Orice definiție am folosi, modul în care sunt generați și propagati biții într-un sumator carry look-ahead este același. În cazul adunării binare, definiția de mai sus este exprimată prin:
Pentru aritmetica binară, or
este mult mai rapid față de xor
și necesită mai puțini tranzistori pentru a fi și implementat. Cu toate acestea, pentru un sumator carry look-ahead pe mai multe nivele este mai avantajos să folosim .
Date fiind conceptele de generare si propagare, când va exista carry în urma unei adunări binare? Acesta va avea loc în momentul în care adunarea generează “sau” rangul mai puțin semnificativ de carry și suma propagată. Daca scriem în algebra booleană, cu drept bitul de carry pentru rangul i și și biții de generare și propagare pentru rangul i, vom avea următoarea relație:
Pentru fiecare rang dintr-o secvență binară, sumatorul va determina dacă perechea de biți care trebuie adunată poate genera sau propaga carry. Acest lucru permite circuitului să “pre-proceseze” cei doi termeni ai adunării pentru a determina transportul înainte de a efectua adunarea propriu-zisă. Apoi, când această are loc, nu va există nici o întârziere de propagare a carry-ului, ca în cazul unui Ripple Adder. Mai jos aveți un exemplu de calcul al termenilor de propagare și generare pentru un sumator de 4 biți :
Înlocuind în expresia lui , apoi pentru , apoi pentru obținem următoarele ecuații:
In seria 7400 de circuite integrate exista mai multe tipuri de sumatoare, multiplexoare, demultiplexoare si encodere:
S.No. | IC No. | Function | Output State |
---|---|---|---|
1 | 74157 | Quad 2:1 mux. | Ieșirea are aceeasi stare ca si intrarea |
2 | 74158 | Quad 2:1 mux. | Ieșirea este intrarea inversată |
3 | 74153 | Dual 4:1 mux. | Ieșirea are aceeasi stare precum intrarea |
4 | 74352 | Dual 4:1 mux. | Ieșirea este intrarea inversată |
5 | 74151A | 8:1 mux. | Ambele tipuri de Ieșiri sunt disponibile (Ieșiri complementare) |
6 | 74151 | 8:1 mux. | Ieșirea este intrarea inversată |
7 | 74150 | 16:1 mux. | Ieșirea este intrarea inversată |
8 | 74139 | Dual 1:4 demux. | Ieșirea este intrarea inversată |
9 | 74156 | Dual 1:4 demux. | Ieșirea este open collector |
10 | 74138 | 1:8 demux. | Ieșirea este intrarea inversată |
11 | 74154 | 1:16 demux. | Ieșirea este intrarea inversată |
12 | 74159 | 1:16 demux. | Ieșirea este open collector |
13 | 74147 | 10:4 Priority Encoder | |
14 | 74148 | 8:3 Priority Encoder | |
15 | 74348 | 8:3 Priority Encoder | Ieșiri three-state |
16 | 74155 | Dual 2:4 Decoder/Demultiplexer | |
17 | 74237 | 1:8 Decoder/Demultiplexer | Address latch, Ieșiri active pe 1 |
18 | 74238 | 1:8 Decoder/Demultiplexer | Ieșiri active pe 1 |
19 | 74239 | Dual 2:4 Decoder/Demultiplexer | Ieșiri active pe 1 |
20 | 74248 | BCD to 7-segment Decoder/Driver | Ieșiri cu pull-up intern |
21 | 74249 | BCD to 7-segment Decoder/Driver | Ieșiri open-collector |
22 | 74537 | BCD to Decimal Decoder | Ieșiri three-state |
23 | 74538 | 1:8 Decoder | Ieșiri three-state |
24 | 74539 | Dual 1:4 Decoder | Ieșiri three-state |
Lista completă o aveți aici: http://en.wikipedia.org/wiki/List_of_7400_series_integrated_circuits