În acest laborator vom învăța câteva noțiuni de logică digitală și le vom exersa creând niște circuite într-un simulator.
Porțile logice sunt folosite în circuite digitale pentru a implementa operațiile din algebra booleană. Fiindcă sunt foarte multe moduri în care o anumită funcție logică poate fi realizată (nu numai ca design de circuit, ci și ca mod de fabricație al circuitelor integrate), porțile sunt grupate în familii logice. Exemple de astfel de familii sunt:
După cum se poate vedea, aproape toate formele de logică digitală contin, într-un mod sau altul, tranzistori.
Din motive tehnice, este mai ușor să realizăm porți logice pentru funcțiile NAND și NOR decât pentru echivalentele lor în logica pozitivă, AND și OR. Din această cauză, ne vom rescrie funcțiile logice astfel încat să folosim numai aceste operații. Nu este ieșit din comun ca procesoare întregi să fie implementate utilizând doar porți NAND sau doar porți NOR.
Să vedem cum poate fi realizată o poartă NOT în logică NMOS.
Funcționarea sa este următoarea:
Să vedem cum poate fi realizată o poartă NOT în logică CMOS.
Această poartă funcționează astfel:
Pentru că tendința în electronică este, în general, “set-and-forget” (construim niște dispozitive din siliciu, le numim tranzistori și uităm de siliciu, apoi construim niște porți logice din tranzistori și uităm de tranzistori, apoi construim niște circuite integrate din porți logice și uităm de porți logice, apoi construim niște procesoare din circuite integrate și uităm de circuite integrate, apoi uităm de electronica și programăm procesoarele în assembly, apoi uităm de assembly și programăm in C, apoi uităm de C și programăm în Java, apoi uităm tot și ne angajăm la McDonalds), asta vom face și noi. În loc de scheme bloc cu tranzistori, vom lucra cu imagini de ansamblu care să reprezinte porțile logice la nivel conceptual. De asemenea, vom înlocui valorile de tensiune cu nivele logice, LOW și HIGH. Astfel, putem sâ rezumăm întreaga poveste în felul următor:
Circuitele logice combinaționale sunt circuitele reprezentate prin porți logice ce aplică o funcție pe intrări. Valorile de ieșire depind doar de valorile de intrare, nu și de stări de reacție (feedback), iar când starea unei intrări se schimbă, se reflectă imediat la ieșiri.
Un circuit combinațional poate fi descris printr-o schema de interconectarea a unor porți logice, prin funcția (expresia) în logica booleană ce este aplicată pe intrări și prin tabele de adevăr (dacă nu au un număr prea mare de intrări).
Circuitele combinaționale sunt folosite în procesoare în cadrul componentelor de calcul, iar cele mai des întalnite sunt:
Un multiplexor digital este un circuit combinațional care implementează o funcție de selecție a uneia dintre intrările sale. Alegerea semnalului de ieșire se face pe baza unor intrări suplimentare care reprezintă în baza 2 numărul intrării ce trebuie selectate, astfel un multiplexor cu 2n intrări va avea nevoie de n semnale de selecție. În exemplul din figura de mai jos avem schema bloc a unui multiplexor cu 4 intrări, iar acesta are nevoie de doar 2 intrări de selecție.
Funcția logică corespunzătoare unui multiplexorului 4:1 din exemplul de mai sus este următoarea: out = ¬S1∧¬S2∧I1 ∨ S1∧¬S2∧I2 ∨ ¬S1∧S2∧I3 ∨ S1∧S2∧I4. Folosind această expresie putem descrie circuitul combinațional pentru multiplexor, având nevoie conform formulei de 4 porți logice AND cu trei intrări, o poartă OR cu 4 intrări și porți NOT pentru negarea semnalelor de selecție.
Sumatoarele (adders), folosite cel mai mult în unitățile aritmetice logice ale procesoarelor, realizează adunări pe un număr dat de biți, furnizând la ieșirea circuitului suma și transportul (carry) rezultat în urma operației. Există mai multe tipuri de sumatoare pentru adunarea numerelor pe n biți, iar acestea se bazează pe sumatoare simple de 1 bit ce pot fi de două tipuri:
Spre deosebire de circuitele logice combinaționale, cele secvențiale nu depind exclusiv de starea curentă a intrărilor, ci și de stările anterioare ale circuitului. Circuitului combinațional format din porți logice i se adaugă un element de memorare a stărilor.
Circuitele secvențiale sunt de două tipuri:
Latch-ul SR are două intrări:
Funcționarea sa este următoarea:
Acest bistabil este similar celui SR, având două intrări J și K, însă elimină starea ambiguă (ambele intrări HIGH):
Ideea acestui bistabil pornește tot de la eliminarea stării ambigue de la bistabilul SR, și reușește acest lucru prin a nu mai permite ca S și R să fie egale. Bistabilul D are o singură intrare, D, conectând cele două intrări SR printr-un invertor:
Vom folosi pentru exemplificarea noțiunilor prezentate mai sus simulatorul de circuite Falstad. Implementați și observați comportamentul următoarelor circuite: