Sunteți pe pagina 1din 51

MICROPROCESOARE SI MICROCONTROLERE

- Note de curs -

Facultatea de Inginerie Mecanica, Mecatronica si Management

2. Bazele logicii digitate 2.1. Introducere Hardware-ul responsabil cu execuia instruciunilor n limbaj main poate fi construit utiliznd un numr mare de cteva blocuri simple. Aceste blocuri simple sunt numite pori logice. Aceste pori logice implementeaz operaiile logice de baz cum ar fi AND (l), OR (SAU), NOT (NU) i aa mai departe. De exemplu, e ppt construe circuite hardware utiliznd doar pori AND i NOT sau echivalentele lor. Porile logice sunt construite cu ajutorul tranzistorilor. Un singur tranzistor este suficient pentru a implementa o poart NOT (NU). Dar pentru implementarea unei pori AND (l) sunt necesari 3 tranzistori. De exemplu, procesorul PENTIUM aprut in anul 1993 coninea aproximativ 3 milioane de tranzistori. n anul 2000 apruser circuite care utilizau 100 de milioane de tranzistori. Cum se pot descurca creatorii cu circuite att de complexe? n mod evident, au nevoie de un nivel mai nalt de abstractizare. De exemplu, pori logice cum arfi AND i OR reprezint un nivel de abstractizare mai ridicat dect tranzistorii. n continuare vom vedea c nici acest nivel de abstractizare n u este suficient, existnd nc milioane de pori logice n cadrul procesorului. Din acest motiv vom vedea n continuare nivele! de abstractizare din ce n ce mai nalte. I Discuia despre logica digital este mprit n 3 pri. Prima parte se refer la porile logice digitale i la implementarea lor. Dup cum! spuneam, avem nevoie de nivele de abstractizare mai nalte pentru a putea reduce complexitatea proiectrii circuitelor digitale. Aa c vom urmri 2 nivele de abstractizare mai nalte, i anume ci rcuitele combinaionale i cele secveniale, n celelalte 2 pri. n circuitele combinaiona|le, ieirea circuitului depinde doar de starea curent a intrrilor. Un exemplu de circuit combinaional l reprezint sumatorul. Ieirea sumatorului depinde doar de valorile curente ale intrrilor lui. De partea cealalt, ieirea circuitelor secveniale depinde nu doar de valorile curente ale intrrilor, ci i de valorile vechi ale acestora. De exemplu, n cazul unui numrtor binar, ieirea depinde de valoarea curent. Valoarea urmtoare se obine prin incrementarea valorii curente (putem '> spune c valoarea curent reprezint o copie a valorii anterioare a intrrilor). Altfel spus, nu putem spune ce valoare va avea numrtorul la ieire fr s-i cunoatem starea curent. De aceea putem spune c un numrtor este un circuit secvenial. 2.2. Pori logice Circuitele digitale care implementeaz funciile logice simple AND, OR, NOT i altele se numesc pori logice. n figura 2.1 sunt prezentate notaiile simbolice pentru porile AND, OR i NOT. De asemenea se regsesc i tabelele de adevr pentru cele 3 pori. O tabel de adevr este o list a tuturor combinaiilor posibile pe intrri i a valorilor corespunztoare ale ieirilor. De exemplu, dac privim 0 logic ca fiind FALS i 1 logic ca fiind ADEVRAT, se poate observa c tabela de adevr pentru poarta logic AND reprezint operaia logic l.

AND gate

A 0 0 1 1

B 0 1 0 1

F 0 0 0 1

OR gate

A 0 0 1 1 A 0 1

B 0 1 0 1 F 1 0

F 0 1 1 1

NOT gate

Logic symbol

Truth table

Figura 2.1. Porile logice de baz: simbolurile logice i tabelele de adevr. n cadrul expresiilor logice se utilizeaz punctul (), plusul (+) i bara de negare () pentru a reprezenta operaiile AND, OR i NOT. De exemplu, ieirea porii AND din figura 1 se poate scrie: F = AB. Presupunnd c literele sunt variabile logice, deseori se renun la punct i putem scrie funcia AND anterioar sub forma: F = AB. n mod asemntor funcia OR este scris sub forma F = A + B. Ieirea porii NOT este exprimat sub forma F = . Unii autori folosesc apostroful pentru a reprezenta operaia NOT sub forma F = A' datorit reprezentrii dificile a barei de negare. Precedena celor 3 operatori logici este urmtoarea: operatorul AND are o preceden mai mare dect operatorul OR, n timp ce operatorul unar NOT are cea mai mare preceden dintre cei trei operatori. De aceea, o expresie logic precum F = AB' + A'B poate fi scris sub forma F = (A (B')) + ((A') B). La fel ca n expresiile aritmetice, putem folosi parantezele pentru a modifica precedenele implicite. Chiar dac cele 3 pori logice prezentate n figura 2.1 sunt suficiente pentru a implementa orice funcie logic, este mai convenabil s implementm i alte pori logice. Figura 2.2 prezint alte trei pori logice larg utilizate. Poarta NAND este echivalent cu o poart AND urmat de o poart NOT. Asemntor, poarta NOR este o combinaie ntre poarta OR i poarta NOT. Vom vedea c, contrar ateptrilor noastre, porile NAND i NOR necesit doar 2 tranzistori pentru implementare, pe cnd porile AND i OR necesit cte 3 tranzistori. Poarta SAU exclusiv (XOR) genereaz 1 logic la ieire ori de cte ori cele dou intrri sunt diferite ntre ele. Aceast proprietate determin utilizarea ei n anumite aplicaii, cum ar fi generarea paritii. O alt poart interesant i util este poarta exclusiv-NOR. Aceasta este echivalent cu o poart XOR urmat de o poart NOT.' Ieirea acestei pori este 1 logic ori de cte ori cele dou intrri sunt identice. Poarta exclusiv -NOR mai este numit i poarta echivalenei sau a coincidenei

A 0 0 1 1 A

B 0 1 0 1 B

F 1 1 1 0 F 2

0 0 1 1

0 1 0 1

1 0 0 0

A 0 0 1 1 Logic symbol Figura 2.2. Alte pori logice utilizate

B 0 1 0 1

F 0 1 1 0 Truth table

S presupunem c lucrm cu dou variabile logice. Se tie c putem defini o multitudine de funcii asupra celor dou variabile, cum ar fi: AND, OR, NAND, NOR, XOR. ntrebarea creia i cutm rspunsul este: cte funcii logice diferite putem defini peste N variabile logice? Odat cunoscut rspunsul la aceast ntrebare,;putem utiliza informaia, de exemplu, pentru a studia universalitatea unei pori logice. Poarta logic NAND este universal. Asta nseamn c putem implementa orice funcie logic utiliznd doar pori NAND (putem folosi cte pori NAND dorim). Pentru nceput, s ne concentrm asupra celor dou variabile. Din moment ce dou variabile pot avea patru combinaii de intrare (adic patru rnduri n tabela de adevr) i se poate seta ieirea pe 1 sau pe 0 pentru fiecare rnd, putem defini 16 funcii diferite, ca n Tabelul 2.1. Tabelul 2.1. Numrul funciilor ce pot fi'defnite peste dou variabile logice

Privind tabelul 2.1, observm c unele funcii sunt nefolositoare (de ex. F0 i F15) deoarece sunt independente de intrri. Alte funcii pot fi identificate ca fiind corespunztoare porilor logice descrise anterior (de ex. F1 este funcia AND, iar F6 este funcia XOR). Putem generaliza cele discutate mai sus la N variabile logice notnd faptul c exist 2N rnduri n tabela de adevr a unei expresii logice cu N variabile. Deci numrul de funcii ce poate fi definit pe N variabile este

Seturi complete Spunem c un set de pori este complet dac putem implementa orice funcie logic utiliznd doar porile din cadrul acestui set complet. Asta nseamn c, teoretic, nu avem nevoie de alte pori din afara setului pentru a implementa o funcie logic. Exemple de seturi complete: {AND, OR, NOT} {AND, NOT} {OR, NOT} {NAND} {NOR} Un set complet este minimal dac nu conine elemente redundante, adic dac se 3

terge un element din cadrul setului, acesta nu rmne complet. n seturile complete de mai sus observm c primul set nu este minimal, deoarece putem elimina ori AND, ori OR (dar nu amndou) i obinem un alt set complet. Cum putem demonstra c un set este complet? Trebuie s demonstrm ca folosind doar porile din cadrul setului, putem construi porile AND, OR i NOT. Figura 2.3 ilustreaz modul n care putem obine cele trei pori utiliznd doar pori NAND. O demonstraie asemntoare este dat n figura 2.4, de data asta folos indu-se pori NOR. Porile NAND i NOR mai sunt numite pori universale deoarece putem implementa orice funcie logic folosind doar pori NAND sau NOR.

Figura 2.3. Implementarea portilo AND, OR, NOT prin folosirea portilor NAND.

Conceptele creerii circuitelor digitale pot fi descrise privind implementarea lor cu ajutorul terminale: baza, colectorul i emitorul. Un tranzistor poate opera liniar sau n comutate. n funcionarea liniar, tranzistorul amplific semnalul de intrare aplicat pe baz. Aceta este modul de lucru al tranzistorului n circuitele de amplificare. n circuitele digitale se utilizeaz modul de:operare n comutaie al tranzistorului. n acest mod, tranzistorul acioneaz ca un comutatori ntre colector i emitor. Tensiunea aplicat bazei tranzistorului determin dac comutatorul este deschis (circuit deschis ntre colector i emitor) sau nchis (scurtcircuit ntre colector i emitor). O tensiune de peste 2V va determina tranzistorul s se comporte ca un comutator nchis, n timp ce o tensiune sub 0,8V va determina tranzistorul s se comporte ca un comutator deschis. Collector

Emitter 4

Figura 2.5. Tranzistorul

( c)

(a)

(b)

(c)

Figura 2.6. Implementarea porilor logice simple: a) poarta NOT; b) poarta NAND; c)poarta NOR innd cont de modul de funcionare al tranzistorului, este uor s implementm o poart NOT aa cum este prezentat n figura 2.6.a. Colectorul tranzistorului este legat la Vcc prin intermediul unui rezistor. n mod uzual, Vcc are valoarea de 5V. Presupunnd c 0V reprezint 0 logic i +5V reprezint 1 logic, putem observa c implementarea cu un singur tranzistor din figura 2.6.a. corespunde unei pori NOT. Atunci cnd Vin este joas, apare un circuit deschis ntre colector i emitor. De aici rezult c nu trece curent prin tranzistor. Astfel, Vout va avea valoarea de 5V. Pe de alt parte, atunci cnd Vin are o valoare mare, apare un scurtcircuit ntrse colector i emitor,ceea ce determin un nivel sczut de tensiune pentru Vout. 2.3. Funcii logice Funciile logice pot fi specificate ntr-o multitudine de moduri. O funcie logic poate fi specificat verbal. De exemplu, funcia majoritate poate fi enunat n modul urmtor: ieirea trebuie s fie 1 logic atunci cnd majoritatea intrrilor sunt 1 logic. n mod asemntor, funcia de paritate par poate fi enunat dup cum urmeaz: ieirea (bitul de paritate) este 1 logic atunci cnd avem un numr impar de 1 pe intrri. Principalele probleme ale enunrii verbale sunt imprecizia i ambiguitatea. Se poate face ca enunul s fie precis prin utilizarea tabelelor de adevr. Metoda tabelei de adevr presupune specificarea valorii ieirii pentru fiecare combinaie posibil a intrrilor. Metoda tabelei de adevr are sens pentru funciile logice deoarece alfabetul este alctuit doar din 0 i 1. n tabelul 2.2 sunt prezentate tabelele de adevr pentru funcia majoritate cu 3 intrri i funcia paritate par.

A 0 0 0 0 1 1 1 1

B 0 0 1 1 0 0 1 1

C 0 1 0 1 0 1 0 1

F1 0 0 0 1 0 1 1 1

A 0 0 0 0 1 1 1 1

B 0 0 1 1 0 0 1 1

C 0 1 0 1 0 1 0 1

F2 0 1 1 0 1 0 0 1 5

Funcuie majoritar

Funcie paritate par

Tabelul 2.2. Tabelele de adevr pentru funciile majoritate i paritate par Avantajul metodei tabelei de adevr l reprezint precizia. Principala problem o reprezint creterea exponenial a numrului de linii n raport cu numrul de variabile logice. Pentru a specifica o funcie logic se mai pot utiliza expresiile logice. Expresiile logice utilizeaz operatori logici. Expresiile logice pentru funciile majoritate cu 3 intrri i paritate par sunt prezentate n continuare: funcia majoritate cu 3 intrri = AB + BC + AC funcia paritate par cu 3 intrri = A'B'C + A'BC' + AB'C' + ABC. Aceast form de specificare are avantajul; c este compact i pstreaz precizia metodei tabelei de adevr. Un alt avantaj major l reprezint faptul c expresiile logice pot fi modificate astfel nct s se obin o proiectare eficient. Ultima form de specificare utilizeaz notaia grafic. Figura 2.7 prezint circuitul logic ce implementeaz funcia majoritate cu 3 intrri. Asemenea celorlalte dou metode, i aceasta este precis, dar este mai mult utilizat de inginerii hardwa re pentru a implementa funciile logice. Obinerea expresiilor logice Obinerea unei expresii logice pe baza unui circuit logic presupune urmrirea circuitului de la intrare spre ieire i scrierea expresiilor logice intermediare. Acest proces este ilustrat n figura 2.9. Ieirea porii OR cea mai de sus este (A + B). Observnd c intrrile porii OR din mijloc sunt A i B', vom scrie expresia logic pentru ieirea acestei pori ca fiind (A + B). Continund procesul, n final vom obine urmtoarea expres ie pentru funcia logic F3: F3 = (A+ B)(A + B')(A'+ B).

Figura 2.9. Obinerea expresiei logice din diagrama unui circuit Pentru a arta c acest circuit logic este echivalent cu o poart AND cu 2 intrri, trebuie s artm c expresia logic pentru F3 se reduce la AB. Stabilirea echivalenei logice Exist dou modaliti de stabilire a echivalenei logice a dou funcii. Prima metod este cea a tabelei de adevr. Cea de-a doua metod implic manipularea expresiilor logice prin aplicarea regulilor algebrei booleene. n continuare vom discuta despre metoda tabelei de adevr, urmnd ca metoda algebrei booleene s fie descris ri seciunea urmtoare. Metoda tabelei de adevr este simpl din punct de vedere conceptual, dar extrem de greoaie pentru expresiile logice care implic multe variabile logice. Principiul este de a 6

urmri toate combinaiile posibile pentru intrri i de a vedea dac cele dou funcii dau aceeai ieire. Dac da, atunci cele dou funcii sunt echivalente. n tabelul 2.3 este prezentat acest proces. Se observ cele dou coloane pentru ieiri, cte una pentru fiecare funcie. Din moment ce ieirile celor dou funcii sunt identice, putem concluziona c funciile F1 i F3 sunt echivalente. A 0 0 1 1 0 1 0 1 B F-i = AB 0 0 0 1 F3 = (A + B)(A' + B)(A + B*) 0 0 0 1

Tabelul 2.3. Tabela de adevr care demonstreaz c funciile i F3 sunt echivalente.

2.5. Proiectarea circuitelor logice Pentru a oferi o perspectiv corect asupra seciunilor urmtoare, vom urmri n figura 2.10 o versiune simplificat a procesului de proiectare a circuitelor digitale. Specificaiile de intrare pot fi date n limbaj normal. De exemplu, descrierea poate fi ceva gen: Proiectai un circuit care s implementeze funcia majoritate cu trei intrri" . Acest tip de descriere implic o multitudine de presupuneri, cum ar fi definiia funciei majoritate. Chiar i o funcie simpl, cum este majoritatea, poate fi definit n mai multe moduri. n prezentrile de pn acum am folosit o funcie majoritate simpl, fiecare intrare avnd aceeai importan. Dar putem defini i alte funcii majoritate. De exemplu, importana intrrilor poate fi diferit. De aceea urmtoarea etap este s crem o descriere precis a problemei din descrierea imprecis (posibil incomplet) dat mai sus. Dac vom proiecta un circuit logic combinaional, de exemplu, putem utiliza tabela de adevr pentru a defini n mod exact specificaiile problemei.

Figura 2.10. Un proces simplu de proiectare a unui circuit logic Cum vom obine circuitul logic final din tabela de adevr? Dup cum se poate observa n figura 2.10, mai sunt dou etape intermediare. Din tabela de adevr vom deriva o expresie logic. Expresia logic poate fi sub forma sum-de produse sau produs-desume, dup cum vom vedea n seciunile urmtoare. Nu vom implementa, totui, aceast expresie logic direct, deoarece este posibil ca aceasta s nu fie n forma minimal i s nu obinem o proiectare eficient. Va trebui s simplificm aceast expresie logic, pentru a minimiza costurile de implementare. Circuitul logic final l vom obine din expresia logic sirnplificat. De notat c, de multe ori, prin rninimizarea implementrii se nelege minimizarea numrului de pori logice utilizate. ntr-o anumit msur acest lucru este adevrat. Urmrim acest obiectiv n metodologiile de simplificare. Dar se poate, face observaia c atunci cnd implementm un circuit digital, mai rnult ne intereseaz numrul de circuite fizice (chips) necesar dect numrul de pori logice. Cei doi pai intermediari nu mai sunt necesari dac intenionm s implementm 7

circuitul logic utiliznd blocuri (de exemplu, n cazul multiplexoarelor). n acest caz, implementarea se face direct pe baza tabelei de adevr. 2.6. Obinerea expresiilor logice din tabelele de adevr Putem scrie o expresie logic dintr-o tabel de adevr n unul din dou moduri: sum de-produse (SOP) i produs-de-sume (POS). n forma sum-de-produse, specificm combinaia de intrri pentru care ieirea va fi 1. n forma prod us-de-sume, se specific combinaia de intrri pentru care ieirea este 0. Forma sum-de-produse n aceast form, fiecare combinaie de intrri pentru care ieirea ia valoarea 1 este exprimat sub forma unui termen AND. Acesta este termenul produs pe care l utilizm pentru a reprezenta operaia AND. ntre aceti termeni produs se aplic operaia OR. Deoarece utilizm semnul + pentru operaia . pentru operaia OR i semnul pentru operaia AND, aceast form se numete sum-de-produse. Pentru obinerea termenilor produsului se scrie variabila dac valoarea ei este 1 sau complementul acesteia dac valoarea este 0. Exemplul 2.1. S vedem funcia majoritate cu 3 intrri. Tabela de adevr este dat n tabelul 2.2. Se poate observa c ieirea ia valoarea 1 de patru ori. Deci expresia logic va avea patru termeni de tip produs. Primul termen de tip produs va fi cel pentru linia 4 din tabel. Deoarece A are valoarea 0, vom folosi complementul A'. B i C au valoarea 1, deci vor fi folosii ca atare. Termenul de tip produs pentru linia 4 din tabela de adevr va fi: A'BC. Pentru linia 6 avem: AB'C, pentru linia 7 avem: ABC, iar pentru linia 8 ABC. Aplicnd operatorul OR, obinem: Funcia majoritate cu 3 intrri = A'BC + AB'C + ABC + ABC. Exemplul 2.2. Din tabela de adevr a funciei paritate par dat n tabelul 2.2, obinem urmtoarea expresie: Funcia paritate par cu 3 intrri = A'B'C + A'BC + AB'C + ABC. Notaie: O notaie ce permite reprezentarea compact a expresiilor logice utilizeaz valorile zecimale ale combinaiilor intrrilor pentru care ieirea ia valoarea 1. De exemplu, primul termen din funcia majoritate este scris ca 3 (011). Pentru a indica faptul c este vorba de o expresie de tipul sum-de-produse, vom utiliza operatorul (sigma) ca n exemplul urmtor: Funcia majoritate cu 3 intrri = (3, 5, 6, 7). n mod asemntor putem scrie funcia'paritate par: Funcia paritate par cu 3 intrri = (1, 2, 4, 7). Forma produs-de-sume Este forma complementar a sumei-de-produse. n acest caz urmrim rndurile din tabela de adevr pe care ieirea are valoarea 0. Fiecare astfel de combinaie de intrri este reprezentat sub forma unui termen OR, n care apare variabila dac are valoarea 0 sau complementul acesteia daca are valoarea 1. Intre acesti termini obinui se aplic operaia AND i se obine expresia logica produs de sume: Functia majoritate cu 3 intrari = (A + B + C)(A + B + C')(A + B' + C)(A' + B + C). Fuctia paritate para cu 3 intrari = (A + B + C)(A + B' + C')(A' +B + C')(A' + B' +C). Notaie: Putem utiliza o notaie compact asemntoare celei folosite la notaia sum de-produse prin scrierea doar a acelor termeni pentru care ieirea ia val oarea 0. Vom folosi operatorul (pi) pentru a indica expresia produs-de-sume. Funcia majoritate cu 3 intrri = (0, 1, 2, 4). Funcia paritate par cu 3 intrri = (0, 3, 5, 6). Implementare folosind metoda forei brute (brute force) Expresiile logice sum-de-produse i produs-de-sume pot fi utilizate pentru a obine o 8

implementare rudimentar ce folosete doar pori AND, OR i NOT. Pentru nceput vom exemplifica procesul pentru expresiile sum-de-produse. Pentru fiecare intrare vom obine complementul utiliznd inversoare. Vom implementa fiecare termen de tip produs folosind o singur poart AND cu n intrri, unde n este numrul de variabile booleene. Apoi vom conecta ieirile porilor AND la intrrile unei singure pori jOR. Numrul intrrilor porii OR este egal cu numrul termenilor-produs din expresia logic. Ieirea porii logice OR reprezint funcia logic. Figura 2.11 prezint implementarea expresiei sum-de-produse pentru funcia paritate par folosind metoda forei brute.

Figura 2.11. Implementarea expresiei logice sum-de-produse pentru funcia paritate par cu 3 intrri folosind metoda forei brute In mod asemntor se pot implementa i expresiile produs -de-sume. n aceast implementare vom folosi pori logice OR pentru fiecare termen -sum i o singur poart AND pentru a obine ieirea final. Figura 2.12 prezint implemen tarea, expresiei produs-de-sume pentru funcia paritate par. Din moment ce ambele tipuri de expresii logice reprezint aceeai tabel de adevr, rezult c sunt echivalente; i cum circuitele logice prezentate n figurile 2.11 i 2.12 implementeaz cele dou expresii logice, deducem c cele dou circuite sunt de asemenea echivalente.

3. CIRCUITE LOGICE COMBINATIONALE 3.1 Introducere Pn acum s-a discutat doar despre implementare utiliznd porile logice simple. Una dintre caracteristicile cheie ale circuitelor proiectate n capitolul 2 este aceea c ieirea acestora este o funcie aplicat intrrilor. Astfel de dispozitive sunt numite circuite combinaionale deoarece ieirea poate fi exprimat ca o combinaie a intrrilor. Dei lucrul cu porile logice este mai uor dect lucrul cu tranzistorii, un nivel mai ridicat de abstractizare este necesar n proiectarea i implementarea sistemelor digitale complexe. Vom vedea n continuare cteva circuite combinaionale ce ne ofer un n ivel de abstractizare mai ridicat. Nivelele mai nalte de abstractizare: ne ajut n procesul de proiectare i implementare n mai multe moduri, dintre care cele mai importante ar fi: 1. Nivelele nalte de abstractizare Ine ajut n proiectare deoarece putem utiliza blocuri funcionale ce necesit mai multe pori logice pentru implementare. n aces t mod se reduce complexitatea. 2. Folosirea acestor dispozitive funcionale de nivel nalt reduce numrul de circuite integrate necesare implementrii unei funcii logice complexe.Cel de-al doilea punct este important din punct de vedere practic. Dac privim o plac debaz, putem observa c porile logice ocup un spaiu important pe placa de circuit imprimat(PCB). Chiar dac porile de baz au aprut n anii 70, nc le mai putem vedea pe PCB-uri, alturide procesoare complexe modeme. De fapt, ele ocup chiar mai mult spaiu. De aceea, reducereanumrului de circuite integrate este imbortant pentru obinerea unor sisteme compacte.Circuitele combinaionale ne ofer un mecanism de a crete gradul de integrare. De exemplu, spresupunem c avem nevoie de o poart NANDI cu 8 intrri.Putem utiliza un singur circuit integrat DIP cu 14 pini, i anume 7430. Dac am fi folosit pentru implementare pori NAND cu 2 intrri, decte c ircuite 7400 ar fi fost nevoie? Reducerea numrului circuitelor integrate folosite scade de asemenea i costurile de producie (mai puine circuite integrate de montat i lipit) i mrete fiabilitatea. n continuare vom vedea cteva exemple de circuite logice combinaionale. 3.2. Multiplexoare i demultiplexoare Un multiplexor (MUX) este caracterizat de intrri de date, n intrri de selecie i o singur ieire. Multiplexorul conecteaz una dintre cele intrri de date, selectat cu ajutorul intrrilor de selecie, la ieire. Tratnd intrrile de selecie ca numere binare, putem spune c intrarea de date li este conectat la ieire atunci cnd intrrile de selecie au valoarea i. Schema bloc a unui multiplexor cu 4 intrri este prezentat n figura3.1.

10

Si 0 0 1 1

So 0 1 0 1

0 Io Ii h h

Figura 3.1. Schema bloc i tabela de adevr pentru un multiplexor cu 4 intrari. n figura 3.2 este prezentat o implementare a unui multiplexor cu 4 intrri. Dac privim cu atenie, putem observa c se aseamn cu circuitul folosit pentru implementarea expresiei sum-de-produse prin metoda forei brute (figura 2.11). Aceast observaie vizual este important n descoperirea unei proprieti de baz a multiplexoarelor, i anume c sunt universale, adic putem implementa orice funcie logic utiliznd doar multiplexoare. Deci mai putem aduga o entitate listei de seturi complete prezentate n capitolul 2. Alt avantaj al implementrii funciilor logice cu ajutorul multiplexoarelor l reprezint faptul c nu mai trebuie s simplificm expresia logic, ci putem porni implementarea direct de la tabela de adevr, folosind multiplexoarele ca elemente de baz.

Figura 3.2. Implementarea cu pori logice a unui multiplexor cu 4 intrri. Cum se poate implementa o tabel de adevr folosind multiplexoare? Simplu. Se 11

conecteaz variabilele logice din expresia logic pe post de intrri de selecie i ieirile funciei ca intrri de date. Pentru a urmri acest tip de implementare, avem nevoie de un multiplexor cu intrri de date i b intrri de selecie pentru a implementa o expresie logic cu b variabile, n figura 3.3 se prezint implementarea funciilor majoritate cu 3 intrri i paritate par cu 3 intrri utiliznd un multiplexor cu 8 intrri. Din acest exemplu se poate observa c datele de intrare sunt o copie a coloanei ieirilor din tabela de adevr corespunztoare. Trebuie avut grij doar la conectarea variabilelor logice: cea mai semnificativ variabil din tabela de adevr se conecteaz la intrarea de selecie cea mai prioritar, dup cum se poate observa n figura 3.3

Functia majoritate

Functia paritate para

Figura 3.3. Dou implementri utiliznd multiplexoare cu 8 intrri. Proiectare eficient cu multiplexoare Implementrile descrise n seciunea anterioar pot fi mbuntite. Astfel, se poate implementa o expresie logic cu b variabile folosind ujn multiplexor cu intrri de date. Pentru anumite funcii s-ar putea s fie necesar s utilizm un inversor suplimentar. Ideea de baz este scoaterea din tabela de adevr a unei variabile logice (X de exemplu). Variabila X sau complementul ei pot fi necesare ca intrri de date n multiplexor (deci avem nevoie de inversor pentru a obine X'). Setul de date de intrare al multiplexorului va fi {0, 1, X, X'}. Chiar dac poate fi eliminat orice variabil din expresia logic, cel mai convenabil ieste s o scoatem pe cea rpardin dreapta (dup poziia din tabela de adevr). Reducerea pentru funcia majoritate este prezentat n figura 3.4. n partea stng se observ tabela de adevr original, cu 3 variabile. Am eliminat variabila C din aceast tabel de adevr pentru a obine noua tabel de adevr cu 2 variabile, A i B. Pentru a obine noua tabel de adevr, grupm cte 2 rnduri n care valorile variabilelor A i B 12

sunt identice. Apoi ne uitm la valorile ieirii i dac sunt identice (ambele 0 sau 1), valoarea ieirii din noua tabel de adevr va fi egal cu valoarea ieirii din vech ea tabel. Dac valorile ieirii din tabela original difer ntre ele, trebuie gsit relaia ntre acestea i variabila C. Valoarea ieirii din noua tabel va putea fi n cazul acesta C sau C De exemplu, atunci cnd A = 0 i B = 0, ieirea este 0 indifer ent de valoarea lui C. Deci valoarea ieirii n noua tabel de adevr va fi 0. Pe de alt parte, atunci cnd A = 0 i B = 1, ieirea este egal cu C. Deci valoarea ielirii n noua tabel de adevr va fi C. Dup ce obinem noua tabel de adevr redus, imp lementarea se face simplu, ca n figura 3.4.

Figura 3.4. Reducerea tabelei de adevr i implementarea funciei majoritate. Reducerea tabelei de adevr pentru funcia paritate par este prezentat n figura 3.5. Implementarea funciei necesit un inversor pentru obinerea lui C (inversorul nu apare n figur).

Figura 3.5. Reducerea tabelei de adevr i implementarea funciei paritate par .

Demultiplexoare Demultiplexoarele (DEMUX) au o funcionare opus multiplexoarelor. La fel ca i la multiplexoare, un demultiplexor are n intrri de selecie. Deosebirea const n inversa rea rolului intrrii i ieirilor de date. Un demultiplexor cu n intrri de selecie are ieiri de 13

date i o singur intrare de date. n funcie de valoarea de pe intrrile de selecie, intrarea de date este conectat la ieirea de date corespunztoare. Schema bloc i implementarea cu pori logice a unui demultiplexor cu 4 ieiri sunt prezentate n figura 3.6.

Figura 3.6. Schema bloc i implementarea unui demultiplexor cu 4 ieiri. 3.3 Decodificatoare i codificatoare. Decodificatorul este un alt bloc de baz util n selectarea unei linii din N. Intrarea decodificatorului este un numr (codificat) binar pe bii, iar ieirea este reprezentat pe linii decodificate. n figura 3.7 este prezentat un decodificator cu 2 intrri i 4 ieiri i implementarea logic. Dintre cele ieiri ale unui decodificator, doar una singur este 1 la un moment dat, dup cum se poate vedea din tabela de adevr din figura 3.7.

Figura 3.7. Schema bloc i implementarea decodificatorului Decodificatoarele pot fi folosite i n implementarea funciilor logice. Folosind un singur decodificator i un set de pori OR putem implementa orice funcie logic. Ideea de baz este c fiecare ieire a decodificatorului trebuie privit ca un termen produs. Deci, dac facem OR ntre acei termeni produs pentru care ieirea funciei logice este 1, 14

implementm expresia sum-de-produse pentru funcia logic respectiv. n figura 3.8 este prezentat implementarea a dou funcii logice cu ajutorul combinaiei decodificator - pori logice OR.

Figure 3.8 Implementarea funciilor logic utiliznd decodificator i pori OR Codificatoare Codificatoarele realizeaz operaia invers decodificatoarelor. Codificatoarele au 2B linii de intrare i genereaz un numr binar pe 6 bii pe cele B linii de ieire. Tabela de adevr a unui codificator este similar tabelei de adevr a unui decodificator cu intrrile i ieirile interschimbate. Ieirea unui codificator este valid att timp ct cel pu in una dintre intrri este logic 1. Codificatoarele trebuie s arate dac ieirea este valid sau nu. Acest lucru se realizeaz n general prin intermediul unei ieiri de control suplimentare, dup cum se poate observa din figura 3.9. Tot din aceast figur se poate'observa cum se poate insera o intrare de activare. Ieirea va fi valid doar cnd intrarea de activare este 1 logic. Se mai poate observa c ieirea este 00 atunci cand intrrile iau valorile 0000.sau 0001. Pentru a face distincia ntre cele fi 1 logic ori de cate ori cel puin o intrare di dou cazuri, putem folosi semnalul de activare, care va cele patru este 1 logic.

Figura 3.9. Codificator cu 4 intrri i 2 ieiri Circuitul logic din figura 3.9 funcioneaz n cazul n care nu avem nici o intrare activ sau avem cel puin o intrare pe 1 logic. n schimb nu sesizeaz dac sunt setate dou sau mai multe intrri simultan. De exemplu, dac intrrile au valoarea I3I2I1I0 = 0110, ieirea codificatorului va fi 11, ceea ce este eronat. O solu ie de rezolvare a acestei probleme ar fi asignarea de prioriti intrrilor, iar dac sunt active mai multe intrri simultan, va fi codificat cea cu prioritatea cea mai mare. n general, priorit ile sunt alocate astfel nci l0 are prioritatea cea mai mic, iar l3 cea mai mare. n exemplul nostru, cu I3I2I1I0 = 0110, ieirea Codificatorului ar trebui s fie 10 din moment ce l2 este intrarea pe 1 logic cu prioritatea cea mai rriare. Astfel de codificatoare se numesc 15

codificatoare cu prioriti. n figura 3.10 este prezentat un astfel de codificator.

Figura 3.10. Codificator cu prioriti Comparatoare Comparatoarele sunt utilizate pentru implernentarea operaiilor relaionale de genul =, <, >, .a. De exemplu, putem utiliza pori XOR pentru a determina dac dou numere sunt egale sau nu. n figura 3.11 este prezentat un comparator pe 4 bii a crui ieire este 1 logic dac cele 2 numere de intrare pe 4 bii A = A3A2A1A0 i B = B3B2B1B0 sunt identice.

3.5 Sumatoare Vom vedea in continuare circuite sumatoare care ne permit sa efectuam operatii aritmetice simple. Cel mai simplu sumator aduna 2 biti si scoate la iesire suma si transportul, dupa cum se poate vedea in figura 3.12a. Din tabela de adevar se poate observa ca transportul poate fi generat cu ajutorul unei sungure porti AND, iar suma poate fi obtinuta cu o singura poarta XOR.

16

Figura 3.12. Tabela de adevr i implementarea pentru sumatorul simplu i pentru sumatorul complet Problema sumatoarelor simple este c nu pot fi utilizate pentru realizarea sumatoarelor care s realizeze adunri pe mai mult de 2 bii. Dac dorim s utilizm sumatorul simplu de 1 bit pentru a construi sumatoare mai mari, care! sjpltf aduna numere pe N bii, vom avea nevoie de sumatoare care s aib ca intrri cei doi bii, precum i un posibil bit de transport generat de nivelul anterior. Astfel de sumator este cel complet pe un bit, care are trei intrri de 1 bit i dou ieiri de 1 bit i este prezentat n figura 3.12.b.

Figura 3.13. Sumator cu transport propagat realizat cu sumatoare complete pe 1 bit. Folosind sumatoare complete putem construi sumatoare care s adune dou numere pe N bii. Un exemplu de sumator pe 16 bii este prezentat n figura 3.13. Astfel de sumatoare se mai numesc i sumatoare cu transport propagat deoarece transportul se propag de la poziia 1 la poziia 15. S presupunem c sumatoru! cu transport propagat este construit cu sumatoare complete de 1 bit. Dac presupunem c o poart are o ntrziere de 5 ns, fiecare sumator complet de 1 bit are nevoie de 3 x 5 = 15 ns pentru a obine transportul Cout. Deci sumatorul cu transport propagat pe 16 bii prezentat n figura 3 13 are nevoie de 16 x 15 = 240 ns pentru a obine rezultatul. Dac dorim s folosim acest sumator ntr-un sistem, acesta nu poate funciona la viteze mai mari de 1/240 ns = 4 MHz, fiecare adunare necesitnd un ciclu de ceas. Cum putem mri viteza sumatoarlor multibit? Dac analizm motivul vitezei reduse a sumatoarelor cu transport propagat, observm c propagarea transportului provoac ntrzierea n obinerea rezultatului final. Dac dorim;s inbuntim performanele, 17

trebuie s eliminm aceast dependen i s determinm transportul de intrare independent pentru fiecare poziie de bit. Astfel de sumatoare se numesc sumatoare cu transport anticipat. Principala problem a acestor sumatoare este c sunt foarte complexe pentru cuvinte lungi. Pentru a vedea acest lucru i pentru a observa cum fiecare sumator complet i poate genera propriul transport de intrare, s ne uitm la expresiile logice care trebuie implementate pentru generarea transportului de intrare. Transportul de ieire pentru poziia cea mai din dreapta C0 se obine astfel:

Utiliznd acest procedeu putem genera n mod independent transporturile de intrare necesare.Expresia logic pentru C este o sum-de-produse ce conine doar Ak i Bk, ik0. Deci apar doar ntrzieri generate de pori, din moment ce fiecare termenpoate fi implementat cu o singur indiferent de lungimea cuvintelor adunate. Complexitatea implementrii unui astfel de circuit face impracticabil pentru cuvinte mai jmari de 8 bii. n general, transportul anticipat este implerjientat la 4 sau 8 nivele. Putem aplica metoda transportului propagat pentru a obine sumatoare cu lungimi de cuvnt mai mari folosind sumatoare cu transport anticipat pe 4 sau 8 bii. 4. Circuite logice secveniale 4.1. Introducere n ultimele dou capitole am discutat despre circuitele combinaionale. Caracteristica definitorie a circuitelor combinaionale este aceea c ieirea depinde doar de valoarea curent a intrrilor. Ieirea circuitelor secveniale, pe de alt parte, depinde att de valorile curent; ct i de valorile anterioare ale intrrilor. Aceast dependen de valorile anterioare ale intrrilor definete proprietatea de memorie a circuitelor secveniale. n general, secvena valorilor anterioare ale intrrilor este codificat ntr-un set de variabile de stare. Exist o cale de feedback care aduce variabilele de stare la intrrile circuitului combinational, dup cum se poate observa n figura 4.1. Uneori, feedbackul const ntr-o simpl legtur ntre unele ieiri i intrrile circuitului combinational. Cel mai des, ns, circuitul de feedback const n elemente cum ar fi bistabilele. Aceste elemente sunt ele nsele circuite secveniale care pot memora sau stoca informaia de stare. Odat cu introducerea feedbackuiui se introduce i o potenial instabilitate n sistem. Drept exemplu s considerm circuitul din figura 4.2.a. Acest circuit este stabil n sensul c ieirea fiecrui inversor poate sta la un anumit nivel. n schimb circuitul este nedeterminant, deoarece nu putem spune care este nivelul exact ai ieirilor inversoarelor, acesta putnd fi 0 i 1 sau 0 i 1. n schimb se poate verifica faptul c circuitul din figura 4.2.b este instabil.

18

Fig. 4.2 Circuite stabile i instabile. Am vzut pn acum cteva metode de proiectare a circuitelor combinaionale. Pasul cel mai important n proiectarea circuitelor'combinaionale l reprezint simplificarea expresiilor logice. Pentru circuitele secveniale, procesul de proiectare nu e att de simplu datorit dependenei de intrrile anterioare. Acest lucru necesit dezvoltarea unei baze teoretice pentru proiectarea circuitelor secveniale arbitrare. Spre sfritul capitolului vom vedea o metod care ne prezint procesul proiectrii circuite lor secveniale. Totui, nainte de a vedea aceast metod, s studiem cteva circuite secveniale simple, cumjarfj latchurile i bistabilele. 4.2. Semnalul de ceas Circuitele digitale pot opera asincron au sincron. Circuitele ce opereaz asincron sunt independente unele de altele. Asta nseamn c momentul producerii unei schimbri ntr-un circuit nu are nici o legtur cu momentul producerii unei schimbri n alt circuit. Modul de operare asincron poate crea probleme serioase ntr-un sistem digital tipic n care ieirea unui circuit este legat1 la intrrile altor circuite. n mod asemntor, un circuit poate avea ca intrri ieirile mai multor circuite. Modul de operare asincron jimplic faptul c se poate ca nu toate intrrile circuitului s fie valide simultan. Pentru a se evita astfel de problem, circuitele sunt utilizate n modul sincron. n acest 19

mod, toate circuitele din sistem i schimb starea la momente de timp bine definite. ntr un sistem digital, semnalul de ceas definete momentele de ti mp cnd pot avea loc schimbrile de stare. Implicit, acesta definete i viteza la care circuitul poate opera. Un semnal de ceas este o secven de 1 i 0, aa cum se poate observa din figura 4.3. Chiar dac n general folosim semnale de ceas simetrice, ca n figura 4.3.a, se pot utiliza i semnale de ceas asimetrice, ca n figurile 4.3b i c. Marginea semnalului de ceas de la 1 la 0 se numete front cresctor sau poyitiv. Analog putem defini frontal cztor sau negative, ca in figura 4.3. Un ciclu de ceas ester definit ca timpul dintre dour,fronturi cresctoare successive sau dintre dour fronturi cztoare successive.

Figura 4.3. Trei tipuri de semnale de ceas cu aceeai perioad Frecvena este msurat n numr de cicli pe secund (Hertz). Abrevierea MHz se refer la milioane de ciclii pe secund. Perioada ceasului este definit ca timpul reprezentat de un ciclu de ceas. Toate cele trei semnale de ceas din figura 4.3 au aceeai perioad de ceas. Perioada de ceas = 1 / frecvena ceasului. De exemplu, un ceas cu frecvena de 100MHz are o perioad de ceas de 1 / (100 x 10s) = 10 ns. Semnalul de ceas are dou funcii distincte ntr-un circuit digital. Este semnalul global de sincronizare pentru ntregul sistem. Fiecare ciclu de ceas are trei zone distincte: nceputul ciclului de ceas, sfritul ciclului de ceas i un punct intermediar unde se schimb nivelele. Acest punct intermediar se gsete n mijlocul ciclului de ceas pentru semnalele de ceas simetrice. Cel de-al doilea scop al semnalului de ceas este de a oferi informaii de temporizare sub forma perioadei de ceas (de exemplu, ct timp dureaz efectuarea unei operaii ca AND logic). ntrzierea de propagare reprezint timpul necesar ca semnalul s ajung de la intrare la ieire. O poart logic gen poarta AND are o ntrziere de propagare de aproximativ 10 ns. Pentru a vedea cum ntrzierea afecteaz semnalul, s privim circuitul di n figura 4.4.a. Presupunnd c T = 10 ns, semnalul de intrare este inversat i ntrziat la intrarea X a porii AND. Atunci cnd facemoperaia logic AND ntre cele dou semnale, obinem un semnal al crui nivel 1" are durata T. Presupunnd c i poarta AND are o 20

ntrziere de propagare T, semnalul apare la ieirea porii AND cu o ntrziere T, dup cum se poate observa din figura 4.4.

Figura 4.4. Efectul ntrzierii de propagare asupra ieirii circuitului. Aceast discuie ar putea induce prerea c ntrzierea de propagare determin frecvena maxim de lucru a circuitului. O privire atent asupra definiiei ntrzie rii de propagare ne convinge c acest lucru nu este adevrat. Caracteristica ce limiteaz frecvena de lucru este timpul staionar de intrare. Acesta se refer la timpul minim ct semnalul trebuie s aib aceeai valoare la intrare pentru ca circuitul s funcioneze corect. Pentru porile logice simple, acest timp este aproximativ egal cu ntrzierea de propagare. Asta nseamn c intrarea trebuie meninut pe durata propagrii. Din acest motiv ntrzierea de propagare pare a determina frecvena maxim de lucru a porii. | Pentru circuitele secveniale care necesit un semnal de ceas, se specific i durata minim pentru! nivelele 1" i 0". Aceste perioade se mai numesc i perioade HIGH i LOW. 4.3. Latchuri Este momentul s vedem nite circuite secveniale simple care pot memora valoarea unui bit. Latchurile sunt dispozitive sensibile la nivel, adic reacioneaz la nivelul semnalului de intrare (high -1 sau low - 0). n contrast, bistabilele reacioneaz la front, adic ieirea se modific doar pe frontul cresctor sau cztor al semnalului. Latchuri SR Latchul SR este cel mai simplu circuit secvenial despre care vom discuta. Pentru implementarea lui suijit suficiente doar dou pori NOR. Feedback-ul acestui latch este obinut printr-o simpl legtur ntre ieirea unei pori NOR i intrarea celeilalte, dup 21

cum se poate vedea n figura 4.5.a. Simbolul logic pentru latchul SR este prezentat n figura 4.5.b. n figura 4.5.c este dat o tabel de adevr simplificat pentru latchul SR. Ieirile celor dou pori NOR sunt numite Q i Q' deoarece n modul normal de funcionare cele dou ieiri ar trebui s fie complementare. Vom utiliza notaia Qn pentru valoarea curent (adic starea! curent) i notaia Qn+i pentru valoarea urmtoare (adic starea1 urmtoare).

(a) Diagrama circuitului

Simbol logic

Tabel de adevar

Figura 4.5. Implementarea unui latch SR cu pori NOR S analizm tabela de adevr. Atunci cnd S = 0 i R = 1, putem observa c indiferent de starea curent, ieirea Q este forat pe 0, iar de aici rezult c ieirea Q' va fi 1. Aceast stare este una stabil, adic Q va rmne 0 logic, iar Q' va rmne 1 logic. Se poate verifica faptul c atunci cnd S = 1 i R = 0, se obine alta stare stabil, cu Q = 1 i Q' = 0. Atunci cnd ambele intrri S R sunt 0, valoarea urmtoare a ieirii depinde de starea curent. S presupunem c ieirea curent este Q = 1 i Q' = 0. Atunci cnd intrrile se schimb din S = 1 i R = 0 n S = R = 0, starea urmtoare Qn+i rmne aceeai cu starea curent Qn. S presupunem acum c starea curent este Q = 0 i Q' = 1. Se poate observa uor c trecerea intrrilor din S = 0 i R = 1 n S = R = 0 las ieirea neschimbat. Acest fapt apare pe prima linie a tabelei de adevr din figura 4.5.c. Ce se ntmpl atunci cnd ambele intrri sunt 1? Att timp cat intrrile sunt inute sus, ambele ieiri sunt forate pe 0 logic. Vom tia aceast linie din tabela de adevr pentru a arta c aceast combinaie a intrrilor nu este dorit. Pentru a vedea de ce am tiat intrarea din tabel, s vedem ce se ntmpl cnd valorile intrrilor se schimb din S=R=1 n S = R = 0. Doar n teorie puterri presupune c valorile intrrilor se schimb simultan. n practic exist ntotdeauna o diferen finit de timp ntre schimbrile celor dou intrri. Dac S trece n 0 naintea lui R, secvena schimbrii intrrilor va fi SR=110100. Datorit strii intermediare SR = 01, ieirea va fi Q = 0 i Q' = 1. Pe de alt parte, dac R trece n 0 naintea lui S, secvena schimbrii intrrilor va fi SR=111000. Datorit strii intermediare SR = 10, ieirea va fi Q = 1 i Q' = 0. Astfel, la schimbarea intrrilor din 11 n 00, starea ieirii este nedeterminat. Din acest motiv se dorete eliminarea acestei stri. Denumirile S i R provin de la Set i Reset. Atunci cnd intrarea S este pe 1 logic (i R este pe 0), ieirea Q este setat (Q = 1). Dac S este 0 i R este 1, ieirea Q este resetat (Q = 0). Din aceast prezentare rezult c acest latch este dependent de nivel. Ieirea rspunde schimbrii nivelelor intrrilor. Acest luciii este valabil pentru toate latchurile. Putem observa c acest latch simplu are capacitatea de a memora un bit. Pentru a scrie 1 n acest latch, SR trebuie s fie 10; pentru a scrie 0 trebuie ca SR s fie 01. Pentru a reine valoarba unui bit, ambele intrri trebuie s fie pe 0. n concluzie, avem posibilitatea 22

s scriem un 0 sau un 1 i s-l reinem atta timp ct circuitul este alimentat. Aceasta este celula de baz pe careo utilizeaz memoria RAM ststic. O dat ce avem proiectul memoriei de 1 bit, putem multiplica acest circuit pentru a memora date mai largi sau cuvinte multiple. Latchuri SR sincrone O problem a latchurilor SR este aceea c ieirea urmrete schimbrile intrrilor. Dac dorim ca ieirea s rspund schimbrilor intrrilor la intervale de timp specificate pentru a putea sincroniza latchul cu restul sistemului, trebuie s modificm circuitul ca n figura 4.6.a. Schimbarea major o reprezint intrarea de ceas care activeaz intrrile S i R. Acestea sunt transmise circuitului vzut anterior doar dac semnalul de ceas es'te pe 1 logic. Intrrile nu au nici un efect asupra ieirii atunci cnd semnalul de ceas este pe 0. Atunci cnd ceasul este 1 logic, circuitul implementeaz tabela de adevr din figura 4.5.c

Figure 4.6. Latch SR sincronizat i aceste latchuri sunt active pe nivel. Atta timp ct semnalul de ceas este 1, ieirea depinde de intrrile S i R. Latchuri D O problem a ambelor tipuri de latchuri SR o reprezint evitarea combinaiei intrrilor SR = 11. Aceast problem este rezolvat de latchul D prezentat n figura 4.7.a. Folosim un singur inversor pentru a avea valori complementare pe intrrile S i R ale latchului SR sincronizat. Pentru reinerea valorii, intrarea de ceas trebuie meninut pe 0 logic. i latchul D memoreaz un singur bit.

Figura 4.7. Latchul D folosete un inversor pentru a evita combinaia SR= 11. 23

4.4 Bistabile Bistabilele sunt active pe front, spre deosebire de latchuri, care sunt active pe nivel. n continuare vom vedea dou tipuri de bistabile i anume bistabile D i JK. Bistabile D Vom vedea cum putem transforma un latch D activ pe nivel ntr-un bistabil D activ pe front. Putem folosi cteva indicii din figura 4.4, unde vedem c ieirea circuitului este un mic impuls, egal cu timpul de propagare al inversorului (10 ns), pe frontul cresctor al semnalului de ceas. De aceea, dac folosim acest semnal n locul ceasului de intrare, vom converti latchul D ntr-un bistabil D activ pe frontul cresctor (sau pozitiv).

Figura 4.8. Bistabil D activ pefrontulcresctor

Figura 4.9. Simbolurile logice pentru latchuri i bistabile: a) latch activ pe nivelul pozitiv; b) latch activ pe nivelul 0; c) bistabil activ pe front cresctor; d) bistabil activ pe front cztor. Bistabile JK Putem proiecta un bistabil activ pe front folosind structura master-slave prezentat n figura 4.10.a. Acest circuit conine dou latchuri SR. Latchul SR mater este activat pe nivelul pozitiv al ceasului, iar ieirea lui va fi activat pe nivelul n egativ al ceasului. Circuitul din figura 4.10.a este un bistabil activ pe front negativ. n figura 4.10.b este prezentat notaia simbolic a bistabilului. Legturile de feedback de la ieirea latchului SR slave la porile AND de la intrrile JK transform latchul SR ntr-un latch JK pentru a evita nedeterminarea asociat cu combinaia de intrare 11 pentru latchul SR. Pentru a ilustra modul de funcionare al acestui bistabil, n figura 4.10 .C sunt prezentate diagramele de timp ce acoper toate cele ase posibiliti: JK = 01, 10 i JK = 11 cu Qn = 0 i 1, i JK = 00 cu Qn = 0 i 1. Nu au mai fost incluse n diagram i 24

semnalele Q' i Qm' deoarece sunt complementare cu semnalele Q i Qm. Putem observa de pe diagram c ieirea se modific doar pe frontul ne gativ al semnalului de ceas. Se poate verifica faptul c modificarea intrrilor J i K n alte momente de timp nu afecteaz ieirea.

Figura 4.10. Bistabil JK master -slave Tabela de adevr pentru bistabilul JK este prezentat n tabelul 4.1. Spre deosebire de latchu SR, bistabilul JK accept toate cele patru combinaii de intrare. Atunci cnd JK = 11, ieirea se complementeaz. Aceast caracteristic este folosit la construirea numrtoarelor, dup cum vom vedea n seciunea urmtoare.

25

Pentru o operare corespunztoare, semnalele de intrare JK trebuie aplicate cu cel puin ts uniti de timp naintea frontului cztor al semnalului de ceas. Timpul ts este numit timp de start. O valoare tipic de timp pentru ts este de 20 ns. 4.5. Exemple de circuite secveniale Registre de deplasare Registrele de deplasare, dup cum le s|punj3 i numele, deplaseaz datele la dreapta sau la stnga cu o poziie pe fiecare ciclu de ceas. IProiectarea unui registru de deplasare este relativ simpl, dup cum se poate vedea din figura 4.11.

Figura 4.11. Registru de deplasare pe 4 bii realizat cu bistabile JK Acest registru de deplasare, realizat cu bistabile JK active pe front pozitiv, deplaseaz datele ctre dreapta. Pentru primul bistabil JK avem nevoie de un inve rsor astfel nct pe intrarea K s se regseasc complementul datelor ce intr (intrare serial). Datele de la ieirea Q a celui mai din dreapta bistabil JK sunt o copie a datelor de intrare seriale ntrziate cu 4 cicli de ceas. Aceasta este una din utilizrile registrelor de deplasare. Mai putem utiliza registrele de deplasare pentru conversie serial-paralel. De exemplu, un semnal serial, folosit ca intrare pentru registrul de deplasare din figura 4.11., va produce o ieire paralel pe 4 bii (luat de la cele 4 ieiri Q a celor 4 bistabile JK). Chiar dac nu am prezentat aici, putem proiecta registre de deplasare care accept ca intrare semnale paralele i seriale. Registrele de deplasare mai sunt utilizate n implementarea operaiilor logice de deplasare pe bit n unitile aritmetico-logice. Numrtoare Numrtoarele sunt un alt exemplu de circuite secveniale larg utilizate. Pentru a vedea cum este construit un numrtor, s considerm cel mai simplu numrtor: numrtorul binar. Un numrtor binar cu B bii poate numra de la 0 la 2B - 1. De exemplu, un numrtor binar cu B = 3 poate numra de la 0 la 7. Dup ce a ajuns la valoarea 7, numrtorul va trece la pasul urmtor la 0. Un astfel de numrtor este numrtor modulo 8. tim c un numrtor modulo 8 necesit 3 bii pentru a reprezenta valoarea numrat. n general un numrtor modulo 2B necesit B bii: Numrtorul modulo 8 este reprezentat n figura 4.12. Putem utiliza bistabilele JK n modul complementare cu JK = 11. Ieirea Q a unui 26

bistabil este legat la intrarea de ceas a urmtorului bistabil. Semnalul de ceas de intrare, care guverneaz funcionarea ntregului numrtor, este aplicat bistabilului 0. Cnd scriem ieirea numrtorului Q2Q1Q0, valoarea reprezint numrul de fronturi negative ale semnalului de ceas. De exemplu, linia punctat din figura 4.12.b reprezint Q2Q1Q0 = 011. Acest numr este numrul de fronturi negative de ceas de la stnga liniei punctate.

Figura 4.12. Numrtor binar:implementat cu bistabile JK active pe fron t negativ

27

6. Microprocesorul 6.1. Structura de baz a unui microprocesor Microprocesoarele nu sunt altceva, dect unitati centrale de calcul ( CPU Central Processing Unit), incorporate ntr-o capsul de circuit integrat. Ele vor citi instruciunile unui program dintr-un bloc de memorie, le vor decodifica i vor executa comenzile formulate n nsui codul instruciunii.

Vom ncerca s umplem treptat blocul funcional gol din figura 6.1 cu elemente strict necesare pentru funcionarea unei unilji cent rale, constituind pe parcursul prezentului paragraf o posibil structur de microprocesor. Pentru a citi din blocul de memoriei extern codul instruciunii ce urmeaz a fi executat, microprocesorul va trebui s genereze o adres pe care o va pune la dispoziia memoriei, pn cnd n celula selectat pe baza acesftei adrese va apare data cerut. Pentru a putea "menine" starea1 liniilor de adres pe durata ntregii operaii de citire, microprocesorul va trebui s posede un element memorator intermediar, pe care-l vom numi registru tampon de adrese AB (Address Buffer). Informaia codificat, citit dini memorie o vom depune temporar, de asemenea ntr -un registru intermediar. Fie numele acestuia registru tampon de date DB (Data Buffer). Liniile electrice pe care se va genera cuvntul binar de adres le vom numi magistral de adrese ABUS (Address BUS), iar pe cele dedicate datelor citite/scrise din/n memorie, magistral de date DBUS (Data BUS). Completnd modelul initial vid cu aceste elemente, obinem structura din figura 6.2 .

28

S presupunem c instruciunea recent citit i depus temporar n registrul de date are urmtoarea semnificaie: "Citete coninutul celulei de memorie a crei adres este cu 3 mai mare adresa curent (cea din AB), adaug la aceast valoare 5 i rescrie rezultatul n aceeai celul de memorie." Pentru a efectua aceast instruciune microprocesorul are nevoie de o unitate aritmetic; cu ajutorul acesteia se va putea calcula o noua adres dememorie i se va putea efectua adunarea cerut. : Dup cum am amintit deja, n aritmetica binar operaiile aritmetice pot descrise cu ajutorul unor funcii logice. Este normal ca aceste circuite s fie utilizate i pentru efectuarea unor operaii logice ;propiu-zise. De aici rezult i numele utilizat: unitatea aritmetico-logic ALU (Arithmetic Logic Unit). Pentru a putea executa cele formulate n enunul comenzii, microprocesorul va trebui s fie dotat i cu o unitatea de comand. E este aceea care va diseca problema, "sprgnd -o" n pai elementari i va programa execuia secvenial n timp a tuturor manevrelor necesare pentru a duce la bun sfrit misiunea ce i-a fost ncredinat: genereaz semnalele de comand pentru ntregul sistem, dirijeaz fluxul de date, coreleaz viteza de lucru a unitii centrale cu timpul de acces |al memoriei etc. Unitatea de comand poart diverse nume: CCU - Computer Control Unit, TCU -jTimming and Control Unit, Sq SeQuencer sau CC - Command Circuit. Noi vom alege ultimul nume. Activitatea unitii de comand este pilotat de un semnal de ceas, avand frecventa de ordinal MHz (1MHz = 106Hz).. Semnalele electrice prin care micro procesorul va da comenzi de execuie ctre memorie i celelalte componente din sistem, le vom numi semnale de comand. Semnalele prin care el culege informaii privind starea diverseor componente din sistem, le vom numi semnale de stare. Introducnd elementele nou definite n mocelul considerat, obinem structura din figura 6.3.

29

S continum construcia. Dac urmtoarea instruciune va folosi rezultatul instruciunii precedente pentru a efectua o nou operaie aritmetic, atunci valoarea calculat n prealabil trebuie citit din nou din memorie. Acest acces suplimentar la memorie poate fi economisit, dac n interiorul microprocesorului vom prevedes cteva elemente de memorare n care s se poat nmagazina temporar date sau adrese de memorie. Aceste elemente de memorie ale microprocesorului le vom numi regitri. Unii dintre aceti regitri vor fi folosii n scopuri dedicate, cum ar fi urmrirea execuiei secveniale a instruciunilor din memorie. Registru tampon de adrese (AB) n|u poate fi folosit n acest scop, fijndc aa cum s-a vzut n exemplele prezentate, coninutul lui va trebui s se modifice, eventual de meii multe ori pe parcursul execuiei unei instruciuni (cazul n care instruciunea n curs trebuie s efectueze accese la memorie, pentru a citi sau a scrie date n ea). Este deci nevoie de un registru n care s se poat genera i pstra nealterat adresa de memorie a urmtoarei instruciuni de executat. Folosind acest registru, microprocesorul va putea continua dup terminarea instruciunii n purs - execuia secvenei de instruciuni prevzute, care astfel se constituie ntr-un program. Numele acestui registru special este contor de program PC (Program Counter). Intr-un alt registru special vom outea pstra informaii referitoare la natura rezultatului unei operai aritmetice: numr negativ sau pozitiv (eventual egal cu zero), numr par sau impar etc. n acest registru, fiecrui atribut considerat i se rezerv un bit. Vom numi aceti bii, bii de condiie, iar registrul l vom numi registru! indicatorilor de condiie F (Flag - stegule, fanion). Avem nevoie de acest Registru pentru a putea defini instruciuni de salt condiionat. S ne imaginm urmtoarea instruciune: "Dac rezultatul operaiei precjedente este un numr negativ, atunci continu execuia programului cu instruciunea locat la adresa urmtoare (valoarea actual a contorului de program, PC); dac numrul este pozitiv, continu execuia la adresa egal cu valoarea coninut n primul registru de uz general". Aceast instruciune va verifica valoarea "indicatorului de semn" i va ramifica execuia programului n funcie de valoarea acestui bit. S introducem i regitri n scherria bloc din figura 6.3. Cu aceasta putem considera ncheiat definirea principalelor structuri funcionale ale microprocesorului. Pentru efectuarea transferurilor interne de date, microprocesorul va fi prevzut i cu o magistral intern de date, magistral a parei "lime" (numr de linii distincte) depinde de tipul microprocesorului n cauz. Privind din exterior, la terminalele microprocesorului regsim semnalele sale de 30

comunicaie cu sistemul constituit n jurul lui: magistrala de adrese, magistrala de date i magistrala de comenzi. La magistralele de date i cofnenzi pot fi cuplate circuite de intrare/ieire (l/O) care stabilesc legtura cu lumea extern: interfaa om -main i accesul la memorii de mas, nevolatile. Dac vei completa figura 6.4. cu cteva dispozitive de intrare/ieire, vei obine schema bloc a hardware-ului minimal al unui microcalculator. Ideea de magistral unic, "plimbat" la toate elementele din sistem - inclusiv la cele de intrare/ieire - este o caracteristic constructiv de baz a microcalculatoarelor. Amintim aici, c unitile de calcul mai performante efebtueaz operaiile de intrare/ieire prin aa numitele canale de l/b a cror complexitate poate depii uneori complexitatea unui microcalculator. Ele sunt capabile s efectueze transferul de date ntre calculator i mediul extern n mod independent, fr ca prin aceasta s perturbe ctui de puin (derularea unui program de ctre unitatea central.

"Lungimea" (numrul de bii ai regitrilor interni ai microprocesorului) se coreleaz de obicei cu "limea" (numrul de linii ale) magistralei de date. Aceasta este msura "numrul de bii" ai unui microprocesor. Microprocesoarele cu structur fix sunt de obicei de 8, 16 sau 32 bii. Lungimea de cuvnt a microcalculatoarelor realizate cu microprocesoarele "bit slice" (felii de bit), a cror structur este flexibil, va fi totdeaunsj un multiplu ntreg al numrului de bii al unei felii. Registrul de adres, respectiv "limea" magistralei de adrese definete spaiul de memorie adresabil direct de ctre microprocessor. O magistral de adrese de 16 bit permite adresarea a 216 =65.536 celule de memorie distincte, iar 20 de linii de adres ne conduc n lumea megaocteilor: 2= 1.048.576 celule adresabile. Z80 este un microprocesor pe 8 bii, cu 16 linii de adres.

31

6.2. Structura intern a microprocesorului Z80 Vom prezenta mai jos structura intern a microprocesorului Z80, structur organizat pe blocuri funcionale:

n figura 6.5 gsim toate structurilfe funcionale pe care le-am inserat treptat n modelul microprocesorului teoretic constituit anterior. n extremitatea lateral dreapt a figurii 6.5 apare o csu notat MEMORIE, care simbolizeaz un bloc de memorie de lucru fr de care nu se poate aborda prezentarea funcionarii nici unei unitai centrale. Aceast csua nu este o parte component a microprocesorului luat n studio. Microprocesorul se termin de fapt la cei doi regitri tampon: registrul tampon de date (DB data buffer) i registrul tampon pentru adrese (AB adress buffer). n alctuirea microprocesorului rmn deci, regitrii speciali i cei de uz general (AB, PC, SP, IY, IX, R, I, W, Z, H\ Li", D[, E', B', C, H, L, D, E, B, C, A, A', F, F',T, T, i IR), ), circuitul de comand (Comma nd Circulit), ), unitatea aritmetic logic (ALU), magistralele interne i semnalele externe (/INT, /NMI, |/M1, /MREQ, /IORQ, /RD, M/R, /BUSRQ, /BUSACK, /RESET, /HALT, /RFSH, i /WAIT). 6.2.1. Regitri Pentru a putea funciona, executnd programe sto cate ntr-un modul de memorie, precum i pentru a avea un numr oarecare de date disponibile imediat, n interiorul fiecrui microprocesor se nglobeaz cteva celule de memorare, celule a cror coninut poate fi citit, modificat i rescris n caz de nevoie. Aceste celule de memorie de tip citete/scrie, ncorporate n interiorul microprocesorului se numesc regitri. Aa cum ne sugereaz amplasarea i forma de reprezentare a acestor regitri n figura 6.5, ei nu sunt toi identici. Unii sunt mai scuri (8 bii), alii au lungime dubl (16bii), la unii ant reprezentat fiecare bit n parte (F i F') fiindc ei au o semnificaie aparte, la alii aceast discriminare nu este necesar. n figura 6.5 se observ c fiecrui registru i este ataat o csu n car e se nscrie i valoarea hexazecimal a unui numr oarecare pe care l conine. Dac dorim s clasificm regitrii, trei este numrul criteriilor mai des folosite: 32

lungimea (numrul de bii): distingem reg tri de 8 bii (A, B, C etc.) i de 16 bii (PC, SP, etc.) accesibilitatea: pe lng regitrii accesibili utilizatorului prin instruciuni specifice, exist civa regitrii de manevr care se folosesc pentru stocarea temporar a datelor, regitrii care sunt transpareni utilizatorului (nu se pot acdesa) (ex. T, DB, AB etc.) destinaia: exist regitrii de uz general care se folosesc ca simple celule de memorie intern i alii cu! destinaie special care, pe lng trstura de memorare, fie c sunt dedicai stocrii doar a unui anumit tip de date (PC, IR , F),fie c sunt izestrai i cu anumite facilitai suplimentare ( SP, A, etc.). 6.2.1.1. Registri speciali Contorul program - PC (Program Counter) Indicatorul de stiv - SP (Stack Pointer) Registrul de instruciune - IR (Intruction Register) Registrul A - (Acumulator) Registrul indicatorilor de condiie F-(Flag) Registrul de remprosptare a memoriilor dinamice - R (Refresh) Registrul vectorului de ntreruperi -1 (Interrupt register) Contorul program - PC (Program Counter) este un registru dublu, avnd lungimea de 16 bii. El este destinat s memoreze adresa instruciunii curente ce se extrage din memorie. Dup ce se citete codul instruciunii curente din memorie (aceast operaie se numete fetch), coninutul acestui registru este automat incrementat cu 1. Astfel se asigur secvenialitatea n execuia unui ir de instruciuni (program). Instruciunile se vor executa ncepnd de la adresa 0 (dup /RESET), n ordinea cresctoare a adreselor. Atunci cnd n program apare un salt, se invalideaz aciunea circuitului intern de incrementare, n FjC ncrcndu-se noua valoare a adresei de salt. Memoria adresabil direct este de 216=65536 lodaii Aistincte (n HEXA de la 0000H la FFFFH). Indicatorul de stiv - SP (Stack Pointer) este un registru registru dublu, avnd lungimea de 16 bii. Avnd aceeai lungime ca i PC, el poate adresa ntreg spaiul de adrese de memorie: 0000H la FFFFH. Acest registru pstreaz adresa de 16 bii a varfului stivei plasat oriunde in memoria RAM extern. Zona din memoria RAM utilizat ca stiv ester organizat pe principiul ultimul- intrat, primul- ieit (LIFO- Last In First Out), registrul SP organiznd o stiv descresctoare: la fiecare salvare se nscriu n memorie 2 octe i i coninutul indicatorului de stiv este decrementat cu 2. SP=SP-2 La fiecare restaurare se citesc din memorie doi octei i coninutul indicatorului de stiv este incrementat cu 2. SP=SP+2. Pentru salvarea i restaurarea; datjelor din regitri, stiva se dovedete a fi foarte util i 33

convenabil, dar nu i de nenlocuit. Exist n schimb un caz n care existena unei memorii organizat ca stiv este imperios necesar, i anume: la apelarea subrutinelor i mai ales n cazul unor apeluri multiple. Ori de cte ori programatorul scrie anumite module care pot fi folosite n mai multe-puncte ale programului su, el1 le va scrie sub form de subrutine. O subrutin poate fi oricnd apelat dintr-un program principal, folosind o instruciune de tipul CALL adres, unde adres este adresa de nceput a subrutihei. La ntlnirea unei instruciuni CALL, secvena de execuie a programului principal este! abandonat, se execut subrutina, iar la ntlnirea unei instruciuni de tipul RET, care marchdazj sfritul subrutinei, se revine n programul apelant, la instruciunea imediat urmtoare instruciunii CALL. Cum se revine? Odat cu executarea instruciunii CALL, adresa instruciunii urmtoare din programul apelant este salvat n vrful stivei, iar la execuia instruciunii RET aceast valoare este citit automat din vrful stivei i ncrcat n contorul program PC, relundu-se astfel "firul pierdut". Aceasi metod de folosire a stivei d rezultate bune i n cazul apelrii unei subrutine din alt subrutin i aa mai departe. Atragem atenia c fol osirea acestui registru este delicat. Pe stiv se nmagazineaz att valori salvate din regitri de date, ct i adrese de revenire din subrutine. V dai seama ce se ntmpl dac dintr -o droare de programare, la revenirea dintr-o subrutin n contorul program PC se ncarc o datjoarecare i nu adresa de revenire! Registrul de instruciune IR (Instruction Register) este un registru cu lungimea de 8 bii. Acesta este celula n care se depoziteazcodul unei instruc iuni, citit din memorie la operaia fetch. Circuitul de comand al microprocesorului preia codul instruc iunii de executat n vederea ducerii la bun sfrit a execuiei instruciunii. Programatorul nu are acces la acest registru i nu poate fi nici nscris i nici citit. Registrul A - (Acumulator) este un registru avnd lungimea de 8 bii. El se distinge prin faptul c pe lng a ti s memoreze un octet, este! implicat n toate operaiile aritmetice i logice: unul din cei doi parametri asupra crora urmeaz s fie efectuat o operaie aritmetic i logic (adunare, scdere, etc.) se va afla obligatoriu n acumulator. Rezultatul operaiei se genereaz de asemenea n registrul A, el suprascriindu-se peste valoarea iniial. Observm c operaiile aritmetice i cele logice | acioneaz astfel nct acumuleaz rezultatele n registrul A. De aici provine numele de acumulator. Ne putem imagina un microprocesor virtual care s aib mai muli regitri prevzui cu aceast facilitate special. Acel microprocesor ar avea mai muli acumulatori. S -au realizat i astfel de microprocesoare. Un exemplu n acest sens l poate constitui microprocesorul M6800 al firmei Motorola. Conchidem prin a afirma ic a poseda mai muli acumulatori poate fi un avantaj, reducndu-se astfel numrul de | manevre necesare pen tru efectuarea unor operaii aritmetice/logice, dar este cert: un singur acumulator este suficient pentru a efectua operaii orict de complexe. Totul depinde de califidarea profesional i iscusina programatorului n a aranja operaiile elementare ale microprocesorul ji ntr-o ordine dorit, astfel ca programul realizat s efectueze ceea ce dorim. n figura 6.5 remarcm prezena un si csue marcate cu simbolul A'. Acest registru este un registru secundar, care mpreun cu registru F, B', C',D', E', H i L formeaz grupul regitrilor secundari. Existena acestor regitri secundari este o particularitate a microprocesorului 34

Z80. Ei sporesc considerabil performanele lui Z80 n comparaie cu predecesorul su I8080. Coninutul registrului A' poate fi interschimbat cu cel al registrului A, folosind instruciunea EX AF, AF". A" nu este un al doilea acumulator ai microprocesorului Z80 deoarece doar unul dintre ei poate fi activ la un moment dat. Pentru interschimbarea coninutului celorlali regitri se folosete instruciunea EXX. Registrul indicatorilor de condiie - F (Rlag). Aa cum o spune i numele simbolic ales pentru acest registru special (flag-fanion, stegule)!el este menit s semnaleze ceva. n acest registru, care n cazul microprocesorului Z80 are Idngirliea de 8 bii, fiecare bit n parte are semnificaia lui. Starea lor (0 sau 1) indic satisfacerea iau nesatisfacerea unor condiii date. De aceea ei se numesc indicatori de condiie. Flagurile furnizeaz att programatorului ct i nsi unitii de comand a microprocesorului, informaii privind natura rezultatului unei operaii aritmetice sau logic efectuate. Din starea biilor dedicai ai registrului F putem afla dac rezultatul operaiei efectuate este 0 sau nu, dac el este uh numr pozitiv sau negativ, dac numrul biilor din rezultat ce au valoarea 1 este un numr par sau impar etc. S-i analizm pe rnd: Flagul S (sign=semn) care apare pe poziia cea mai semnificativ a registrului F (bit 7), memoreaz bitul cel mai semnificativ al uiui numr rezultat n acumulator pe baza unei operaii aritmetice sau logice. n reprezentarea Ibineir bitul cel mai semnificativ se folosete adesea pentru indicarea semnului unui numr. Prin convenie, i rezultnd din particularitile reprezentrii sub forma complementului fa de 2 a numere or binare, valoarea 0 a bitului S indic numr pozitiv, iar valoarea 1 un numr negativ. nzestrnd bitul cel mai semnificativ al unui numr binar avnd lungirrjea de n bii, cu funcia de semn, tatlui numerelor reprezentabile prin acel numr nu se schimb. Se modific plaja de reprezentare a lor. Dac se folosete convenia numerelor ntregi fr semn, atunci un numr binar de 8| bii poate avea 28=256 de valori distincte, cuprinse n plaja [0,255]. Dac convenia de reprezentare este: numere ntregi cu semn, atunci aceeai 8 bii pot reprezenta de asemenea 256 de valoiji, cijiprinse de data asta n plaja [-128+127]. n tehnica de programare, rmne pe seama programatorului s decid asupra semnificaiei bitului celui mai semnificativ i implicit al flagului de semn S. Starea flagului S se testeaz de obicei soft prin dou instruciuni de salt condiionat: JP P,nn i JP M,nn care permit ramificarea programului n funcie de starea indicatorului de semn. JP P,nn (jump if plus) - salt dac rezultatul e pozitiv, efectueaz saltul la adresa nn, dac S=0 ; JP M,nn (jump if minus) - salt dac rezultatul e negativ, efectueaz saltul la adresa nn, dac S=1 ; Vom vedea mai ncolo c exist i alte instruciuni prin care s e poate testa flagul S, ca i flagurile Z, P/O, i Cy de alfel, dar ne limitm deocamdat la cele dou de mai sus fiindc ilustreaz destul de sugestiv utilitatea indicatorilor de condiie. Flagul Z (zero) - apare pe poziia oit 6 a registrului F. El este nscris cu valoarea 1 dac rezultatul unei operaii aritmetice/lobicei este 0. Dac rezultatul operaiei difer de 0, atunci coninutul indicatorului Z va fi 0. Adesea pentru testarea flagului Z se folosesc instruciunile de salt condiionat: JP NZ,nn i JP Z,nn unde: JP NZ?nn (jump if not zero) semnific salt, dac diferit de zero: saltul se efectueaz dac Z=0 ; JP NZ,nn (jump if zero) nseamn salt.idac zero: saltul se efectueaz dac Z=1. Acest i indicator este folosit i de circuitujl de comand al microprocesorului, la execuia unor instruciuni repetitive. Amintim aici instruciunile de comparaie CPIR i CPDR (ComPare Increment Repeat respectiv ComPare Decrement Repeat) caz n care instruciunea care compar coninutul acumulatorului cu celule de memorie aflate la adrese cresctoare (sau descresctoare) se termin dac Z=1, adic n cazul egalitii celor (dou 35

numere comparate. Instruciunile de transfer de blocuri de date la periferice, INDR i INIR precum i OTDR i OTIR se termin deasemenea n cazul n care Z=1 (n cazul de fa registrul B devine 0). Flagul H (Half carry) ocup pdziis bit 4 n registrul indicatorilor de condiie F i reprezint transportul care apare n urma unei opera Ti aritmetice de la bitul 3 spre bitul 4 al acumulatorului. Acest flag NU poate fi testat prin instruciuni de salt condiionat. Ei este folosit de ctre unitatea aritmetic/logic a microprocesorului (LU), la execuia instruciunii de corecie zecimal (DAA -Decimal Adjust Acumulator), pentru corecia numerelor zecimale codificate binar: BCD. Dac considerm cei 4 bii inferiori (bitO - bit3) a unui numr ca o cifr hexazecimal (digit), care poate avea Valori n domeniul [0 - F], transportul intermediar H va avea valoarea 1 ori de cte ori, ca rezultat a unei operaii de adunare sau'scdere, valoarea digitului mai puin semnificativ (bit 0 - bit 3) depete domeniul: fie c ar trebui s fie mai mare de 9, fie c ar trebui s fie negativ (mai mic ca zero). ALU execut toate operaiile nj sistemul binar. De aceea, pentru a putea lucra i cu numerje zecimale codificate n binar (J3CD), instruciunea de ajustare a rezultatului unei operaii aritmetice DAA, va folosi acest bit de transport intermediar. Flagul PA/ (Parity/Overflow) - este) un indicator de condiie multifuncional. El ocup poziia bit 2 n registrul F. Aa cum rezult din numele acestui indicator, el poate indica paritatea numrului din acumulator (n urma exdcutirii unei instruciuni logice) sau depire de domeniu (n urma executrii unei intruciuni aritmetice cnd apare un transport dinspre bitul 6 spre bitul 7 al acumulatorului). O a treia funcie a acestui flag care este citat destul de rar n literatura de specialitate (ea dezvluindu-se doar acelora care studiaz atent setul de instruciuni al microprocesorului): instruciunile de transfer multiple (LLD, LDI, LDDR, LDIR) i cele logice multiple (CPD, CPI, CPDR, CPIR) utilizeazj flagul PA/ ca detector de zero al registrului dublu BC. n acejst din urm caz PA/=0, dac coninutul registrului dublu BC=0, ceea ce este o condiie de terminjare a instruciunilor cu repetiie. Pentru aceste instruciuni PA/=1 dac BC 0. Atragem un pic atenia asupra folosirii bitul Ji PA/ cu rol de depire de domeniu: dup cum se tie rezultatul unei operaii aritmetice este corect dac: 1) apare concomitent transport dinspre bitul 6 ctre bitul 7 (bitul de semn) i dinspre bitul 7 mai ncolo (bitul carry). 2) nu se efectueaz nici un fel de trcinsport. Aceast condiie se poate implementa uor prin hardware sau software realiznd o funcie SAU-EXCLUSIV (XOR) ntre cei doi bii de transport: V=T6 XOR T7 n cazul apariiei unui transport rezultatul trebuie corectat. Flagul P/V poate fi tetstat prin instruciuni de salt condiionat: JP PO,nn i JP PE,nn: JP PO,nn (jump if parity odd) se executa salt la adresa nn dacparitatea este impar (P/V=0). JP PE,nn (jump if parity even) se execut salt la adresa nn dac paritatea este par (PA/=1); Remarcm, c indiferent de faptul c P/V indic paritate sau depire, mnemonica face referire mereu, la paritate. Aceasta este o posibil capcan pentru programatori, ei trebuind s tie ce anume indic flagul PA/ n momentul i care se folosete una din instruciunile de salt condiionat ce testeaz starea acestui bit 36

(instruciune logic sau aritmetic). I Flagul N - este un indicator care memoreaz tipul ultimei operaii aritmetice efectuate: adunare sau scdere. n registrul F el ocup poziia b'rt 1. De ce se numete tocmai N, nu tim nici noi, referinele bibliografice avute la disDoziie neindicnd nimic sugestiv n acest sens. i N=1 dac ultima operaie aritmetic a fost adunare ; | N=0 dac ultima operaie efectuat a fost scdere ; Flaguli N este folosit mpreun cu indicatorul de transport intermediar H i cu indicatorul de transpprt Cy, pentru ajustarea numerelor zecimale codificate binar (BCD), de ctre instruciunea DAA. Utilizatorul nu dispune de instruciuni dedicate pentru testarea valorii acestui indicator. Flagul Cy (Carry - transport)1 este indicatorul cel mai popular, afectat att de operaiile aritmetice/logice ct i de clasa operaiilor de rotire/deplasare octet. El ocup poziia bit 0 n registrul indicatorilor de condiie F. Flagul; Cy este nscris cu valoarea 1 orii de cte ori de cte ori apare un transport de la cifra cea mai semnificativ n afar. Acesta este cazul, dac pe urma unei adunri n aritmetica fr semn (gama de valori posibile 0 -255) rezult un numr mai mare de 255. La scdere Cy=1, dac scztorul ester main mare dect desczutul. Spre deosebire de toi indicatorii de condiie, n cazul flagului Cy exista instruciuni dedicate pentru modificarea coninutului acestui bit: SCF (Set Carry Flag) cauzeaz : Cy=1, iar CCF (Complement Carry Flag) complementeaz coninutul lui Cy. Existena acestor instruciuni ne sugereaz ideea s folosim indicatorul Cy ca indicator universal de condiie. Un programator i poate fixa de exemplu regula ca acest Cy s fie folosit ca indicator de eroare: dac la ntoarcerea dintr-o subrutin Cy=1, eirsa din subrutin s fie anormal, programul urmnd s ia alt curs de parcurgere. Acest exemplu este doar o idee, oricine putnd ataa alte semnificaii posibilb bitului Cy. Indicatorul Cy poate fi teistat prin instruciuni de salt condiionat: JP NC,nn i JP C,nn. Folosind aceste instruciuni, ramificaia programului se va face dup cum urmeaz: JP IMC.nn (jump if non carry) - salt Ia adresa nn, dac Cy=0; JP C,nn (jump if carry) - salt la nn, dac Cy=1; Ca i ijn cazul celorlalte flaguri testabile1 prin instruciuni de salt condiionat i Cy poate dirija apeluri i reveniri condiionate din subrutine: CALL NC, nnCALL C,nn ; RET NC ; RET C. Cei doi bii ai registrului F care au mai fmas sunt lipsii de semnificaie, coninutul lor variind imprevizibil pe toat durata de funcionare a microprocesorului Z80. Registrul de remprosptare a memoriilor dinamice - R (Refresh) - este un registru cu lungimea de 7 jbii, menit s asigure printr-o; numrare ciclic de la 0 la 127 (0000000 1111111) remprosptarea memoriilor RAM dinamice, din componena unui microcalculator, atunci cnd ele exist. Pentru a-i nelege mai bine'menirea i modul n care se achit de sarcina ncredinat, vom face din nou o parantez. n memoriile RAM dinamice pastr.area informaiei se face n celule a cror element de memorare este un condensator realizat n structura semiconductorului. tiind c un circuit de memorie dinamic avnd 65.536 celule de memorie distincte este un circuit integrat cu 16 pini, a crui structur (chip) nu depete dimensiunea de 3mm x 3 mm, ne putem da seama c i dimensiunile geometrice ale condensatoarelor de memorare ntr -un circuit RAM dinamic nu depesc 10"15F. Datorit curenilor de scurgere prin dielectricul acestor condensatoare, ele au tendina de a se descrca, pierznd ajstfe n timp treptat informaia (1 sau 0) nregistrat n ele. Timpul limit n care aceast descrcare nu pericliteaz nc 37

integritatea informaiei stocate, este de aproximativ 2msec. De aceea diri 2 n 2 msec. condensatoarele vor trebui repolarizate la valoarea lor iniial. Aceast procedur se numete remprosptarea memoriilor dinamice (refresh). Pentru a afla care este thnica folosit pentru a da un rspuns la aceast ntrebare vom considera structura circuitelor DRAM. n timpul rspndirii pe scar larg a microprocesoarelor de 8 bii, cele mai rspndite circuite DRAM au fost cele de 16Kbit. Ele au o organizare matriceal avnd 128 linii i tot attea coloane. Astfelse acoper ntregul spaiu de adrese de 16Kbit: 128 x 128 = 16384 = 16Kbit.Memorii dinamice sunt astfel realizate, nct selectarea unei celule pentru scriere sau citire remprospteaz ijitregul rnd pe care se afl elementul accesat. Ba chiar mai mult, nici nu trebuie fcut accesul pn la celula dat: este suficient s se selecteze rndul respectiv. Remprosptarea memoriei dinamice se poate face n acest caz asigurnd ca toate cele 128 de rnduri s fe selectate cel puin o (dat la 2 msec. Cele 128 de rnduri se pot codifica pe 7 linii (27=128) de adres. De aici rezult ca un registru numrtor circular avnd lungimea de 7 bii arputea sta la baza sistemului de remprosptare. (Acelai numr de bii -7- este suficient i n cazul utilizrii unui circuit RAM dinamic avnd capacitatea de 64Kbit, cci aceste circuite conin de fapt 4 grupe de 16Kbit). lat de ce registrul R are lungimea de 7bii. Rmne de vzut cum funcioneaz. Proiectanii microprocesorului' Z80 au plecat de la ideea c n timpul decodificrii unei instruciuni citite din memorie, microprocesorul nu efectueaz nici o activitate extern. Magistrala de adrese a microprocesorului i poate schimba deci coninutul, pe biii ei inferiori A0-A6 aprnd coninutul registrului R, care acompaniat de semnale de comand (/MREQ i /RFSH) va pute asigura remprosptarea memoriei dinamice. Dup cum ai realizat probabil, registrul R ester nzestrat i cu un mecanism care i incrementeaz automat coninutul dupa fiecare ciclu refresh. Coninutul registrului R poate fi nscris i citit "via" acumulator: LD R,A - nscrie R LD A,R - citete R Aceste sunt singurele instruciuni prin cate programatorul poate accesa registrul R. n rest e triete viaa monoton i autonom de numrtor circular de 7 bii. La iniializarea microprocesorului (aplicarea semnalului de comand /RESET), coninutul registrului de refresh R este ncrcat cu 0. Prezena registrului R este un ctig semnificativ n favoarea microprocesorului Z80, ea microcalculatorului de un efort considerabil, cel de a realiza o memorie cu 2 ci de acces (din partea procesorului i din partea unui circuit de remprosptare extern) i de rezolva cdnflidtele ce apar ntre cele dou subansamble. Registrul vectorului de ntreruperi - I (Interrupt register) - este un registru cu lungimea de 8 bii i servete n modul de ntreruperi 2 (instruciunea IM 2) la dirijarea (identificarea) sursei de cerere a ntreruperilor. Prin ntrerupere nelegem fenomenul la apariia cruia microprocesorul abandoneaz - la cererea unui eveniment extern - programul n curs de rulare, deservete - executnd un program dedicat - evenimentul extern, dup care se rentoarce la programul abandonat, relundu-i execuia din punctul n care ea fusese suspendat. Sunt multe aspecte de lmurit n legtur cu acest fenomen. Ne oprim acum doar asupr a unui aspect: cum identific microprocesoiul perifericul (sau evenimentul extern) care a solicitat ntreruperea ? Cererea de ntrerupere /INT sosete fizic la microprocesor pe linia 38

de stare avnd acelai nume. Pentru identificarea apelantului, i implici t pentru localizarea rutinei de tratare aferente s-au elaborat numeroase soluii, se pot imagina cel puin attea noi variante. Soluia cea mai rapid i cea mai flexibil pare a fi'identificarea vectorizat: din diverse surse se constituie o adres de memorie, care este nsi a'dresa de nceput a rutinei de tratare a cererii de ntrerupere recepionate. Aceast adres se ncarb n contorul program PC i microprocesorul a i ajuns la rutina dorit. Care sunt aceste surse ? a)n cazul microprocesorului Z80, perifericul care solicit ntreruperea va plasa, o dat cu acceptarea ei, pe liniile de date un octet de adres, pentru identificare. Fiecare periferic are adresa lui proprie, inconfundabil cu altele. Asta ar fi prima surs. b) Cea de a doua surs este nsi registrul I. Coninutul lui se plaseaz pe liniile superioare de adres A8 A15 ( liniile inferioare A0 A7 sunt date de periferic). Din cei 2 octei ataai se formeaz o adres de memorie A0 A15 ) vector de ntrerupere) de la care se citesc 2 octei succesivi din memorie, i se ncarc n PC efectundu-se saltul la rutina cutat. S-a identificat astfel implicit,fr cutri sau testri, sursa cererii de ntrerupere. Iniializarea registrului precum i asigurarea faptului ca n memorie, la adresa vectorului de ntrerupere s se afle adresa de nceput a rutinei de tratare a ntreruperii respective, cade bineneles n sarcina programatorului. Procedura de adresare folosit este dublu indirect. A doua treapt de adresare - cea de citire a adresei efective de nceput a subrutinei de tratare a ntreruperii acceptate, - este indirect, prin memorie. Programatorul poate avea acces la registrul I numai cu urmtoarele dou instruciuni: LD I,A - nscrie o valoare n I; LD A,I - citete valoare lui I; La iniializarea microprocesorului (aplicarea semnalului de comand /RESET), n registrul I se nscrie valoarea 0. 6.2.1.2. Regtri de uz general. B, C, D, E, H, L, - regitri primari IX, IY regitri de index B', C\ D\ E', H\ U reistri secundari Au menirea s pstreze n apropierea unitaii centrale date, care so poat if accesate rapid, evitndu-se pe ct se poate accesele la memorie, operatii care sunt molt main lente i reduc artful viteza de lucru a microprocesorului. ntr-o grupare semnificativ a figurii din IM.0 distingem alturi de regitrii dj prezentai (PC,SP,R,I) alte csue simbolizate cu B,C,D,E,H,L, regitri de uz general primary i B`,C`,D`,E`,H`,L`,regitri de uz general secundari. Precum i IX respectiv IY care sunt regitri de index. Regitrii B i C: sunt regitri generali de 8 bii. Exist o multitudine de instruciuni (de transfer, aritmetice, logice, de rotire, e[tc.) care trateaz coninutul acestor regitri. Ei nu au fost figurai ntmpltor pe aceeai linie: n anumite condiii ei se pot ataa, formnd un registru pereche BC, avnd lungimea de 16 bii. n aceast [situaie B este octetul cel mai semnificativ, iar C octetul cel mai puin semnificativ. Exist bineneles instruciuni care trateaz perechea BC ca un registru de 16 bii (instruciuni de transfer, instruciuni aritmetice). 39

Regitrii D i E: se caracterizeaz;prin aceleai trsturi ca i regitri B i C. Atunci cnd perechea DE formeaz un registru dublu de 16 bii, D ocup octetul superior iar E octetul inferior. Regitrii H i L: difer de cei anteriori B, C, D, E doar prin faptul c sunt implicai ntr -un numr mai mare de instruciuni, avnd astfel un grad de funcionalitate sporit fa de BC i respectiv DE. Atunci cnd ei formeazj o pereche HL, registrul H ocup octetul superior, iar L cel inferior. Plusul de funcionalitate al acestui registru dublu se refer la efectuarea de operaii aritmetice sau logice ntre registrul A i coninutul unei locaii de memorie oarecare, cnd adresa acestei locaii se va nscrie n registrul jdublu HL. Perechea HL devine astfel principalul instrument de adresare indirect a unor operanzi localizai in memorie la adrese cunoscute. Se mai pot folosi n schimb i regitrii IX i IY. Regitrii index IX i IY: sunt prin definiia dat de productori, regitri de 16 bii. Ei sunt dedicai pentru stocarea unor adrese de memorie. Faptul c aceste instruciuni care trateaz aceti regitri ca i regitri de 8 bii, este ascUns sub voalul tcerii de ctre fabricani. Noi i vom trata ca regitri de 16 bii. Regitri IX i IY au foti gndii s fie utilizai atunci cnd trebuiesc efectuate operaii aritmetico/logice asupra unor cmpuri de date, date ce sunt aezate la adrese successive de memorie, formnd astfel un tabel. Registri index nu vor conine adresa celulei care se dorete a fi tratat,ci con in adresa de nceput a tablei de date. Data dorit se va localiza adugnd la adresa de la nceputul tabelei ( adresa de baz), indicele ( numrul de ordine) datei respective. Indicele datei dorite se specific explicit n enunul instruciunii, valoarea lu fiind adunat n cursul execuiei instruciunii la adresa de baz, coninut n registrul n registrul index IX sau IY, formndu-se artful adresa efectiv a celulei de memorie dorite. Spere exemplificare considerm instruciunea : ADD A,(IX+7) Coninutul registrului IX nu se modific pe parcursul execuiei acestei instruciuni. Datele din tabeleje adresate cu registrul index vor fi date cu lungimea de 1 octet. Numrul maxim de elemente ce pot fi reperate cu o adres de baz este de 256, datorit faptului c indicele care apare n cmptjl instruciunii are lungimea de 11 octet. Programatorul dispune bineneles de instruciuni de iniializare, salvare i restaurare a regftribr index /X i IY. Ba chiar mai mult, ei pot fi folosii i pentru! efectuarea unor operaii aritmetice de 16 bii, nlesnindu-se astfel calculul unor adrese de baz, prin program. Aceast facilitate suplimentar i ndeamn pe muli programatori, s foloseasc regi tri dubli IX i IY n alt scop dect cel pentru care au fostgndii, ceea ce desigur nu ester de condamnat. Artful regitriiIX i IY sunt des utilizai ca elemente de memorare a unor valori numerice de 16 bii. Amintim c tehnica de adresare a unor operanzi localizai n memorie, folosind regitri IX i IY se numete adresare indexat. Regitri Secundari B', C, D, E', H', L . Ca i n cazul regitrilor speciali A i F, unde am ntlnit deja regitri secundari A' respective F', i regitri de uz general au cte o dublur: regitri secundari B', C, D', E', H', L'. Coninutul regitrlor primari i a celor secundari poate fi interschimbat concomitent, printr-o singur instruciune: EXX dup care se poate lucra cu regitri secundari la fel ca i cu cei primari (folosind acelai set de instruciuni). Toate instruciunile care implic regitri de uz general B, C, D, E, H, L acioneaz asupra 40

coninutului regitrilor primari. Pentru a putea opera cu coninutul regitrilor secundari, el trebuie transferat n regitri primari, folosind instruciunea EXX. 6.2.1.3 Regitri de manevr, transpareni utilizatorului n interiorul oricrui microprocesor) exist i anumii regitri care nu sunt folosii n mod explicit de ctre instruciunile acelui microprocesor. n figura 6.5 am notat aceti regitri cu T, T, W i Z. Eji sunt regitri de manevr, transpareni utilizatorului, deci nu se pot accesa cu ajutorul setului de instruciuni. Regitri W i Z: sunt regitri de cte 8 bii care pot fi tratai i ca regitri dubli de 16 bii. Regitri temporari T: sunt regitri de intrare n unitatea aritmetic/logic (ALU) i au cte 8 bii fiecare. Registrtrul tampon de date DB (Data Buffer) este un registru bidirecional de 8 bii, care delimiteaz interiorul microprocesorului dejlumea extern. El este necesar n primul rnd pentru a menine datele ce sunt trimise din celulele regitrilor interni spre memorie, sau spre periferice. Regitri tampon de adrese AB (Address Buffer) izoleaz pe de o parte magistrala extern de adrese de cea intern. n afar de aceasta el are un rol de memorare temporar a unor adrese, rol pe care l-am explicitat la relevarea modelului funcional al unui microprocesor ipotetic. 6.2.2. Circuitul de Comand Acest bloc funcional, notat n figura 6.5 cu Commnd Circuit ester inima i creierul oricrei unitai centrale de calculator i implicit al microprocesoarelor. Sarcina lui este s guverneze toate activitile microprocesorului, ncepnd din momentul n care acestuia i se aplic tensiune i semnal de tact. Circuitul de comand genereaz tokte semnalele de comand pentru activarea secvenial a tuturor elementelor interne i externe din microcalculator. n linii mari, n activitatea lui se disting urmtoarele faze majore: citete din memorie codul instruciunii de executat, l decodific i nelegnd semnificaia codului citit programeaz toate activitile interne i externe pentru a duce la bun sfrit comanda primit. Amintim doar c cea mai scurt instruciune se execut n 4 taci procesor (ex. transferul ntre regitri: LD A,p ; LD D,E etc.) pe cnd cea mai lung necesit 23 de stri de tact distincte, fiecare cu semnificaia ei (ex.: tergerea unui bit dintr-o locaie de memorie adresat printr-un registru index: RES 3,(IX*IND)). n blocul funcional al circuitului da comand am inclus i bistabilii de validare/inhibare a sistemului de ntreruperi IFF1 i IFF2, precum i registrul MOD de 2 bii al modului de ntrerupere folosit. Dac IFF1 /'IFF2 au valoarea 1, atunci sistemul de ntreruperi este validat, microprocesorul acceptnd cererile de ntrerupere sositet din exterior. Dac ele au valoarea 0, sistemul de ntrerulperi este inhibat, cererile de ntreruplere fiind neglijate. n registrul MOD se stocheaz modul de ntrerupere selectat prin una din instruciunile de comand IMO, I/M1, IM2. Asupra rolului acestor elemente funcionale i a funionrii lor vom reveni n alt lucrare de laborator. 6.2.3. Unitatea aritmetico-logic Aa cum rezult din relatrile anterioare, ALU este un bloc funcional al 41

microprocesoarelor, destinat s efectueze operaiile aritmetice i logice. Unitatea aritmetico/logic a microprocesorului Z80 este de tip paralel, avnd limea d 3 8 bii. Aceast unitate central poate executa dou operaiii aritmetice: adunarea i scderea acioneaz de asemenea pe cuvinte de a dou numere binare de cte 8 bii. Operaiile logice cte 8 bii. Ele sunt i, SAU,' SAU EXCLUSIV, COMPARAIE i COMPLEMENTARE (corjnplement fa de 1 sau 2). Unul din operanzii implicai n operaijle ALU, va pro veni totdeauna din registrul acumulator A. Odat; cu generarea rezultatului operaiilor aritmetice/logice, se poziioneaz i indicatorii de condiie ai registrului F. Setul de instruciuni aritmetice i logice pare a fi srac pentru cel care dorete s ex ecute calcule tiinifice folosind instruciunile enunjateJ Pentru nceptori pare puin probabil s calculezi logaritmul unui numr real cu o precizie de 16 cifre semnificative, atunci cnd dispui de o unitate aritmetic care tie doar s adune i s scad dou numere ntregi avnd valori cuprinse n limitele [0,255]. inem s -i linitim afirmnd i c Ieste posibil, trebuie s cunoti ns bazele analizei numerice pentru a reduce calculul unui logaritm la adunri i scderi i s ai iscusina de a transpune aceti algoritmi n prdgrarrie scrise cu ajutorul instruciunilor limitate ale microprocesoarelor. ALU efectueaz scderile transformnd scderile n adunri. Numerele de sczut (negative) sunt transformate n complementul lor fa de 2. Circuitele electronice care realizeaz funciile ALU sunt de tip combinaional, fiind mult mai simple dect cele din circuitul de comand al microprocesorului. 6.2.4 Magistralele interne Magistrala de 8 bii. tiind c limea majoritii regtrilpr din interiorul microprocesorului Z80 este de un octet, deducem c n interiorul lui trebuie s existe o magistral avnd limea de 8 bii pentru a se putea efectua transferurile interne. La aceasta magistral de date care ncepe la bufferul de date DB se leag registrul instruciune IR, acumulatorii A, regitri tampon T de la intrarea ALU, ieirea ALU, precum i toi ceilali regitri interni de 8 biii. Magistrala de 16 bii. Adresele de memorie pe care microprocesorul le genereaz au limea de 16 bii. n interiorul microprocesorului ele se veh culeaz pe o magistral local care se termin la registrul tampon pentru adrese AB (Address Buffer). Din studiul detaliat al funionriijmic-oprocesorului rezult c toi regitri B, C, D, E, H, L, IX, IY, SP, PC, i WZ au cte 2 ieiri: - una din ieiri este racordat lalmagistrala de 8 bii, folosindu-se pentru transferul de date. -cealalt ieire a lor este legat la octetul superior sau inferior al magistralei de 16 bii, permind astfel generarea unor adrese de 16 bi i pentru adresarea memoriei externe. Semnale de comand interne. Pentru a putea activa n ordinea dorit, fiecare element funcional intern, circuitul de comand al microprocesorului dispune dej o multitudine de semnale de comand, semnale care ajung |a toate prile lui componente. Ele nu au fost reprezentate n modelul din figura IM.O numrul lor mare nepermind acest lucru. Oricfjm este suficient s tim de existena 42

lor. Nefiind nominalizate, aceste semnale vor fi grupate sub numele generic de semnale de comand interne. 6.3. SEMNALELE EXTERNE Dup ce am cunoscut structura intern a microprocesorului, este momentul s prezentm semnalele prin care el comunic cu lumea extern. n figura 6.6. redm semnalele externe ale microprocesorului Z80, grupate funcional. Distingem 3 clase mari de semrjale: magistrala de date, magistrala de adrese i magistrala de comenzi. 6.3.1. Magistrala de date DO - D7 Cele 8 linii care pornesc din registrul tampon de date DB al microprocesorului sunt folosite pentru a asigura transferul de date ntre microprocesor, memorie i dispozitive de intrare/ieire, mpreun ele formeaz magistrala de dalte a microprocesorului, notat DO D7. Magistrala de date a; microprocesorului este bidirecionala. Pe ea intr date atunci cnd se efectueaz o citire din memorie sau dispozitive de intrare/ieire, i ies date la efectuarea unei scrieri. Magistrala este de tip tri-state: pe lng cele dou nivele logice active (0 i 1), fiecare linie de da^e poate avea o stare inhibat, de nalt impedan. Aceast stare este util dac n anumite momente de funcionare, magistrala de date trebuie cedat de ctre microprocesor unei alte componente din microcalculator. Un exemplu n acest sens l poate constitui efectuarea unui transfer de date, direct de la un dipozitiv de intrare/ieire n memorie (sau invers) procedeu numit DMA (Direct Memory Acces - acces direct la memorie). Magistrala de date este neinversat: biii de valoare 1 vor apare cu nivele de tensiune ridicat (3 - 4 V), pe cnd cei valoare 0 vor fi materializai prin nivele de tensiune sczute (0.1 - 0.8 V). DO este bitul cel mai puin semnificativ al octeilor ce circul pe magistrala de date.

43

6.3.2 Magistrala de adrese: AO - A15 Cele 16 linii ce-i au originea n registrul tampon de adrese AB a microprocesorului, formeaz mpreun magistrala de adrese. Ea este unidirecional: adresele ies din microprocesor pentru a fi transmise la circuitele de memorie i cele de intrare/ieire ale microcalculatorului. Cele 16 linii de adres permit adresarea direct a 64 k de memorie RAM. Pentru adresarea dispozitivelor de intrare/ieire, se decodific de obicei octetul inferior al registrului de adrese AO -A7, putndu-se astfel lega 256 x 2 dispozitive de intrare/ieire n sistem.. Dac transferul de date ntre procesor i dispozitivele de intrare/ieire se realizeaz cu ajutorul instruciunilor ce folosesc adresarea indirect: IN A,(C) respectiv OU (C),A atunci, n ciclurile de intrare/ieire, pe magistrala de adrese va apare coninutul regitrilor BJ(A15 A8) i C (A7 - AO). Decodificnd ambii octei ai magistralei de adrese, numrul dispozitivelor de intrare/ieire adresabile direct de ctre microprocesor crete la 65.536 x 2. n ciclul de remprosptare a memoriei, liniile de adres AO - A6 conin adresa rndului rempipsptat (coninutul registrului R). Aidoma magistralei de date i magistrala de adrese poate avea 3 stri electrice (logice) distincte: 2 stri active (1 sau 0) i o stare inhibat de nalt impedan. Menirea c elei de a treia stri este identic cu cea enunat la magisitrala de date. Linia AO conine bitul cel mai puin semnificativ al adreselor (pe scurt LSB). 6.3.3. Magistrala de comenzi Acest nume este un nume generic, cci spre deosebire de celelalte dou magistrale, n care liniile fiecreia aveau semnificaii similare magistrala de comenzi este reuniunea unor semnale individuale de intrare sau ieire din microprocesor, avnd fiecare un rol aparte Le 44

clasificm totui n trei grupei -semnalul de tact - semnale de comand - semnale de stare 6.3.3.1 Semnalul de tact (O) Este un semnal TTL, constituind elementul motor al microprocesorului. Toate evenimentele interne ale micoprocesorului apar sincronizate cu acest semnal. Frecven a semnalului poate varia n limite destul de largi, interesul nostrum fiind ns acelea de a lucra cu frecvene ct main mari ale semnalului de ceas, datorit faptului c viteza de execu ie este direct proporional cu freccvena tactului O. 6.3.3.2 Semnale de comand n aceast categorie includem semnalele care sunt generate de ctre microprocesor. Cu ajutorul lor, circuitul de comand !al microprocesorului dirijeaz activitile din interiorul microcalculatorului. /M1 - (Machine cyde 1 - ciclu main 1) este un semnal activ n starea 0. El apare ori de cte ori microprocesorul citete din memorie codul unei instruciuni, operaie numit fetch. n acesta situaie el este nsoit de alte dou semnale /MREQ (Memory REQuest) i /RD (ReaD) care concur la citirea codului din memorie. /M I se activeaz i n ciclul de acceptare a unei cereri de ntrerupere. n acest caz el se activeaz jnpreun cu /IORQ (Input/Output ReQuest). Apariia lor concomitent determin perifericul apelant s depun pe magistrala de date octetul inferior al vectorului de ntrerupere. Exist instruciuni care sunt descise prin dou sau trei coduri de operaie. n cursul execuiei acestora, /M1 se activeaz ta citirea fiecrui octet cod de operaie. /M1 poate trece n starea! de nalt impedan (tri-state). /MREQ - (Memory REQuest - cerere de acces la memorie), este un semnal activ n starea 0. El se activeaz ori de cte ori microprocesorul dorete s efectueze un acces la memorie, fie pentru! citirea, fie pentru nscrierea ei. /MREQ se activeaz i pe parcursul ciclului de remprosptare a memoriilor dinamice, acompaniat de semnalul /RFSH. n momemtul apariiei acestui semnal magistrala conine pe liniile A0 - A15 adresa de memorie la care se va efectua accesul. /MREQ poate trece n starea de nalt impedan (tri-state). /RD (ReaD - citete) este uri semnal activ n starea 0. El este activat atunci cnd microprocesorul execut citirea unui octet, din memorie sau de la un dispozitiv de intrare. Elementul apelat (celula de memorie sau dispozitivul de intrare) va transfera la apariia acestui semnal coninutul lui pe magistrala de datei. Sursa datei de citit se stabilete din starea semnalelor /MREQ i /IORQ. /RD poate trece n starea de nalt impedan (tri-state). /WR - (/WRite - scrie) este un semnal activ n starea 0. El se activeaz atunci cnd microprocesorul urmeaz s scrie un ocjtet n memorie sau la un dispozitiv de intrare/ieire. Destinaia octetului transferat se stabilete din starea semnalelor /MREQ i /IORQ. nainte de activarea semnalului /WR microprocesorul!va depune pe magistrala de date octetul de transferat. Datele fiind stabile n momentul apariiei semnalului de scriere /WR, el poate fi folosit (frontul su cztor) pentru nscrierea lor n celule de memorie sau 45

dispozitivul de ieire dorit. A/VR poate trece n starea de nalt impedan (tri -state); /IORQ - (Input/Output ReQuest - cerere de acces la dispozitivul de intrare /ieire ) este un semnl activ n starea 0. El este acompaniat de unul din semnalele /RD _ sau /WR, mpreun cu care determin tipul de acces efectuat la dispozitivele de intrare/ieire. n ciclul de acceptare a cererii; de ntrerupere /IORQ se activeaz mpreun cu /M1. Prezena celor dou semnale semnific acceptarea unei cereri de ntrerupe re. /IORQ poate trece n starea de nalt impedan (tri-state). /RFSH - (ReFreSH - remprosptare) este un semnal activ n starea 0. El se genereaz n ciclul de remprosptare a memoriilor dinamice. Prezena acestui semnal, activat nseamn c pe liniile A0 - A6 s-a depus coninutul registrului R. La apariia semnalului /RFSH aceste linii nefiind nc stabilizate, se recomand s se foloseasc semnalul /MREQ care apare n acest ciclu puin mai trziu, pentru declanarea accesului de remprosptare a memoriei. /HALT - (Halt - oprete) ete un semnal de ieire activ n starea 0, prin care microprocesorul aduce la cunotina ssteifnului, faptul c a executat o instruciune HALT i este oprit, prin aceast stare microprocesorul nul poate fi scos dect printr -o ntrerupere /INT (dac IFF = 1) o ntrerupre nemascabil /NMI, sau o reiniializare /RESET. n realitate microprocesorul nu st pe loc, ci executa n continuare instruciuni NOP (No Operation) pentru a asigura remprosptarea unei eventuale memorii dinamice din system. Dac ieirea din starea HALT s-a fcut printr-o ntreruper, (mascabil sau nemascabil), dupa tratarea ei, execuia programului va continua de la instruciunea local la adresa urmtoare instruciunii HALT. /BUSAK - (BUS AcKnowledge I- acceptarea cererii de magistral) este un semnal activ n starea 0, prin care microprocesorul i confirm acceptarea unei cerei /BUSRQ de cedare a magistralelor. Semnalul /BUSAK apatje totdeauna dup terminarea unui ciclu main, dup ce microprocesorul i-a pus n stare de nalt impedan magistralele (date, adrese, comenzi). /BUSAK nu trece niciodat n starea dej na t impedan. 6.3.3.3. Semnale de stare O fi microprocesorul "creierul i conductorul" vieii interne a unui microcalculator, dar orict de atotputernic ar fi, nu-i poate pemhite s dea comenzi orbete, fr s -i pese de rspunsul celorlalte componente din sistem. Uneori \|a trebui s-i ncetineasc ritmul, alteori va fi ntrerupt, prsind temporar programul n care se afla, pentru a se pute a ngriji la cerere de subalternii si, ba chiar mai mult, n anumite circumstane va trebui s stea deoparte, lsndu-i i pe alii "s vorbeasc" - s preia comanda - dac ex st activiti pe care ei le pot efectua mai rapid i mai eficient. n ultim instan, dac n munca sa microprocesorul s-a pierdut pe drum, pe crrile accidejntate ale unui program insuficient de bine pus la punct, trebuie s existe posibilitatea de a-l readuce cu "picioarele pe pmnt", forandu-l s ia totul de la nceput. Microprocesorul culege informaiile necesare pentru luarea unor astfel de decizii, prin intermediu! unor semnale de intrare numite de ctre noi, semnale de stare. S le cunoatem: /WAIT - (Ateapt) este o "atenionare" emis de elementul apelat (celul de mem orie sau dispozitiv de intrare/ieire) prin care acesta semnalizeaz microprocesorului faptul c 46

merge prea repede i el colaboratorul nu poate ine! pasul. n fiecare ciclu de memorie sau de intrare/ieire dup lansarfe comenzii (activarea semnalelor/MREQ sau /IORQ i /RD sau /WR) circuitul de comand al microprocesorului analizeaz starea liniei A/VAIT . Dac ea este activ (valoare 0) atunci se insereaz cicluri de tact suplimentare de ateptare, pn cnd elementul apelat i termin treaba. La dispari ia semnalului A/VAIT, microprocesorul continu execuia instruciunii ca i cum nu s -ar fi ntmplat nimic. Acest semnal permite un(ui microprocesor orict de rapid, s poat coexista i colabora cu circuite de memorie sau j de jintrare/ieire lente. Dac n sistem coexist elemente rapide (ex. circuite RAM cu timp de acpes Ide 100 - 200 ns) i lente (ex. memorie de ferit cu timp de acces de ordinul microsecund^lor) semnalul A/VAIT adapteaz viteza de rulare a microprocesorului la posibilitile concrete ale fiecruia. Specificm totui, c dac n sistem exist memorii RAM dinamice care ateapt s fie remprosptate de ctre microprocesor, athnci ateptarea cauzat de semnalul A/VAIT nu poate fi orict de lung, fiindc altfel s-ar risca pierderea informaiei stocate n DRAM. /INIT (INTerrupt - ntrerupere) este petiia depus de un element din sistem (de obicei un dispozitiv intrare/ieire) prin care solicit participarea microprocesorului la rezolvarea unei situaii noi, create de apariia unui evenimenl exem. Dac sistemul de ntreruperi al microprocesorului este validat, atunci activarea semnalului /INT (valoare 0) va declana abandonarea programului n curs de execuie i microprocesorul efectueaz un salt la o rutin n care trateaz cererea de ntrerupere. Dup terminarea rutinei Jde ntrerupere microprocesorul se ntoarce n programul abandonat, relundu-i execuia din punctul n care a fost abandonat. Cererea de ntrerupere este acceptat numai dup terminarea ultimului ciclu main a instruciunii n curs de execuie. Cererea de ntrerupere este ignorat dac microprocesorul este n stare de ateptare (WAIT) dac este suspendat (BUSAK) sau dac sistemul de ntreruperi este inhibat (bistabilul IFF1 = 0). Dac cererea de ntrerupere se accept (n acest caz microprocesorul Z80 genereaz concomitent semnalele /M1 i /IORQ), saltul la nceputul rutinei de tratare a ntreruperii se va efectua n diverse modurji n funcie de regimul programat prirj intermediul instruciunilor IM 0, IM 1 sau IM 2 (Interrupt Mode). Ieirea dintr-o subrutin de trateire ntreruperii /INT se face cu instruciunea RETI. /NMI va ntrerupe chiar i un program de tratare a unei ntreruperi sosite pe linia /INT. La acceptarea cererii de ntre|rupere nemascabil, microprocesorul salveaz coninutul un salt necondiionat la adresa 0066H unde trebuie s nceap rutina de tratare a ntreruperilor nemascabile. Dup terminarea acestui program sie poate restaura vechea valoare a PC -ului de pe stiv, pentru a relua programul abandonat cu ajutorul instruciunii RETN. /NMI-ul este singurul semnal al microprocesorului Z80 care datorita importanei sale (trebuie evitat posibilitatea trecerii neobservate a unei cereri /NMI) nu se activeaz pe nivel ca /INT, ci pe front! Cererea /NMI se nregistreaz l apariia unui front cztor pe acest semnal, cerere care va persista pn la acceptare (sfritul instruciunii n curs) chiar dac ntre timp cererea n sine a disprut. Evenimente importante care merit s fie semnalate prin /NMI sunt: -avertisment la cderea tensiunii sau -intervenie operator. /BUSRQ (BUS - ReQuest cerere de magistral) este piciorul pus n prag de ctre un element din sistem, manevr prin care se suspend microprocesorul. Aceasta din urm va 47

termina ciclu main n curs de execuie, dup care emite semnalul de acceptare a cererii /BUSAK i va sta deoparte cu toate magistralele puse n starea de nalt impedan (cedate). n aceast situaie dispozitivul care a suspendat microprocesorul va prelua comanda magistralelor din microcalculator. Aceastfacilitate poate if folosit pentru a realiza un system cu dour procesoare diferite, din care doar unul so fie active sau pentru a realize un dispozitiv cu aces direct la memorie. Un dispozitiv DMA poate efectua un transfer main rapid ntre un echipament periferic i memoria microcalculatorului, dect ar putea-o face microprocesorul prin program. /BUSRQ ester active n starea 0. /RESET (Reiniializare) este mna de ajutor acordat de ctre operator microprocesorului (sau de ctre proiectanii microprocesoruui - operatorului) Acest semnal permite reiniializarea microprocesorului. La activarea lui (valoarea 0) se ntmpl urmtoarele evenimente n interiorul microprocesorului: -se terge contorul program PC = 0000H -se inhib sistemul de ntrerupdri IFF1 = IFF2 = 0 -se stabilete regimul de ntreruperi IM 0 -se iniializeaz regitri I i R I = R = 00H Semnalul /RESET se va aplica microprocesorului la trezire (dup pornirea de la butonul reea al unui dispozitiv cu microprocesbr) i oricnd execuia unui program s-a rtcit sau a intrat ntr-o bucl infinit. Pentru a fi luat n considerare,!semnalul /RESET trebuie s fie activ minimum 3 taci de procesor. Pe durata aplicrii semnalului /RESET = 0 magistralele de date i adrese ale microprocesorului Z80 trec n stare de nalt impedan (tri-state) iar semnalele de comand nstare inactiva (1 logic). n acest rstimp nimeni nu lucreaz, deci nu vor exista ciclurile de remprosptare a memoriei, nu se va active /RFSH. Orice ncercare de a realiza un sistem n care aceste legturi inverse feed -back lipsesc ar fi sortit1 eecului. Dac aceste semnale nu exist sau dac ele nu sunt luate n considerare, nu poate rezulta altceva dect un sistem ricid ce nu se adapteaz la condiiile schimbtoare ale mediului su nconjurtor, un sistem n cjare ideea de siguran primeaz asupra criteriilor de performan. 6.4. Sistemul de ntreruperi a! microprocesoruSui Z30. Microprocesorul Z80 accept cou semnale de ntrerupere: /NMI, ntreruper ea nemascabil, i /INT, ntrerupere mpscsibil validat selectiv prin program. La ntreruperea nemascabil Z80 rspunde ntr-un mod simplu, n timp ce pentru ntreruperea mascabil exist trei moduri de tratare. ntreruperea /NMI este piioritar fa de /INT. La iniializare, bistabilii interni IFF1 i IFF2 sunt forai pe zero, ceea ce este echivalent cu invalidarea ntreruperilor, iar n aceast si are microprocesorul nu accept ntreruperi mascabile. ntreruperile se valideaz prin poziionarea bistabililor IFF1 i IFF2 pe "1"cu ajutorul instruciunii El. Orice ntrerupere n ateptare va putea fi servit numai dup execuia instruciunii care urmeaz dup El. ntrzierea cu o instruciune este util atunci cnd dup Ei se execut o instruciune de reven ire. n cazul n care UC-Z80 (UC=Un|tate Central) accept o ntrerupere, IFF1 i IFF2 sunt adui pe "0", inhibndu -se astfel acceptarea unor alte ntreruperi pn la o nou instruciune El. Dezactivarea sistemului de ntreruperi mascabile se face cu instruciunea Di. Aa cum am menionat, destinaia lui IFF2 este de a memora temporar starea lui IFF1 la apariia unei ntreruperi mascabile canid, pentru prevenirea celorlalte ntreruperi, IFF1 se 48

foreaz pe "0" Mai mult, la execuia unei instirucuni de form a LD A, I sau LD A, R starea lui IFF2 este transcris n indicatorul de paritate, ceea ce permite testarea i memorarea ei, i deci, implicit, refacerea prin program a valorii iniiale a lui IFF1. O alt cale, cea obinuit, de a reface starea precedent ntreruperii nemascabile este pn'n execuia unei instruciuni de revenire din ntreruperea nemascabil, RETN. ntreruperea nemascabil nu; poate fi invalidat prin program, fiind acceptat n orice situaie de UC-Z80. /NMI-ul se rezerv de obicei pentru evenimente prioritare, cum ar fi de exemplu cderea tensiunii de alimentare. La apariiai semnalului /NMI, dac semnalul /BUSRQ nu este activ, microprocesorul ignor n ciclul de extragere urmtor codul instruciunii, iniiind un restart la adresa 0066H! La aceast adres se gsete n general secvena de serviciu a ntreruperii nemascabile. Z80 ppate fi programat pentru a rspunde a ntreruperile mascabile ntr-unui din modurile 0, 1 sau 2, mejnorate cu ajutorul bistabililor IMFa i IMFb. Cele trei moduri de lucru sunt descrise n continuare: Modul 0. Este compatibil cu procedurile de ntrerupere ale microprocesorului 8080. n acest mod de ntrerupere dispozitivul perifenc poate plasa pe magistrala de date, n ciclul de tratare a ntrerdperii, orice instruciune. Deci, ideea procedural este c instruciunea urmtoare nu se mai extrage din memorie, ci va fi furnizata de dispozitivul care ntrerupe. n general, aceasta este o instruciune Restart (mnemonica este RST xx), deoarece perifericul trebuie s asigure plasarea pe magistrala de date a unui singur oct^t. Instruciunile de restart realizeaz apeluri de subrutine plasabjile la opt locaii fixe n pagina zero din memorie. Desigur, dispozitivul care ntrerupe poate genera orice cod de instruciune, de exemplu o instruciune CALL, format din trei octei pentru apel la orice locaie de memorie, dar n acest caz este mai dificil de realizat interfaarea cu perifericul deoarece va trebui s mai livreze nc doi octei. Precizm, de asemenea, c la iniializare, UC-Z80 intr automat n modul kero. Modul 1. Este foarte asemntor cu modul de rspuns la ntreruperea nemascabil. Diferena principal const n faptul c se execut un restart la locaia 0038H, n loc de 0066H. Modul 2. Este cel mai puternic mod; de rspuns al microprocesorului Z80: cu un singur octet furnizat de dispozitivul care ntrerupe se pohte executa un apel indirect la orice locaie de memorie. Pentru a folosi acest mod de tratare1 a ntreruperilor, programatorul trebuie s scrie o tabel cu adresele de nceput ale fiecrei rutine de serviciu. Tabela poate fi localizat n orice zon a memoriei. La acceptarea unei ntreruperi, UC-Z80 formeaz un pointerde 16 bii cu ajutorul cruia ia din | tabel adresa rutinei de serviciu torespunztoare dispozi tivului care ntrerupe. Cei mai semnificativi 8 bii ai pointer-u\u\ surit diai de coninutul registrului I ncrcat n prealabil (la iniializare l=0). Cei mai puini semnificativi 8 bii vor fi generai de periferic, cu observaia c la circuitele periferice din familia ZILOG ultimul bit trebuie s fie zero (sunt necesari de fapt numai 7bii generai de periferic i deci adresele retinelor de ntrerupere vor trebui plasate la adrese pare). n figura de mai jos se nfieaz procedura de tratare a ntreruperii n modul 2: dup cue dispozitivul periferic genereaz por iunea cea main puin semnificatv a pointer-ului, UC-Z80 salveaz automat n stiv numrtorul de program,obine din tabeladresadenceput a subrutinei de serviciu i efectueaz un salt la aceast adres. Dispozitivele periferice din seria Z80 permit implementarea unui sistem de ntreruperi care so lucreze n modul 2 asigurnd n acest scop generarea automat a vectorului de ntrerupere pe timpul unui ciclu de achitare. De asemenea,menionm c dispozitivele din 49

familia ZILOG care ntrerup pot fi conectate n lan , prioritatea fiind determinat de de poziia fizic din lan. Fiecare circuit are o intrare de validare a ntreruperilor, pinul IEI, i o ieire de validare a ntreruperilor, pinul IEO, ctre urmtorul dispozitiv. Primul dispozitiv din lan ester cel prioritar i trebuie so aib intrarea IEI cablat la 1. Comanda semnalului IEO n funcie de IEI i de ntreruperea local ester asigurat de toate circuitele periferice din familia Z80.

Pentru a nelege mai bine relaiaintre cele trei semnale, /BUSRQ, /NMI, i /INT, ce pot ntrerupe fluxul normal al execuiei instruciunilor, prezentm n continuare organigrama de mai jos. Aa cum se vede, /INT i /NMI sunt luate n considerare la sfritul instruciunii, n timp ce /BUSRQ la sfritul unui ciclu main. Ordineai de prioritate a acestor semnale, ncepnd cu cel prioritar, este: /BUSRQ, /NMI i/INT. n timp ce UC-Z80 este n modul DMA, cu magistralele comandate de un periferic, nu se rspunde la /NMI sau /INT.

50

S-ar putea să vă placă și