1.INTRODUCERE Scurt istoric privind dezvoltarea echipamentelor de prelucrare a datelor. 1. Etapa instrumentelor de calcul.
|
|
- Πρίσκιλλα Σαμαράς
- 7 χρόνια πριν
- Προβολές:
Transcript
1 1.INTRODUCERE Scurt istoric privind dezvoltarea echipamentelor de prelucrare a datelor. Un calculator modern reprezinta un sistem complex care inglobeaza in constructia sa tehnologii diverse: electronice, magnetice, electromecanice, electrono-optice etc. Astfel, in prezent, pentru realizarea unitatii centrale a unui calculator, care asigura stocarea programului si a datelor pe termen scurt, secventierea instructiunilor si efectuarea operatiilor de calcul, se utilizeaza, cu precadere, tehnologii microelectronice. Pentru stocarea datelor si a programelor pe termen lung se folosesc suporturi magnetice sub forma de benzi sau discuri, bazate pe diverse tehnologii magnetice/optice. Pentru implementarea operatiilor de intrare/iesire sunt folosite in principal tehnologiile electronice si electromecanice. Evolutia calculatoarelor este strans legata de progresele inregistrate de tehnologiile amintite mai sus. Cercetarile efectuate pentru realizarea de calculatoare cat mai performante au impulsionat aprofundarea unor noi aspecte in cadrul acestor tehnologii. Calculatoarele moderne reprezinta rezultatul unui indelungat proces de cautari ale unor mijloace tehnice adecvate pentru mecanizarea si automatizarea operatiilor de calcul. In evolutia mijloacelor de tehnica de calcul se pot evidentia mai multe etape. 1. Etapa instrumentelor de calcul. Secolul 12 en., China - abacul. Sfarsitul sec. 17 si inceputul sec.18, J. Napier si R. Bissaker -rigla de calcul. 2. Etapa masinilor mecanice de calcul ( bazate pe roti dintate angrenate: roata dintata joaca rolul elementului cu mai multe stari stabile, fiecare stare codifica o cifra zecimala. ) B. Pascal realizeaza o masina de adunat von Leibniz construieste o masina de adunat si inmultit Ch.Babbage proiecteaza primul calculator cu executie automata a programului. Proiectul prevedea principalele elemente ale calculatoarelor moderne (unitatile de: memorie, calcul, intrare, iesire si comanda ) E. Barbour realizeaza prima masina de calcul cu imprimanta W. Burroughs construieste o masina de calcul de birou perfectionata F. Baldwin si J. Monroe incep productia de masa a masinilor mecanice de calculat, cu patru operatii aritmetice. 3. Masini electromecanice de calculat (bazate pe roti dintate angrenate, actionate
2 electric ) Productia de masa a masinilor electromecanice de calculat prevazute cu operatiile: adunare, scadere, inmultire, impartire, radacina patrata, subtotal etc Masini electromecanice de calculat, bazate pe relee electromagnetice (Mark I ), cu program cablat. Releele electromagnetice si contactele lor joaca rolul elementelor bistabile. Cu ajutorul lor se pot codifica cifrele sistemului de numeratie binar. In 1937 Howard Aiken, de la Universitatea Harward, a propus proiectul Calculatorului cu Secventa Automata de Comanda. Acesta folosea principiile enuntate de Ch. Babbage si tehnologia de implementare pentru calculatoarele electromecanice produse de IBM. Constructia calculatorului Mark I a inceput in 1939 si s-a terminat la 7 august 1944, data ce marcheaza inceputul erei calculatoarelor. 4. Masinile electronice de calcul cu program memorat, bazate la inceput pe tuburi electronice, apoi pe tranzistori si circuite integrate pe scara simpla (SSI: sub 20 de tranzistori pe pastila de Si), medie (MSI: de tranzistori pe pastila de Si), larga (LSI: de tranzistori pe pastila de SI), foarte larga (VLSI: de tranzistori pe pastila de Si) si ultra larga (ULSI: peste de tranzistori pe pastila de Si). Primele calculatoare realizate cu tuburi electronice: 1943: la Universitatea din Pennsylvania a inceput constructia primului calculator bazat pe tuburi electronice ENIAC ( Electronic Numerical Integrator And Computer ), de catre o echipa avand in frunte pe J.P. Eckert, J.W. Mauchly si J. von Neumann. Cu aceasta ocazie s-a folosit ideea de a stoca in aceeasi memorie, atat datele, cat si programul, ceea ce a permis modificarea relativ usoara a programului; 1945: a inceput constructia unui alt calculator electronic EDVAC (Electronic Discrete Variable Automatic Computer) pe baza lucrarii lui J.von Neumann: "Prima schita de Raport asupra lui EDVAC". Dupa elaborarea structurii logice de baza a calculatorului cu program memorat, au fost stabilite entitatile functionale care concurau la realizarea acestuia: - un mediu de intrare care sa permita introducerea unui numar nelimitat de operanzi si instructiuni; - o memorie din care se citesc operanzi sau instructiuni si in care se pot introduce, in ordinea dorita, rezultatele; - o sectiune de calcul, capabila sa efectueze operatii aritmetice sau logice asupra operanzilor cititi din memorie;
3 - un mediu de iesire, care sa permita livrarea unui numar nelimitat de rezultate catre utilizator; - o unitate de comanda, capabila sa interpreteze instructiunile citite din memorie si sa selecteze diverse variante de desfasurare a operatiilor, in functie de rezultatele obtinute pe parcurs. Marea majoritate a calculatoarelor construite pana in prezent se bazeaza pe aceste principii, purtand numele de calculatoare de tip von Neumann. Pe baza proiectului EDVAC, Eckert si Mauchly au produs, in 1951, in cadrul unei companii proprii, primul calculator comercial UNIVAC 1. La Universitatea Princeton, von Neumann a condus realizarea, in 1951, a calculatorului IAS, care dispunea de posibilitatea de a-si modifica partea de adresa din instructiune. Aceasta facilitate asigura reducerea spatiului ocupat in memorie de catre program, ceea ce permite prelucrarea unor seturi mai mari de date. Avand in vedere tehnologiile utilizate in constructia calculatoarelor, incepand cu anul 1946, se pot evidentia cinci generatii de calculatoare. Intrucit functia de prelucrare a datelor este legata si de cea de transmitere a datelor, printre caracteristicile specifice fiecarei generatii de calculatoare trebuie incluse si elementele reprezentative privind tehnologiile telecomunicatiilor. In tabelul de mai jos se prezinta caracteristicile generatiilor de sisteme de calcul si de telecomunicatii. Tabelul 1. Evolutia generatiilor de calculatoare si a telecomunicatiilor. Generatia I ( ). 1. Hardware calculatoare: relee, tuburi electronice, tambur mag netic, tub catodic. 2. Software calculatoare: programe cablate, cod masina, autocod. 3. Exemple de calculatoare: ENIAC, EDVAC, UNIVAC 1, IBM 650, CIFA 1-4 1, CIFA , MARICCA, MECIPT Tehnologia telecomunicatiilor: teletype, telefon. 5. Performantele calculatoarelor: capacitate memorie 2 Koct, viteza de operare instr/s. 1 Denumirile calculatoarelor produse in Romania sunt prezentate cu litere cursive
4 Generatia a II-a ( ). 1. Hardware calculatoare: tranzistoare, memorii cu ferite, cablaj imprimat, discuri magnetice. 2. Software calculatoare: limbaje de nivel inalt (Algol, FORTRAN). 3. Exemple de calculatoare: NCR 501, IBM 7094, CDC 6600, DACICC-1/2, CET 500/501, MECIPT-2,DACICC Tehnologia telecomunicatiilor: transmisiuni numerice, modulatie in coduri de impulsuri. 5. Performantele calculatoarelor: capacitatea memoriei 32 Koct,viteza de operare instr/s. Generatia a III-a ( ) 1. Hardware calculatoare: circuite integrate, memorii semiconductoare, cablaj imprimat multistrat, microprocesoare, discuri magnetice, minicalculatoare. 2. Software calculatoare: limbaje de nivel foarte inalt, programare structurata, LISP, sisteme de operare orientate pe limbaje ( Algol, Pascal ),timp partajat, grafica pe calculator, baze de date. 3. Exemple de calculatoare: IBM , PDP11/XX, Spectra 70, Honeywell 200, Cray-1, Illiac IV, Cyber 205, RIAD 1-2, Felix C-256/512/1024, Independent 100/102F, Coral 4001/ Tehnologia telecomunicatiilor: comunicatii prin satelit, microunde, retele, fibre optice, comutare de pachete. 5. Performantele calculatoarelor: capacitatea memoriei 2 Moct, viteza de operare 5 mil.op/s. Generatia a IV-a ( ). 1. Hardware calculatoare: VLSI, sisteme distribuite, discuri optice, microcalculatoare de 16/32 biti,superminicalculatoare, supercalculatoare. 2. Software calculatoare: sisteme de operare evoluate, ADA, pachete de programe de larga utilizare, sisteme expert, limbaje orientate pe obiecte, baze de date relationale. 3. Exemple de calculatoare: IBM-43xx, VAX-11/7xx, IBM-308x, RIAD3, Coral 4021, Independent 106, Felix 5000, Coral Tehnologia telecomunicatiilor: retele integrate de comunicatii numerice ( digitale ). 5. Performantele calculatoarelor: capacitatea memoriei 8 Moct, viteza de operare 30 mil.instr/s
5 Generatia a V-a ( ). 1.Hardware calculatoare: tehnici evoluate de impachetare si interconectare, ULSI, proiectare circuite integrate 3D, tehnologii Ga-AS si Josephson, componente optice, arhitecturi paralele pentru prelucrarea inferentelor, retele neuronale. 2. Software calculatoare: sisteme de operare cu interfata evoluata cu utilizatorul, limbaje concurente, programare functionala, prelucrare simbolica (limbaje naturale, recunoasterea formelor: imagini/voce), Prolog, baze de cunostinte, sisteme expert evoluate, CAD, CAM, CAE, multimedia, realitate virtuala, web. 3. Exemple de calculatoare: statii de lucru, super-calculatoare, retele de supercalculatoare, proiectul japonez si alte proiecte elaborate in unele tari sau grupuri de tari din Europa. 4. Tehnologia telecomunicatiilor: dezvoltarea extensiva a sistemelor distribuite, retele locale, retele din fibra optica de mare capacitate retele de transmisii radio la frecvente de ordinul GHz cu spectru imprastiat, telefonie digitala mobila, fuzionarea tehnologiilor comunicatiilor si calculatoarelor, Internet. 5. Performantele calculatoarelor: capacitatea memoriei zeci-sute Moct, viteza de operare 1 Ginstr - 1 Tinstr/s. In prezent pentru circuitele integrate folosite in calculatoarele electronice se folosesc numeroase tehnologii care se pot grupa in tehnologii bipolare si tehnologii MOS Tehnologii bipolare: TTL (Transistor Transistor Logic): - TTL-S (Schottky TTL), - TTL-LS (Low-Power Schottky TTL), - TTL-AS (Advanced Schottky TTL), - TTL-ALS (Advanced Low-power Schottky TTL), - FAST (Fairchild Advanced Schottky TTL). ECL (Emitter Coupled Logic). I2L (Integrated Injection Logic). Tehnologii MOS:
6 PMOS (MOS canal P). NMOS (MOS canal N): - HMOS (High performance MOS). CMOS (Complementary MOS): - HCMOS (High density CMOS), - ACL (Advanced CMOS Logic). MNOS (Metal Nitride Oxide Semiconductor): - FAMOS (Floating gate Avalanche injection MOS), - FLOTOX (FLOating gate Tunnel Oxid)e. Circuitele integrate care se folosesc in constructia calculatoreor se plaseaza in categoriile: standard, specifice aplicatiilor ( ASIC - Application Specific Integrated Circuits ) si programabile/configurabile. La rindul lor circuitele ASIC se impart in: Circuite personalizate la cerere ( Semi-Custom ): - Circuite configurabile ( Programmable Logic Devices ), - Circuite predifuzate ( Gate Arrays ). Circuite realizate la comanda ( Custom ): - Circuite precaracterizate ( Standard Cells ), - Circuite realizate complet la cerere ( Full Custom ). Se aminteste ca tranzistorul a fost inventat in anul 1947 si ca primele exemplare ocupau o suprafata de 3,5 mm 2. La sfirsitul anilor 50 a aparut circuitul integrat care, grupand pe aceeasi pastila mai multi tranzistori, a avut o evolutie spectaculoasa in sensul dublarii numarului de componente pe pastila, la fiecare 18 luni. Aceasta s-a datorat in primul rand numeroaselor perfectionari ale proceselor tehnologice, care permit rezolutii de ordinul a 2,5µm 0,18 µm. In continuare se vor da unele date privind tehnologiile circuitelor VLSI, in general, evolutia memoriilor si a procesoarelor.
7
8
9
10
11 Reprezentarea sistemelor de calcul pe niveluri ierarhice. Nivelul PMS (Processor, Memory Switches ) Structuri: retele, sisteme de procesoare multiple, calculatoare. Componente: procesoare, memorii, comutatoare, traductoare, operatori asupra datelor, legaturi, controlere. Nivelul Subnivelul Aplicatii Progra- Limbajelor melor. evoluate. Rutine aplicative Pachete de asistenta in in timpul executiei. Sisteme Operare Subnivelul ISP (Instruction Set Processor) Structuri: pachete statis tice, ecuatii cu derivate partiale, simulatoare de sisteme energetice. Componente: biblioteci matemetice, rutine, rutine de formatare. Structuri: functii matematice, pachete pentru aplicatii grafice. Componente: subrutine, alocatoare de memorie. Structuri: alocatoare de memorie, rutine de I/E, sisteme de fisiere. Componente: apeluri ale sistemului de operare. Structuri: planificatoare, alocatoare, comunicatii. Componente: subrutine, corutine, programe. Structuri: set de instructiuni. Componente: stare memorie, stare procesor, calcul adresa efectiva, decodificare instructiuni, executie instructiuni. Nivelul Subnivelul Unitate Micropro- Structuri: microprogram, microrutina. proiec- transferu- de co- gramata Componente: microsecventi ator, memorie tarii rilor intre manda de microinstructiuni. registre Conven- Structuri: secventiator. tionala Componente: masini secventiale. Unitate de executie Structuri: unitate aritmetica, registre generale. Componente: registre, operatori asupra datelor. Subnivelul Circuite secventiale Structuri: numaratoare, genratoare circuitelor functionale, registre. de comuta- Componente: bistabile, latch-uri,linii de tie. intarziere
12 Circuite combinationale. Structuri: codificatoare, decodificatoare, operatori asupra datelor. Componente: porti logice. Nivelul circuitelor. Structuri: amplificatoare,elemente de intirziere, orologiu /ceas, porti. Componente: tranzistoare, relee, rezistente, capacitati. Bibliografie: 1. A.Petrescu. Calculatoare numerice. Note de curs , ( site-ul: si pe suport magnetic). 2. A.Petrescu. I. Francisc, Z. Racovita. Initiere in Structura Calculatoarelor Electronice. Editura Teora A.S. Tanenbaum. Organizarea Structurata a Calculatoarelor. Editura AGORA, L.N. Vintan. Arhitecturi de Procesoare cu Paralelism la Nivelul Instructiunilor. Editura Academiei Romane D. Grigoras. Calcul Paralel. De la sisteme la programarea aplicatiilor. AGORA J. Hennessy, D. Paterson. Computer Architecture. A Quantitative Approach. 2 nd ed Morgan Kaufmann Publishers, Inc. 7. Z.F. Baruch. Sisteme de intrare/iesire ale calculatoarelor. Editura Albastra S.G. Shiva. Computer Design and Architecture. 3 rd Ed. Marcel Dekker Publishing House J. Hennessy, D. Paterson. Computer Organization and Design. The Hardware/Software Interface. 2 nd ed Morgan Kaufmann Publishers, Inc. 10. R. Baron, L. Higbie. Computer Architecture Addison Wesley Publishing Company. 11. M. Morris Mano, Ch. R. Kime. Logic and Computer Design Fundamentals 2 nd ed. Prentice Hall International. Inc. 12. David Van den Bout. The Practical XILINX Designer Lab Book.Version 1.5, Prentice Hall. 13. V..P. Heuring, H. F. Jordan. Computer Systems Design and Architecture. Addison Wesley Longman, Inc
13 1.2 Elemente introductive privind informatia. Memorarea, regasirea si prelucrarea informatiei reprezinta operatii de baza intilnite in studiul oricarui capitol al stiintei calculatoarelor. Din punct de vedere lexicografic, informatia reprezinta cunostintele transmise sau receptionate, care se refera la circumstante sau fapte particulare. Sub aspect filosofic informatia se afla in urmatoarea relatie, in raport cu entitatile: data, cunostinta, intelepciune: data < informatie < cunostinta < intelepciune. Domeniul ingineriei considera ca informatia inlatura/elimina incertitudinea. Astfel, informatia nu are nimic de-a face cu cunostinta sau semnificatia. Informatia este, in mod natural, ceea ce nu se poate prezice. In cadrul procesului edificarii domeniului teoriei informatiei s-au dat si precizat o serie de definitii formale privind continutul informational al unui mesaj ( Hartley , Kolmogorov , Wiener , Shannon ). Se considera un sistem reprezentand o multime formata din n obiecte, avand proprietatea ca fiecare obiect poseda o probabilitate independenta p i de aparitie. Incertitudinea H asociata acestui sistem este definita ca: n H = - p i log 2 (p i ), i=1 in timp ce valoarea H, reprezinta cantitatea de informatie asociata sistemului Se presupune existenta unei urne cu 8 bile numerotate de la 1 la 8. Probabilitatea de a extrage o cifra data, in urma unei trageri, este egala cu 1/8. Incertitudinea medie asociata cu numarul selectat poate fi calculata cu ajutorul formulei de mai sus: 8 H = - 1/8. log 2 (1/8) = - log 2 (1/8) = log 2 (1/8) = 3 biti. i=1 Pentru a masura incertitudinea asociata sistemului s-a folosit o unitate de masura numita bit (binary digit). Un bit este o masura a incertitudinii sau a informatiei asociate unei conditii cu doua stari: fals/adevarat, inchis/deschis etc. Astfel, atunci cand se afirma ca rezultatul aruncarii unei monede este pajura, s-a comunicat o informatie de: log 2 (2/1) = 1 bit.
14 Cantitatea de informatie care se castiga este egala cu cantitatea de incertitudine inlaturata (in cazul de fata prin aflarea numarului extras din urna). In situatia numarului selectat din urna s-a calculat ca sunt necesari trei biti de informatie pentru a afla numarul de pe bila extrasa. Din punctul de vedere al definitiei bitului, aceasta inseamna ca este permisa punerea a trei intrebari cu raspuns de tipul da - nu, pentru a cunoaste numarul extras: Da n<4? Nu n<2? n<6? Da Nu Da Nu... n<2? n<4? n<6? n<8? Da Nu Da. Nu Da Nu Da. Nu n=1 n=2 n=3 n=4 n=5 n=6 n=7 n=8 Cei trei biti de informatie, asociati cu aflarea numarului inscris pe bila, pot fi asamblati in mesaje cu lungimea de trei simboluri 0 sau 1, unde 1 reprezinta simbolul asociat raspunsului "da", in timp ce 0 este simbolul asociat cu raspunsul "nu". In tabelul de mai jos se prezinta o schema posibila pentru codificarea evenimentului legat de extragerea din urna a unei bile date: Numarul bilei Schema mesajului Se poate face observatia ca, in general, pentru a specifica identitatea unui numar inscris pe bila extrasa, se pot folosi mai multe scheme de mesaje.
15 Legatura dintre mesaj si informatie reprezinta o aplicatie c: c M I, care asociaza ( pune in corespondenta ) mesajului M, informatia I. Corespondenta c poarta numele de schema de codificare (cod, regula, de interpretare, cifru, cheie etc. ). Adesea se pune problema cantitatii medii de informatie continuta intr-un sir de date, reprezentand M mesaje. Aceasta poarta numele de entropie si poate fi calculata cu ajutorul urmatoarei formule: unde: N entropia = (M i /N).log 2 (N/M i ), i=1 - (M i /N) reprezinta probabilitatea mesajului i, iar - log 2 (N/M i ) constituie informatia din mesajul i. Codificarea informatiei. Codificarea informatiei se refera la reprezentarea acesteia. Gasirea unei codificari corespunzatoare si eficiente constituie o problema extrem de importanta intrucat aceasta are un impact pe o serie de niveluri. Astfel, la nivelul echipamentelor de calcul si memorare, are influenta asupra numarului de componente. In ceea ce priveste nivelul eficientei, influenta se refera la numarul de biti utilizati. Sunt influentate, de asemenea, nivelul fiabilitatii, sub aspectul zgomotului si nivelul securitatii, in ceea ce priveste criptarea. Codificarea cu lungime fixa. In cazul in care evenimentele au aceeasi probabilitate de aparitie, se pot utiliza codurile de lungime fixa. Un asemenea cod trebuie sa foloseasca un numar suficient de biti pentru a putea reprezenta continutul informational. De exemplu, in cazul cifrelor zecimale {0,1,2,3,4,5,6,7,8,9} se foloseste un cod de 4 biti (binar-zecimal), denumit, in engleza, BCD (Binary Coded Decimal). Lungimea codului (numarul de biti) rezulta din urmatoarea expresie:
16 10 (1/10).log 2 (10) = 3,322 < 4 biti i=1 De asemenea, pentru cele 84 de caractere din Engleza: {A-Z (26), a-z (26), 0-9 (10), punctuatie (9), matematice(9), financiare (4)} se foloseste un cod binar de 7 biti denumit ASCII (American Standard Code for Information Interchange). Lungimea codului ASCII rezulta din expresia de mai jos: 84 (1/84).log 2 (84)= 6,392 < 7 biti. i=1 In continuare se vor prezenta exemple de codificari de lungime fixa. Codificarea numerelor. Numerele pozitve se pot codifica direct, sub forma unei secvente de biti, carora li se asociaza ponderi diferite. De la dreapta la stanga, aceste ponderi reprezinta, in ordine crescatoare, puteri ale lui 2. Valoarea v a unui numar de n biti, codificat in acest mod, este data de expresia: n-1 v = 2 i.b i i=0 unde b i constituie rangul i (bitul i) al reprezentarii. Pentru numarul binar: se va obtine valoarea 1721 in zecimal. Adesea, reprezentarea numerelor in binar este greoaie, datorita numarului mare de ranguri. Reprezentari cu lungime mai scurta se obtin in cazul utilizarii unor baze, care sunt puteri ale lui 2. De exemplu: 8 si 16. In aceste situatii trecerea de la reprezentarea binara la cea octala/hexazecimala si invers se realizeaza mecanic, impartind numarul
17 binar, de la dreapta la stanga, in triade/tetrade binare, carora li se pun in corespondenta cifrele octale/hexazecimale corespunzatoare. Baza 8 Baza 16 Triada binara Cifra octala Tetrada binara cifra hexa. Tetrada binara cifra hexa a b c d e f Astfel, numarul binar: (2) va avea urmatoarele reprezentari: octala: 3271 (8) si hexazecimala: 6b9 (16), care sunt de trei ori si, respectiv, de patru ori mai scurte. Numere cu semn, reprezentarea in complementul fata de 2. Un numar cu semn, in reprezentarea pe n biti, complementara fata de 2, va avea urmatoarea structura: n biti -2 n-1 2 n bit de semn Gama de reprezentare:[ -2 n-1, 2 n-1-1] virgula zecimala (0 pentru 0, 1 pentru < 0) Astfel, numerele zecimale 47 (10) si 47 (10), vor avea urmatoarele reprezentari binare, pe 8 biti, in complementul fata de 2: 47 (10) (2) -47 (10) (2)
18 Reprezentarea numerelor intregi cu semn, in complementul fata de 2, permite utilizarea aceleiasi proceduri mod 2 n, atat pentru adunare, cat si pentru scadere. De asemenea, procedura se utilizeaza si in cazul numerelor fara semn. Deplasand virgula zecimala spre stanga, se pot reprezenta si numerele fractionare, ca in exemplul urmator: 1101,0001 = = ,0625 = -2,9357 Codificarea cu lungime variabila. In cazul unor evenimente cu probabilitati diferite de aparitie, se vor folosi secvente mai scurte pentru codificarea evenimentelor cu probabilitati mari de aparitie, in timp ce pentru codificarea evenimentelor cu probabilitati mici de aparitie se vor folosi secvente mai lungi. Exemplul 1. Se considera 4 evenimente: A, B, C, D, cu probabilitatile de aparitie si cu codurile asociate, conform tabelei de mai jos: Eveniment A B C D Prob. aparitie (p i ) 1/2 1/4 1/8 1/8 Codificare Informatia medie = (0,5).(1) + (0,25).(2) + (2).(0,125).(3) = 1,750 biti Transmiterea informatiei privind 1000 de evenimente necesita, in medie, 1750 biti. O schema de decodificare a unui mesaj ce contine codurile unei secvente de evenimente A, C, D, A, B, C etc. se conformeaza urmatoarei structuri arborescente: 0 1 A B C D
19 Pentru a realiza o codificare mai efeicienta, in mod current, se codifica secvente de evenimente si nu evenimente individuale. Aceasta abordare este intalnita in algoritmii de compresie a fisierelor. Exemplul 2. In cadrul acestui nou exemplu se considera suma a doua zaruri, in sensul evaluarii continutului de informatie existent in suma obtinuta la o aruncare. Rezultatele inregistrate in cadrul mai multor aruncari au probabilitati diferite. Posibilitatile de obtinere a diferitelor sume sunt prezentate mai jos: Informatia medie, la o aruncare, furnizata de suma a doua zaruri este urmatoare: i med = (M j /N).log 2 (N/M j ) = (p j ).log 2 (1/p j ) = 3,275 biti. j=2 j=2 In continuare, se pune problema codificarii sumelor obtinute in cadrul aruncarilor a doua zaruri. Cel mai mare intreg dupa 3,274 este 4. Astfel, cu 4 biti, se pot codifica cele 11 valori ale sumelor. Vor mai ramane neutilizate 5 coduri, corespunzatoare lui 0, 1, 13, 14, si 15. Se pune problema daca exista o solutie de codificare mai buna? Avand in vedere continuturile informationale diferite, ale diferitelor combinatii obtinute la aruncarea zarurilor, se poate recurge la coduri de lungime diferita. Astfel, se poate construi un arbore binar, selectand recursiv cele doua simboluri cu cea mai mica
20 probabilitae, combinandu-le apoi intr-un nod si inserand acest nod ca un nou simbol a carui probabilitate de aparitie este egala cu suma probabilitatilor celor doi copii. Procesul se continua pana cand se ajunge la un singur simbol. Rezultatul acestei proceduri este arborele reprezentat mai jos, in cadrul caruia au fost atribuite codificari fiecarui smbol prin etichetarea fiecarui copil din extrema dreapta cu 1 si a fiecarui copil din extrema stanga cu 0. Codificarea pentru fiecare simbol particular se obtine prin parcurgerea arborelui pe o cale ce porneste de la radacina acestuia pana la simbolul care intereseaza. Aceasta forma de codificare cu lungime variabila poarta numele de codificare Huffman. Eficienta codificarii. Eficienta unei metode de codificare poate fi masurata prin diferenta intre continutul informational (entropia) al unui sir de simboluri si dimensiunea medie a codului. Dimensiunea medie a codului stabilit pentru sumele obtinute la aruncarea a doua zaruri se calculeaza astfel: d med = (1/36).5 + (2/36).4 + (3/36).3 + (4/36).3 + (5/36).3 + (6/36) (5/36).3 + (4/36).3 + (3/36).4 + (2/36).4 + (1/36).5 = 3,306 Rezultatul obtinut: d med = 3,306 se apropie destul de mult de i med = 3,275. In continuare se pune problema gasirii unor metode si mai eficiente de codificare.
21 Consideratii privind codificarea. Schemele de codificare, care isi propun sa corespunda continutului informational al unei secvente de date, se bazeaza pe reducerea redundantei. Acestea sunt in esenta tehnici de compresie a datelor. In multe cazuri insa se urmareste cresterea redundantei in vederea cresterii rezistentei (coduri detectoare si corectoare de erori)la zgomot a sirului de date sau a simplificarii manipularii datelor, prin stabilirea unor coduri de lungime fixa. Detectarea si corectarea erorilor. Se presupune ca se doreste transmisia sigura a rezultatului aruncarii unei monede, ceea ce corespunde unei informatii de un bit.. Daca pe parcursul transmisiei a aparut o eroare de un singur bit, un rezultat 0 va fi receptionat ca 1 si invers. Ambele coduri sunt valide si nu se poate stabili, la receptie, faptul ca, in timpul transmisiei, a aparut o eroare. In acest context se pune problema numarului de pozitii binare in cadrul carora bitii corespunzatori a doua coduri valide, de aceeasi lungime, sunt diferiti. Aceasta mai poarta numele de distanta Hamming. Astfel, modificarea unui bit, intr-un rang dat al unui cod, sa nu-l transforme pe acesta intr-un alt cod valid. In exemplul privitor la rezultatul aruncarii unei monede si al comunicarii acestuia, distanta Hamming intre cele doua coduri este egala cu unu. Detectarea erorii. In mod natural se doreste un sistem de codificare in cadrul careia o eroare de un singur bit sa nu produca un alt cod valid. Pentru a asigura detectarea unei erori de un singur bit, in cadrul unui cod de lungime oarecare, se adauga un bit de paritate. In acest mod distanta Hamming minima intre doua coduri valide devine egala cu 2. Spre exemplificare se prezinta mai jos o diagrama de codificare a rezultaului aruncarii unei monede, folosind un bit suplimentar de paritate para, ceea ce inseamna ca bitul suplimentar va fi astfel ales incat numarul total de unitati din cuvantul cod sa fie par.
22 Daca D este distanta minima Hamming intre doua cuvinte-cod, se pot detecta pana la (D 1) erori la nivel de bit. Detectarea erorilor. Marind distanta Hamming intre doua cuvinte-cod valide la 3, se poate garanta ca perechile de cuvinte-cod, care se obtin in cazul unei erori de un bit, nu se suprapun. In cazul in care se detecteaza o eroare, aceasta se poate corecta intrucat pozitia bitului eronat poate fi localizata. Aceasta rezulta din diagrama- hipercub de mai jos. Daca D este distanta Hamming minima intre doua cuvinte-cod valide, se pot corecta (D-1)/ biti eronati. Intrebari: - se pot detecta in mod sigur doi biti eronati in timp ce se corecteaza o eroare de un bit? - intotdeauna este necesara triplarea numarului de biti?
23 Schema de codificare cu 4 biti. Prin folosirea a 4 biti se pot genera 8 codificari cu distanta Hamming egala cu 1, ceea ce permite detectarea unei erori la nivelul unui singur bit. Astfel, se pot codifica 3 biti de informatie cu 4 biti. Formatele de biti care contin o eroare difera de formatele codurilor valide prin paritate, adica numarul de unitati este impar. Aceasta rezulta din diagrama de mai jos, care constituie reprezentarea in plan a hipercubului corespunzator codificarii. Din pacate schema de codificare cu 4 biti nu este mai buna decat schema de codificare cu 3 biti, din punctual de vedere al numarului de coduri separate la o distanta Hamming egala cu 3. Se pot gasi insa doua codificari cu distanta Hamming egala cu 4, ceea ce permite detectarea a doua erori de cate un bit si corectia unei singure erori de un bit. Dupa cum se vede din diagrama de mai sus exista doar doua coduri care sunt separate printr-o distanta Hamming egala cu 3. Schema de codificare cu 5 biti. Pentru a obtine mai mult de doua coduri separate printr-o distanta Hamming egala cu 3, trebuie utilizati 5 biti pentru codificare.
24 Mai jos se prezinta 5 coduri {0000, 01111, 10101, 1010} separate printr-o distanta Hamming 3. In aceste conditii se poate corecta o eroare de 1 bit si se pot detecta unele dintre erorile de 2 biti (dar nu toate). Aplicatiile teoriei codurilor. Codificarea permite solutionarea multor probleme: - detectarea erorilor multi-bit: folosind verificarea redundantei ciclice (CRC); - corectarea erorilor in rafala: coduri reed-solomon; - imbunatatirea raportului S/Z: codificari/decodificari Viterbi, PRML; In practica se utilizeaza combinatii de coduri diferite. Spre exemplu, in canalul numeric satelit-receptor (DBS TV):
25 3. Elemente introductive privind operarea si organizarea unui sistem numeric. Un calculator numeric este constituit dintr-un ansamblu de resurse fizice ( hardware ) si de programe de sistem ( software de baza ), care asigura prelucrarea automata a informatiilor, in conformitate cu algoritmii specificati de catre utilizator, prin programele de aplicatii ( software de aplicatii - utilizator ). Conform principiilor stabilite de John von Neumann un calculator trebuie sa posede urmatoarele elemente: - un mediu de intrare, pentru instructiuni si date ( operanzi ); - o memorie in care se stocheaza programul, datele initiale, rezultatele partiale si finale; - un ansamblu de prelucrare, capabil sa efectueze operatii aritmetice si logice, in conformitate cu un algoritm dat, specificat prin program; - un mediu de iesire, pentru extragerea rezultatelor si prezentarea acestora intr-o forma accesibila utilizatorului; - un element de decizie care, pe baza rezultatelor partiale obtinute pe parcursul prelucrarii, va selecta una din optiunile posibile de continuare a calculelor. Programul elaborat, pentru un calculator numeric, reprezinta descrierea algoritmului de rezolvare a unei probleme ( clase de probleme ) date, cu ajutorul instructiunilor pe care le poate executa calculatorul respectiv. Conform propunerii lui von Neumann, datele si programul sunt plasate in aceeasi memorie, ceea ce a permis, la calculatoarele din generatia I-a, efectuarea unor operatii aritmetice sau logice asupra unor campuri din instructiune, in vederea reducerii dimensiunilor programelor. Functionarea calculatorului are un caracter secvential, constand in citiri si executii succesive ale instructiunilor programului. Intr-un calculator pot fi evidentiate, pe parcursul executiei unui program, doua fluxuri de informatii: fluxul datelor, care se prelucreaza, si fluxul instructiunilor, care controleaza, comanda procesul de calcul. Calculatoarele bazate pe principiile amintite mai sus se numesc calculatoare de tip von Neumann sau conventionale, fiind comandate de fluxul de instructiuni.
26 In prezent se studiaza si realizeaza sub forma de modele de laborator noi tipuri de calculatoare, neconventionale, bazate pe fluxul de date si fluxul de cereri. In primul caz sunt amorsate, la un moment dat, toate operatiile din program pentru care sunt disponibile datele implicate. In al doilea caz necesitatea unui rezultat activeaza toate operatiile de calcul asociate. Intrucat un calculator numeric este folosit, in esenta, pentru implementarea automata a unui algoritm, se reaminteste ca un algoritm reprezinta un set finit de reguli, care precizeaza o secventa de operatii, pentru solutionarea unei clase date de probleme. Un algoritm poseda cinci elemente mai importante: - caracter finit: trebuie sa se termine dupa un numar finit de pasi; - caracter determinist: fiecare pas al unui algoritm trebuie definit in mod precis, actiunile care se executa trebuie sa fie specificate riguros, fara ambiguitati, pentru fiecare caz. - intrare: un algoritm are una sau mai multe intrari, reprezentind datele initiale; - iesire: un algoritm are una sau mai multe iesiri, care reprezinta rezultatele, aflate intr-o anumita relatie cu intrarile; - eficacitate: un algoritm trebuie sa se execute exact si intr-un interval finit de timp. Printre altele, analiza algoritmilor are ca scop determinarea performantelor acestora, in sensul ca, daca pentru o problema exista mai multi algoritmi, trebuie sa se decida care din ei este mai potrivit, sub aspectul numarului de operatii, al spatiului de memorie necesare si, uneori, al puterii consumate, pentru implementare. Teoria algoritmilor trateaza, in principal, problemele existentei sau nonexistentei algoritmilor eficienti,pentru efectuarea unor calcule particulare. Inainte de a incerca o descriere formala a unei metode de calcul se vor preciza unele notiuni: - variabilele de stare reprezinta marimi primare, care presupun unele valori bine definite (ele pot reprezenta parametrii unui sistem fizic); - un ansamblu de variabile de stare, in care fiecare poarta un nume, reprezinta multimea variabilelor de stare; - o atribuire data de valori pentru toate variabilele multimii variabilelor de stare poarta numele de stare a multimii sau o stare presupune o valoare data fiecarei variabile de stare;
27 - ansamblul tuturor starilor posibile, pentru o multime data de variabile de stare, formeaza spatiul starilor pentru acea multime; - un calcul in spatiul starilor reprezinta o secventa de stari in acel spatiu, primul element al secventei reprezinta starea initiala, iar ultimul constituie starea finala. Din punct de vedere formal, metoda de calcul reprezinta un cuadruplu: < Q, I, E, f >, in care s-au facut urmatoarele notatii: Q -multimea starilor calculului, I - multimea intrarilor, E -multimea iesirilor, f - multimea functiilor de calcul, definite in Q. In plus: I Q si E Q, iar pentru q, q E, f trebuie sa lase nemodificate elementele multimii E, adica: f(q) = q, Fiecare intrare x in multimea I defineste o secventa de calcul: x 0, x 1, x 2,..,x k,..., dupa cum urmeaza: x 0 = x si x (k+1) = f(x k ), pentru k > 0. Se poate spune ca secventa de calcul se termina in k pasi, daca k este cel mai mic intreg pentru care x k este in E. In acest caz se spune ca intrarea x produce iesirea x k. Se observa ca daca x k E, la fel si x (k+1) E, intrucat, conform definitiei date mai sus, x (k+1) = x k. Unele secvente de calcul pot avea o lungime infinita. Un algoritm reprezinta o metoda de calcul care se termina dupa un numar finit (eventual foarte mare) de pasi, pentru toate intrarile x I. Exemplu: Algoritmul MAX. Acest algoritm gaseste elementul cu valoarea cea mai mare al multimii { A(i) }, unde 1 i n, si o atribuie iesirii MAX. In cele ce urmeaza operatorul " " specifica atribuirea unei valori variabilei de stare din membrul stang, obtinuta prin evaluarea functiei din membrul drept al expresiei.
28 Se vor folosi doua variabile de stare pentru calcul: x c ( x-curent ), x m (x-maxim ). ALGORITM: MAX. intrari: { A(i) }, 1 i n, iesiri: MAX, var.de stare: { x c, x m }. f: secventa de calcul: 1. if n < 1 go to STOP 2. if n = 1 then MAX A(1) and go to 9 (STOP) 3. x m A(1); x c A(2); 4. if x m < x c then x m x c 5. x c A(i) 6. i i+1 7. if i > n then MAX x m and go to STOP 8. go to 4 9. STOP Mecanizarea acestui algoritm presupune existenta unui modul, care dispune de urmatoarele resurse hardware: - RC: registru in care se aduce valoarea curenta A(i); - RM: registru in care se plaseaza valoarea curenta maxima A(j); - N si UNU: registre in care se pastreaza constantele n si 1; - CNT: contor pentru indexul i; - RD: registru in care se plaseaza rezultatul scaderii; - MAX: registru de iesire ( coincide ca nume cu iesirea MAX ); - START: bistabil in care se inregistreaza comanda externa start; - SUM/DIF: unitate logica combinationala, care efectueaza adunarea/scaderea; - un automat cu 10 stari distincte. Se considera ca intrarile A(i) sunt furnizate din exterior in mod curent si ca nu sunt stocate in modul. Astfel, se pot observa, in continuare, unele diferente nesemnificative functional in implementarea fizica a algoritmului, in raport cu prezentarea lui teoretica. Schema care va efectua automat algoritmul va purta numele MODULE: MAX si va opera cu numere binare intregi si pozitive.
29 Urmeaza descrierea modulului si a modului sau de operare (nu se specifica lungimea operanzilor ). Operatorul " " specifica fortarea valorii numerice, obtinuta ca urmare a evaluarii termenul din dreapta al expresiei, in registrul din termenul din stanga al expresiei. MODULE: MAX INTRARI: A(i); start; RESET; n; IESIRI: MAX; MEMORII: RC; RM; N; UNU; CNT; RD; MAX; START /* Registre care corespund /* variabilelor de stare, atat pentru unitatea de executie, cat si pentru unitatea de comanda 1. if (START = 0) then go to 1 /* cicleaza pentru START 2. RC 0; RD 0; RM 0; N n; UNU 1; CNT 1; START 0 /* Initializare 3. if N = 0 then go to 1 4. RC A(CNT) 5. RD DIF(RC,RM) /* DIF(RC,RM) = RC - RM 6. if RD > 0 then RM RC 7. CNT SUM(CNT,UNU) /* SUM(CNT,UNU) = CNT + UNU 8. RD DIF(N,CNT) /* DIF(N,CNT) = N - CNT 9. if RD < 0 then MAX RM and go to go to 4 ENDSEQ /* Sfarsit secventa if RESET = 1 then go to 1 /*Operatia RESET indiferent de stadiul executiei in /*secventa if start = 1 then START = 1 /* Fortarea in 1 a bistabilului START, la aparitia intrarii /*start = 1 ENDMODULE /* Sfarsitul descrierii modulului Implementarea fizica a modulului presupune existenta urmatoarelor elemente: - un ceas, care asigura sincronizarea sistemului; - o intrare start, sincrona cu ceasul, care este stocata temporar intr-un bistabil (START); - o intrare asincrona RESET,care forteaza sistemul instarea 1.
30 Intrarea RESET este indicata la sfirsitul descrierii secventei de lucru, deoarece se aplica asincron. Descrierea secventei se termina cu marcajul ENDSEQ, modulul fiind cuprins intre numele MODULE si marcajul ENDMODULE. Stabilirea schemei modulului presupune evidentierea unitatii de executie, in care se prelucreaza fluxul de date, si a unitatii de comanda, care asigura fluxul de control, mentionindu-se resursele hardware asociate. Prima iteratie a procesului de realizarea/ mecanizare a algoritmului MAX este data mai jos: Unitatea de Executie A[i] RC SUM/DIF N MAX n RM RD UNU MAX CNT RESET Ceas RD.. Comenzi start RESET START CEAS AUTOMAT DE COMANDA Unitatea de Comanda
31 Evolutia automatului din unitatea de comanda poate fi ilustrata cu ajutorul grafului de mai jos, in care nodurile marcate cu cifre reprezinta starile automatului, iar arcele orientate marcheaza taranzitiile conditionate/neconditionate. RESET 1. START=0 start START=1 2. N = N RD < RD 0
32 Diagrama de stari prezentata mai sus se utilizeaza pentru proiectarea automatului de comanda, care asigura fluxul de control necesar derularii algoritmului MAX. Procesul de proiectare a sistemului numeric, corespunzator algoritmului dat, necesita mai multe etape, care vor fi ilustrate in cadrul cursului Calculatoare Numerice. Masina Turing. In literatura de specialitate consacrata studierii posibilitatilor de mecanizare a algoritmilor Masina Turing joaca un rol important. Masina Turing se caracterizeaza prin doua principii de baza: - descompunerea in operatii elementare a executiei unui algoritm este dusa la limita, de exemplu adunare se implementeaza prin incrementari repetate; - memoria masinii se prezinta sub forma unei benzi nelimitate, formata din compartimente succesive in care se poate afla un simbol, reprezentind o informatie; - conceptul de memorie infinita este pur matematic. Masina opereaza asupra informatiilor reprezentate prin simboluri luate dintr-un alfabet finit: a 0, a 1, a 2,...,a i, exterior masinii. Printre simboluri se afla un simbol special V, care indica lipsa unei informatii. Fiecare compartiment al benzii, la un moment dat, contine un singur simbol. Functionarea are loc in cicluri succesive, tratandu-se la fiecare pas cate un singur simbol. Masina poseda un cod de instructiuni, specificat intr-un alfabet intern: F 0, F 1, F 2,...,F p. O instructiune defineste in fiecare ciclu starea dispozitivului de prelucrare. Unul din codurile de instructiuni, notat cu A, specifica oprirea masinii. In fiecare ciclu un simbol de pe banda este prelucrat pe baza unui operator F i. In afara benzii infinite masina Turing mai contine: - un element de executie si comanda: operatorul Ω, - o celula de memorie, M, in care se stocheaza instructiunea ( functia ) urmatoare, - un dispozitiv, d, de antrenare a benzii in ambele sensuri, prin fata unui cap de citire/scriere; comanda de antrenare a benzii este codificata dupa cum urmeaza: "+" deplasare la stanga, "-" deplasare la dreapta, "0" fara deplasare. Schema bloc a masinii Turing este data mai jos:
33 Informatia de prelucrat Instructiunea curenta a I a i F i Cap citire/ scriere Operatorul Ω M.. a j d F j. Informatia prelucrata Instructiunea urmatoare. Banda infinita/memoria.. - d 0 Comanda deplasarii + Functionare. Incepand cu o informatie a i, de pe banda, masina intra in functiune. Daca operarea are loc in timp finit, adica se va intalni simbolul A, masina va prelucra informatia a i. In caz contrar, operarea are loc fara oprire si masina nu poate trata informatia respectiva. Operarea masinii Turing este definita prin tabelul de corespondenta intre dubletii de intrare < a i, F i > si tripletii de iesire < a j, F j, d >. In fiecare ciclu de lucru operatorul Ω efectueaza transformarea: < a i, F i > < a j, F j, d >, simbolul a i fiind inlocuit cu simbolul a j. Banda este deplasata conform codului simbolului d, iar F j este stocat in memoria M, pana in ciclul urmator. In vederea executiei, un algoritm trebuie descris sub forma urmatorului tablou:
34 F i a i a j F j d Structura acestui tablou este continuta in organizarea interna a operatorului Ω. Operarea poate fi amorsata cunoscand continutul celulei de pe banda, plasata in fata capului de citire/scriere, si instructiunea initiala. Pentru exemplificare, se va considera cazul unui numar zecimal n care va fi incrementat. Se presupune ca pe banda se afla, in celule succesive, cifrele unui numar zecimal, incadrate la stanga si la dreapta de simbolul V.Algoritmul consta in examinarea cifrelor incepand de la dreapta. Se incrementeaza prima cifra la dreapta si procesul se opreste daca rezultatul este diferit de zero. In cazul in care rezultatul este zero ( depaseste 9 ) se mai efectueaza o deplasare a benzii spre dreapta, incrementandu-se noua cifra. Alfabetul extern al masinii consta in 10 cifre zecimale si din simbolul vid V. Alfabetul instructiunilor F i contine functia F, care asigura incrementarea si functia A care comanda oprirea. Tabelul de functionare este urmatorul Informatia a i Instructiunea F i 0 1 A A A A A A A A A F - V 1 A 0
35 In cazul cifrelor 0 8, are loc incremntarea si oprirea masinii, iar in cazul cifrei 9 procesul continua prin incrementarea simbolului si propagarea transportului, cu deplasarea benzii spre dreapta si incrementarea urmatorului simbol. Daca urmatorul simbol este din gama 0-9 situatia este aceeasi. Daca simbolul este V, are loc inlocuirea lui cu 1 si masina se opreste. Concluzii. Masina Turing reprezinta cea mai simpla entitate care se poate imagina in vederea prelucrarii automate a informatiei. In masina Turing se pot regasi o serie de elemente comune cu calculatoarele numerice: - codificarea informatiei; exista doua limbaje/coduri independente: limbajul extern, pentru codificarea informatiilor manipulate de catre masina, si limbajul propriu al instructiunilor/functiilor masinii; - functionarea automata a masinii se bazeaza pe un set limitat de instructiuni/functii; - operarea masinii are un caracter secvential, executia instructiunii curente este insotita de pregatirea executiei operatiei urmatoare; - executia unui algoritm de catre masina se traduce prin examinarea unui tablou care contine toate situatiile posibile, ceea ce corespunde unui program cablat, reprezentand un algoritm independent de informatia care se trateaza; - unele informatii de baza pot avea un caracter conditional, evenimentul urmator va depinde de rezultatul operatiei curente; - memoria M este ireductibila si aminteste contorul programului/registrul instructiunii din calculatoarele conventionale; - masina Turing are un program fix; pentru a-l modifica trebuie reconstruita masina. Masina Turing nu are un caracter universal. Pentru a deveni universala trebuie sa indeplineasca urmatoarele conditii: - sa accepte toate alfabetele, conditie usor de realizat daca alfabetele se codifica binar, iar masina va trata toate codurile binare; - sa aibe posibilitatea de a i se introduce din exterior un tabel de functionare, pentru a executa un algoritm dat, adica un program,ceea ce caracterizeaza masina von Neumann.
36 4. Modalitati de reprezentare a calculatoarelor. Un calculator poate fi examinat, atat subaspect functional, cat si structural. Din punct de vedere functional, sub forma cea mai generala, un calculator se poate reprezenta prin tripletul: < I, E, C >, unde: - I constituie multimea intrarilor, - E corespunde multimii iesirilor, - C I x E reprezinta o submultime a produselor carteziene intre elementele multimii I si elementele multimii E. C realizeaza aplicatii din multimea intrarilor I, in multimea iesirilor E. Pentru a facilita studiul unui calculator sub aspect functional, adesea se recurge la reprezentarea lui sub forma unei ierarhii de niveluri imbricate. Un nivel este constituit din multimea aplicatiilor asupra elementelor multimii de intrare pentru nivelul dat, cat si asupra elementelor multimilor de intrare si iesire de la nivelul inferior, imbricat. Aplicatiile de la un nivel dat pot constitui aplicatii si pentru nivelul superior urmator. O posibilitate de reprezentare este data mai jos unde se pot distinge trei niveluri imbricate: - aplicatiile/functiile primitive ale masinii de baza implementate in hardware, capabila sa execute operatii elementare, - functiile standard/predefinite reprezentate prin nivelul instruciunilor masinii conventionale, - functiile construite de utilizator, pe baza instructiunilor masinii conventionale, pentru diverse tipuri de aplicatii concrete. Nivelul aplicatiilor/functiilor primitive masina de baza ( realizata in hardware ) capabila sa execute operatii elementare. Nivelul functiilor standard/predefinite; nivelul instructiunilor masinii conventionale. Nivelul functiilor construite de utilizator pe baza functiilor de la nivelul inferior. Acesta este nivelul aplicativ al calculatorului.
37 La nivelul masinii conventionale se defineste notiunea de arhitectura a unui calculator numeric prin cuadruplul: A = < PI,PE,RG,I > unde: PI = { PI0,...,PIi } este multimea porturilor de intrare, PE = { PE0,...,PEj } este multime porturilor de iesire, RG = { RG0,...,RGk } este ansamblul registrelor generale din unitatea de executie, I = { I0,...,Il } este setul instructiunilor calculatorului. Porturile de intrare si iesire sunt utilizate pentru schimbul de informatii cu mediul inconjurator, prin intermediul echipamentelorperiferice, in timp ce registrele generale sunt folosite pentru stocarea diferitelor variabile de stare. Sub forma unui prim exemplu se prezinta mai jos arhitectura microprocesorului Intel PI0.. PI255 F A B D 7 0 C E PE0. PE255 H L SP PC 15 0 Atat porturile de intrare PI0,...,PI255, cat si porturile de iesire PE0,...,PE255 au cate 8 biti. In cadrul registrelor generale se intalnesc si o serie de registre cu caracter specializat in ceea ce priveste utilizarea: - A este registrul acumulator principal, folosit in cele mai multe operatii aritmetice si logice; - B, C, D, E, H, L sint registre de uz general, desi unele au si utilizari speciale ( H si L sunt folosite adesea pentru formarea unor adrese de operanzi pe 16 biti ); - F este registrul indicatorilor de conditii, furnizati de unitatea de executie dupa fiecare operatie
38 ( CY - transport in afara rangului de semn, AC - transportauxiliar intretetradele octetului rezultat, S - semnul rezultatului, Z - indicator de rezultat zero, P - indicator privind paritatea numarului de unitati din rezultat ). Pozitiile ocupate de acesti indicatori de conditii in registrul F sunt date mai jos: S 7 Z 6 * 5 AC 4 * 3 P 2 * 1 CY 0 - SP este indicatorul de stiva, care asigura accesul la o structura de tip stiva organizata in memorie; - PC contor program, pentru adresarea instructiunilor din memorie. Lista de instructiuni a microprocesorului 8080 contine 78 de instructiuni. Un alt exemplu il constituie arhitectura microprocesorului 8086: AX: BX: CX: DX: AH AL BH BL CH CL DH DL Acumulator Registru - baza Registru - contor Registru - date SP BP SI DI Indicator - stiva Indicator - baza Indicator - sursa Indicator - destinatie Indicatorii de conditii * * O D I T S Z * A * P * C
39 Semnificatiile indicatorilor de conditii sint urmatoarele: O - depasira aritmatica, D - directia la explorarea sirurilor, I - activare/dezactivare intreruperi, T - capcana pentru lucrul pas cu pas, S - semn, Z - zero, A - transport auxiliar, P - paritate, C - transport in afara rangului de semn CS SS DS ES Registrul segmentului de cod Registrul segmentului de date Registrul segmentului stivei Registrul segmentului suplimentar 15 0 Indicator de instructiune IP (Contorul Programului) Microprocesorul 8086 mai poseda cate doua tablouri de porturi de intrare/iesire, a cate octeti fiecare: PI0,,.PI Porturi de Intrare organizate pe octe PE0,,.PE Porturi de Iesire organizate pe octeti Nota: Porturile de I/E pot fi organizate si pe cuvinte de 16 biti, la dimensiunea de cuvinte fiecare tablou de porturi. Tinand seama de toate modurile de adresare, microprocesorul 8086 dispune peste 300 de instructiuni diferite. Ultimul exemplu se refera la unitate centrala a calculatorului FELIX 5000, care este vazuta de catre programator sub formaa 16 registre generale RG0,...,RG15, de cate 32 de biti, si a unui cuvant dublu de stare program ( PSW Program Status Word ), care stocheaza contorul program si o serie de indicatori de conditii:
40 0 31 RG0.. RG15 Registrele Generale Cuvantul de stare program ( PSW ): PC DI DS DD DB Z S D C IS IE CE NP CA.. MR PM NIT Campurile PSW au urmatoarele semnificatii: PC - contor program; Masti de depasire: DI,DS - depasire inferioara/superioara in virgula mobila: - 64 < E < 64, ( E = exponent ); DD- depasire zecimala; DB - depasire binara: -1 < n < 1, ( n = mantisa ). Daca masca este unu atunci derutarea este interzsisa. Indicatorii de conditii ai rezultatului: Z = 1 - rezultat nul; S = 1 - rezultat < 0; D = 1 - depasire; C = 1 - transport. Masti de intrerupere: IS - masca intreruperi de I/E;
41 IE - masca intreruperi externe; CE - masca intreruperi contor nul. Daca masca este unu, intreruperea este inhibata si ramane in asteptare. Nivelul programului: NP = 0 - unitatea centrala opereaza in modul privilegiat ( poate executa toate instructiunile ); NP = 1 - unitate centrala opereaza in modul normal ( incercarea de a executa instructiunile de sistem genereaza o derutare ). Cheia de acces: CA = cheia de acces la paginile de memorie, de cite 2Ko, protejate prin chei de protectie. Masca de rotunjire: MR = 0 - se rotunjeste rezultatul operatiei in virgula mobila; MR = 1 - rezultatul nu se rotunjeste. Paritate memorie: PM = 0 - eroarea de paritate la memorie este tratata prin deru tare; PM = 1 - eroarea se trateaza prin intrerupere. Nivelul de intrerupere asociat programului: NIT- defineste nivelul de prioritate al programului in curs de executie ( pot exista cel mult 128 niveluri de prioritate ). Calculatorul FELIX 5000 are implementate 102 instructiuni, din 128 instructiuni posibile. Cunoscand arhitectura unui calculator ( porturile de I/E, setul registrelor generale, indicatorii de conditii, lista de instruc-tiuni - inclusuiv modurile de calcul pentru adresa efectiva- ) se pot scrie programe la nivelul masinii conventionale ( in limbaj de asamblare ). Reprezentarea structurala a unui calculator pleaca de la ideea ca acesta reprezinta un agregat/sistem, care consta din componente primitive ( primitive functionale ) interconectate intr-o maniera data, pentru a putea executa operatii specifice, de prelucrare a informatiei. Componentele se caracterizeaza printr-o serie de atribute, iar atributele - prin valori. Informatia poate fi masurata in biti, ranguri zecimale, caractere alfanumerice etc. Pe linga functiile specifice de prelucrare a informatiei, componentele primitive se mai caracterizeaza prin debit de transfer si capacitate de stocare ale informatiilor.
42 Aceste caracteristici prezintaimportantapentru studiul sistemelor de calcul cu ajutorul metodelor cercetarii operationale, in numeroase aplicatii ( multiprogramare, multiprelucrare, timp divizat, retele de calculatoare etc. ), in care intervin congestii, cozi de asteptare, zone tampon ( buffer ), debite de transfer al datelor etc. Din punct de vedere structural sistemul de calcul poate fi descompus in: - unitatea de intrare ( UI ), - unitatea centrala ( UCe ), - unitatea de iesire ( UE ). I UI UCe UE E Unitatile de intrare si de iesire asigura legatura sistemului cu echipamentele periferice primare ( traductoarele/ elementele de executie ) care preiau informatia din mediul extern si o furnizeaza in sistem sau care executa diferite actiuni asupra mediului extern, ca urmare a interpretarii informatiei prelucrate de calculator. Unitatea centrala asigura stocarea programului, a datelor si realizeaza prelucrarea automata a acestora pe baza interpretariiprogramului dat. Pentru a putea intelege organizarea si operarea unor sisteme complexe cum sunt calculatoarele se impune descompunerea lor in unitati functionale mai simple, cu precizarea semnalelor manipulate si al modului lor de dialog. Astfel, rafinarea structurii sistemului de calcul evidentiaza in zonele UI si UE: - subsistemul de intrare ( SI ), - subsistemul de iesire ( SE ), - echipamentele periferice de intrare ( EPI ) si echipamentele periferice de iesire ( EPE ). EPI au rolul de a prelua datele de la diverse traductoare, evenual stocata pe diversi purtatori fizici, si a le aduce la o forma compatibila cu intrarile SI ( ca naturafizica,format de reprezentare etc ).
43 EPE au functia de a prelua datele prelucrate, furnizate prin SE, si de a le aduce la o forma corespunzatoare destinatiei: semnale specifice diferitelor elemente de executie ( in cazul conducerii proceselor tehnologice ) sau de a le plasa pe un anumit suport fizic etc. Subsistemele de I/E asigura transferul, autonom sau sub controlul UCe, al informatiilor intre UCe si EP prin realizarea unei adaptari de debite de transfer ( vitezele de operare ale acestora difera cu mai multe ordine de marime ). Uneori sint implementate si alte operatii: modificarea formatului de reprezentare a datelor, validari, verificari etc. La nivelul UCe se pot distinge urmatoarele unitati functionale: - unitatea de memorie ( UM ), - unitatea de executie ( UE ), - unitatea de comanda ( UC ). UCe Date/ EPI SI UM SE EPE Instr. Instr. Date Date Rez. Comenzi Cond Cond UE UC Conditii Com Comenzi Comenzi date /adrese instructiuni comenzi, conditii/indicatori de stare/stari.
44 Unitatea de memorie are functia de stocare a datelor initiale, a programului, a rezultatelor intermediare si finale. In sistemele moderne ea poate opera autonom, atat cu SI/SE, cat si cu procesorul ( ansamblul unitate de comanda - unitate de executie ). Unitatea de memorie are o organizare liniara, constand in celule de stocare a informatiei, al caror continut poate fi manipulat prin specificarea adresei celulei date. Memoria (n-1) 0 Celula 0 Celula 1 (m-1) 0 Adresa i Registrul de adrese m Celula i (m -1) Celula 2 Adresa ia valori cuprinse intre 0 si 2 (m-1) unde m este numarul de ranguri binare ale registrului de adrese. Unitatea de executie asigura, sub controlul unitatii de comanda, o succesiune de operatii aritmetice si logice asupra datelor preluate din unitatea de memorie sau din memoria localaproprie (implementata sub forma unor registre generale -RG-), rezultatele fiind returnate in unitatea de memorie sau in registrele generale. Dupa fiecare operatie UE actualizeaza starea unor indicatori de conditii, care reflecta caracteristicile rezultatului curent ( < 0, > 0, = 0, paritate, transport, depasire etc. ). Unitatea de comanda prelucreaza fluxul de instructiuni, care constituie programul. Ea furnizeaza semnale de comanda pentru celelalte unitati, coordonind functionarea lor in conformitate cu cerintele programului. UC poate examina, in cadrul executiei unei instructiuni date, informatia de stare asociata fiecarei unitati, luand in continuare deciziile corespunzatoare pentru executia corecta a programului.
45 Unitatea de comanda se poate implementa sub forma conventionala ( ca automat secvential cu stari codificate sau cu stari complet decodificate ) sau sub forma microprogramata ( cu stocarea semnalelor de comanda, in maniera statica, intr-o memorie rapida ). Inunele cazuri UC este denumita si unitate deprelucrare a instructiunilor - unitatea I, iar unitatile de executie si de memorie sunt notate cu E si respectiv cu M. Astfel, un calculator C ( unitatea centrala ) poate fi reprezentat prin expresia: C = I [ E - M ]. In cadrul notatiei structurale PMS ( in care sunt folosite drept componente primitive: P - procesorul, M - memoria, S - comutatorul, D - operatorul asupra datelor, K - operatorul de comanda, L - legatura, T - terminalul/traductorul ) un calculator C se descrie prin formula: C = M - P - T Prima notatie este utila in cazul sistemelor constituite din mai multe unitati de executie si memorii asociate, controlate de o singura unitate de comanda( Sisteme cu un singur Flux de Instructiuni si mai Multe Fluxuri de Date - SIMD - Single Instruction Stream Multiple Data Stream ). Sistemele obisnuite au un singur flux de instructiuni si un singur flux de date SISD - Single Instruction Stream Single Data Stream ). In rezumat se poate observa ca: - ansamblul: UE + UC = P ( Procesor sau Unitate Centrala de Prelucrare - UCP sau CPU ), - ansamblul: P + M = UC ( Unitate Centrala ), - ansamblul: UC + SI + SE + Software = Sistem de calcul. In continuare se vor prezenta cateva exemple de sisteme de calcul, folosind notatia PMS: - sistem de calcul in care terminalele ( echipamentele de I/E ) transfera datele cu memoria prin intermediul p[rocesorului: M P S K1 T1 K2 T2
46 - sistem de calcul in care unele terminale ( echipamentele de I/E ) transfera date cu memoria direct ( T1 ) sau prin intermediul procesorului ( T2, T3 ): M S1 P S2 K2 T2 K3 T3 K1 T1 Instructiunile calculatorului reprezinta o colectie de informatii privind operatiile operatiile care se pot efectua intr-un calculator dat. Sub forma cea mai generala instructiunile se impart in doua categorii: - instructiuni operationale si de transfer al informatiilor, inclusiv instructiunile de I/E; - instructiuni cu caracter de decizie, care modifica secventa de executie a programului in mod conditionat de o serie de indicatori sau in mod neconditionat. Instructiunile sunt formate din mai multe cimpuri, dintre care se mentioneaza urmatoarele: - codul de operatie/functia, care specifica operatia/actiunea elementara evocata de instructiune: aritmetica, logica, transfer de date, transfer al comenzii etc.; - adresa operandului/instructiunii, care specifica locatia de memorie cu care se face transferul de date sau de la care se citeste o instructiune. In cazul instructiunilor cu caracter operational, structura instructiunii poate contine, pe linga campul codului de operatie, unul sau mai multe campuri pentru adrese. Instructiunea cu o adresa: COP ADRESA
47 Instructiunea cu doua adrese: COP ADRESA1 ADRESA2 Instructiunea cu trei adrese: COP ADRESA1 ADRESA2 ADRESA3 In primul caz instructiunea specifica adresa unui singur operand, cel de-al doilea operand (in cazul operatiilor ce implica doi opeanzi) fiind deja adus in UE. De regula, rezultatul ramane in UE. In cazul al doilea sunt prezente adresele celor doi operanzi (adresa operandului destinatie si adresa operandului sursa - rezultatul operatiei se stocheazalaadresaoperandului destinatie). Campul ADRESA3, in cel de-al treilea caz, poate specifica adresa la care se trimite rezultatul. Instructiunile cu trei adrese sunt extrem de rar intilnite. Campul de adresa din instructiune poate avea mai multe semnificatii: - contine chiar operandul, in cazul operandului imediat; - reprezinta adresa unui operand din memorie, in situatia adresarii directe; - reprezinta adresa unei celule de memorie in care se afla adresa unui operand, in cazul adresarii indirecte. In unele situatii, la continutul cimpului de adresa din instructiune se aduna continuturile unor registre speciale: - registrele baza, la adresarea bazata; - registrele index, la adresarea indexata. Cu ajutorulacestor facilitati se pot adresa diverse date stocate in memorie, care sunt structurate sub forma de masive, multidimensionale, in cazuri particulare: matrici si vectori. Registrul baza contine adresa de start ( baza ) a structurii, adresa din instructiune reprezinta o deplasare in structura data, iar registrul index asigura adunarea unei cantitati variabile
48 ( incrementabile/decrementabile - eventual automat ). Adresa obtinuta in urma unor asemenea operatii, adesea combinate, poarta numele de adresa efectiva. In consecinta, instructiunea va contine campuri aditionale, care vor specifica adresarea bazata, indirecta, indexata etc, deci modul de calcul al adresei efective. Aceste artificii sunt impuse de faptul ca, in calculatoarele conventionale, memoria este organizata liniar, in cadrul ei informatia fiind stocata sub forma unor structuri date. Diversele moduri de adresare faciliteaza accesul la componentele acestor structuri. Trebuie mentionat faptul ca listele de instructiuni pentru cele mai multe calculatoare contin si instructiuni fara adresa. Acestea se bazeaza pe facilitatile implementate in hardware care permit adresarea si manipularea datelor plasate intr-o structura speciala numita stiva ( stack - LIFO - Last In Last Out ), organizata in memorie sau ( mai rar ) in asamblaje de registre aflate in unitatea de executie ( microprocesorul Intel 8008 ). Accesul la informatia plasata in stiva se realizeaza numai prin intermediul varfului stivei, folosind doua operatii de baza: plasarea unui nou cuvant in stiva ( PUSH ) si extragerea cuvintului din varful stivei ( POP ). Adresa celulei ocupate din varful stivei este stocata intr-un registru indicator de stiva ( Stack Pointer - SP ) al carui continut este automat incrementat dupa o operatie POP si respectiv - decrementat, dupa o operatie PUSH. Instructiunile, care afecteaza executia programului, trebuie sa specifice in campul codului de operatie conditiile testate, iar in campul de adresa deplasarea necesara calculului adresei efective. Si in acest caz adresa efectiva se poate obtine direct, indirect, bazat, idexat sau ca urmare a unor operatii combinate. Formatul instructiunii calculatorului FELIX 5000, contine in cadrul a 32 de biti mai multe campuri: unde: I B Q X F D - I poate lua valoarea 0 in cazul adresarii directe si 1, in cazul adresarii indirecte;
49 - B poate lua valori intre 0 si 7, specificand pentru valori mai mari decat 0, adresarea bazata cu unul din registrele generale RG9 - RG15, iar pentru 0 adresarea nebazata; - Q poate specifica, printre altele, ( registrul general, care contine unul din operanzi, o constanta sau un vector logic sau adresa de origine si lungimea unui operand, in cazul manipularii sirurilor ) si registrul general RG0 - RG15 folosit la indexare; - X ia valoarea 0, in cazul adresarii neindexate si valorea 1, in cazul adresarii indexate; - D specifica deplasarea, folosita pentru calculul adresei efective, prin adunarea cu registrul baza. Daca registrul baza nu este specificat, D asigura adresarea pe o zona de 64 Ko. Pentru explorarea intregului spatiu de memorie se aduna in mod curent continutul lui D cu continutul registrului baza. Modurile de adresare intilnite la FELIX 5000: - Adresare directa: I = 0; X = 0; B <> 0. Aef = ( B + 8 ) + D; unde ( B + 8 ) specifica registrul general utilizat ca baza. - Adresarea indirecta: I = 1; X = 0; B <> 0. Prima adresa efectiva, Aef, calculata va reprezenta adresa unui cuvant din memorie in care se gaseste o informatie care este tratata, din punctul de vedere al calculului unei noi adrese efective, ca o instructiune. Astfel, la adresa efectiva: Aef1 =( B + 8 ) + D se va gasi un cuvant care va avea campurile: I1, B1, Q1, X1, F1, D1. Daca I1 = 1, atunci se va calcula noua adresa efectiva: Aef2 = ( B1 + 8 ) + D1, de la care se va citi un nou cuvant, procesul putand continua pe maximum 5 niveluri de adresare indirecta, pana cand Ii = 0. Adresarea indexata directa: I = 0; X = 1. Aef = ( Q ) + ( B + 8 ) + D, unde ( Q ) specifica RG folosit ca registru index. Adresarea indexata indirecta: I = 1; X = 1. Aef1 = ( B + 8 ) + D, Aef(k+1) = ( Bk + 8 ) + Dk Aef = ( Q ) + Aef(k+1) = ( Q ) + ( Bk + 8 ) + Dk.
50
51 5. Conventii de proiectare. Dupa cum s-a aratat intr-un capitol anterior, un sistem numeric poate fi partitionat in: - sectiunea de date ( unitatea de executie ), - sectiunea de comanda ( unitatea de comanda ). Intrare: Date Registre si Logica aferenta (Sectiunea /Unitatea de Date/Executie) Iesire: Date/Rezultate Semnale de comanda Conditii Intrare: Conditii Circuit secvential de comanda (Sectiunea/Unitatea de Comanda) Iesire: Comenzi Unitatea de executie asigura prelucrarea datelor, reprezentate sub forma unor vectori binari, prin transferul acestora intre registrele sursa si registrele destinatie.transferul se efectueaza prin intermediul unor retele/circuite logice combinationale. Transferurile intre registre. Intrucat prelucrarea datelor are la baza transferul intre registre, proiectarea unui sistem numeric, in vederea executiei unui algoritm, consta intr-o planificare, ce va defini fiecare transfer, prin specificarea ordinii/temporizarii ( timing ) in care aceste transferuri vor avea loc. In continuare se prezinta mecanismele hardware de implementare a transferurilor intre registre si notatiile corespunzatoare folosite. Registrele sunt notate cu majuscule avand, de regula, o semnificatie mnemotehnica. Pe scurt, se vor folosi "mnemonice". Transferul continutului unui registru sursa intr-un registru destinatie, fara a afecta continutul sursei, se noteaza astfel: AC RD Daca registrul AC are patru biti, anularea/fortarea in unu a tuturor bistsbililor se pot nota dupa cum urmeaza:
52 AC 0,0,0,0 AC 1,1,1,1 Implementarea registrelor se bazeaza pe bistabile JK si D, cu intrari de sincronizare de ceas, Ck, si cu intrari de tip PRESET/CLR. Transferurile sincrone au loc sub controlul semnalului de ceas pe fronturile anterior, pentru bistabilele de tip D, sau pe frontul posterior, pentru bistabilele master-slave, de tip JK. Transferurile implementate prin semnale de comanda aplicate pe intrarile PRESET/CLR au, in general, caracter asincron. Mai jos se vor prezenta, pentru cazul unui bistabil D controlat pe frontul anterior al semnalului de ceas, reprezentarea simbolica si diagrama temporala de operare. Se observa ca datele la intrarea D sunt stabile inaintea aparitiei frontului crescator al semnalului de ceas, cand are loc fortarea datei in bistabil. Iesirea va lua valoarea corespunzatoare intrarii cu o anumita intarziere in raport cu frontul crescator al semnalului de ceas. In cazul bistabilelor de tip master-slave fortarea datelor are loc pe frontul anterior al semnalului de ceas, iar aparitia lor la iesire se constata pe frontul posterior al ceasului. Mai jos se prezinta simbolul si diagrama temporala pentru operarea bistabilului JK. 2 4 Data Ceas 2 3 D PRE CLK Q CLR Q 5 6 Iesire Ceas (CLK) Data (D) 7474 Iesire (Q) Data 4 Ceas 1 Data 16 J PRE CLK K CLR 15 Iesire Q 14 Q 7476 Ceas (CLK) Data (J/K) Iesire (Q) In continuare se vor considera elemente bistabile de tip master-slave, atat pentru sectiunea de date, cat si pentru sectiunea de comanda.
53 Un circuit secvential de comanda furnizeaza, pentru sectiunea de date, diverse semnale de comanda, sincrone cu ceasul sistemului, cu perioade egale cu durata unei perioade de ceas sau cu multipli ai acesteia. Acestea sunt semnalele de comanda de tip nivel. Semnalele de Comanda de tip Nivel (SCN) vor avea un sufix numeric i ce va specifica numarul iesirii de comanda a automatului (SCNi). Semnalele SCNi pot fi strobate/esantionate cu semnalul curent de ceas, pentru a forma Semnale de Comanda de tip Impuls(SCIi), cu durata activa corespunzatoare semnalului curent de ceas. Conditii Ceas Circuit Secvential (Unitate e Comanda) SCN(i-1) SCNi SCIi Ceas 7408 Ceas SCN(i-1) SCI(i-1) SCNi SCIi Presupunem ca in etapa i (pasul i al implementarii/executiei) algoritmului trebuie sa se efectueze transferul continutului registrului de doi biti RA[2], numerotati de la 0 la 1 ( RA 0:1 ),in registrul destinatie RB[2] ( RB 0:1 ): i. RB 0:1 RA 0:1 Considerand, in continuare, ca se vor folosi numai bistabile master-slave JK sau D (se face presupunerea ca si bistabilele de tip D opereaza in maniera master-slave ), schemele hardware pentru implementarea acestui transfer vor fi urmatoarele:
54 2 RA0 2 RB PRE J Q CLK K Q CLR PRE J Q CLK K Q CLR J PRE CLK K CLR QRA1 14 Q J PRE CLK K CLR QRB1 14 Q 7476 SCN1 Ceas RA0 4 RB0 2 3 D PRE CLK Q CLR 1 Q D PRE CLK Q CLR Q RA1 4 RB1 2 3 D PRE CLK Q CLR 1 Q D PRE CLK Q CLR Q SCN1 Ceas Diagrama de timp care arata modul in care noua informatie se transfera in RB este data mai jos: Ceas SCNi SCIi Vechea Valoare din RB \\ Noua Valoare din RB
55 Adesea, intr-un registru trebuie sa se transfere, in momente diferite, vectori diferiti, de la diverse surse. Fie registrele sursa: RA, RB si registrul destinatie RC. Se cere implementarea, la momentele 1, 2 a urmatoarelor transferuri: 1. RC RA 2. RC RB sub controlul semnalelor SCN1, SCN2. 4 RA0 2 3 D PRE CLK Q CLR 4 1 Q RA U9A D PRE CLK Q CLR 1 Q SCN D PRE CLK Q CLR 1 Q RB D PRE CLK Q CLR 4 1 Q RB U10A D PRE CLK Q CLR 1 Q D PRE CLK Q CLR 1 Q SCN SCN1 SCN Se cere implementarea hardware a transferurilor: 1. RA 1,1 2. RA 0,0 3. RA RB Pentru a stabili expresia functiei logice combinationale, care reprezinta intrarea Di a bistabilului destinatie RAi, se utilizeaza diagrama Karnaugh, cu variabila RBi introdusa in diagrama: CLK
56 SCN1, SCN SCN3 Functia de excitatie Di este data de expresia: * * * 1 0 Di = SCN1 RBi.SCN3 RBi * * * 1 Aceasta va duce la urmatoarea implementare: RB D PRE CLK Q CLR 1 RA0 Q RB D PRE CLK Q CLR RA1 Q 5 6 SCN1 SCN3 SCN2 SCN SCN3 CLK U7A In cazul in care se urmareste implementarea operatiei elementare: j. RAi RBi.RCi se poate folosi schema de mai jos: RBi RCi SCNj Ceas U41A SCIj D PRE CLK Q CLR 1 RAi Q
57 Reprezentarea componentelor constructive logice combinationale si secventiale (SSI/MSI). In realizarea practica a unui sistem numeric de complexitate mica/medie (in afara cazurilor cand se folosesc circuite programabile FPGA/FPLD) sunt utilizate atat componente logice combinationale, cat si secventiale standard, integrate pe scara simpla si medie. Pentru o tratare unitara a celor doua tipuri de componente, mai jos, se prezinta o modalitate de tratare unitara a acestora. Componentele combinationale. Sub forma cea mai generala o componenta combinationala (Circuit Logic Combinational CLC) se poate reprezenta sub forma unei cutii negre avand m intrari de date X[m], p intrari de comanda C[p] si n iesiri Z[n]. Intrarile si iesirile se pot reprezenta sub forma unor vectori binari X[m], C[p], Z[n], iar operarea componentei/circuitului poate fi descrisa cu ajutorul unei tabele. m X[m] Operatia Descrierea Comanda p CLC Functia C (p-1) C 0 C[p] F 0 Z = F 0 (X) n Z[n] F 1 Z = F 1 (X) F (2^p-1) Z = F (2^p-1) (X) Se poate observa ca iesirea Z este prezenta atata timp cat este sunt prezente intrarile X si C, fapt mentionat prin utilizarea semnului = intre termenii din dreapta si stanga, in coloana Descriere. Iesirea Z este definita, ca functie de intrarea X, pentru cele 2 p valori pe care le poate lua vectorul de comanda C. In continuare sevor prezenta cateva cazuri particulare. Circuitul AND (7408). Modelul Componenta din Tabelul de descriere biblioteca A[4] B[4] Operatia Descrierea Comanda 4 4 AND Z = A B Z[4] ¼ din pastila 7408
58 Circuitul de mai sus poate fi reprezentat in conditiile in care intrarile A[4] sunt controlate de catre acelasi semnal si devin, astfel, intrari de comanda: A[1] 1 B[4] Operatia Descrierea Comanda 4 A[4] 4 A[1] 7408 ZERO Z = Z[4] Circuitul sumator TRUE Z = B 1 Modelul Componenta din Tabelul de descriere biblioteca A[4] B[4] C 0 [1] Operatia Descrierea Comanda A4 C4 14 ADD C 4,S = ADD(A,B,C 0 ) A3 15 C 4 [1] 1 4 S[4] A2 SUM4 A1 B4 SUM3 B3 B2 SUM2 B1 C0 SUM A Circuitul XOR (7486). Modelul Componenta din Tabelul de descriere biblioteca A[4] B[4] Operatia Descrierea Comanda 4 4 XOR Z = A B Z[4] ¼ din pastila 7486 Ca si in cazul circuitului AND (7408), pentru circuitul XOR (7486) intrarile A[4] pot fi controlate de catre acelasi semnal de comanda, ceea ce va permite implementarea pe 4 biti a functiilor TRUE si NEG, conform tabelului de mai jos.
59 A[1] 1 B[4] Operatia Descrierea Comanda 4 A[4] 4 A[1] 7486 TRUE Z = B 0 NEG Z = B 1 4 Z[4] Multiplexorul Modelul Componenta din Tabelul de descriere biblioteca A[4] B[4] Operatia Descrierea Comanda 2 3 S=A/B B 1Y G S=A/B 7 2Y SELA Z = A G 13 4A 12 SELB Z = B Z[4] STROBEG STROB Z = * 1 1A 2A 2B 3A 3B 4B Y 4Y SELECTAB 4 9 Intrarile active pe nivel coborat sunt marcate cu un cerc Circuite secventiale. In cazul circuitelor secventiale intervine si semnalul de ceas, pe langa semnalul de comanda. Pentru a marca faptul ca iesirea circuitului isi pastreaza valoarea si dupa disparitia datelor de la intrare, atribuirea valorii expresiei logice din termenul din dreapta variablei din termenul din stanga se specifica prin. Intrarile de ceas sunt marcate printr-un varf de sageata. C[p] m X[m] Operatia Descrierea Comanda p CLS Functia C (p-1) C 0 CLK F 0 Q F 0 (X) n Q[n] F 1 Q F 1 (X) F (2^p-1) Q F (2^p-1) (X)
60 Circuit bistabil JK (7473). Modelul Componenta din Tabelul de descriere biblioteca Operatia Descrierea Comanda J J Q J K K 1 Bistab.JK CLK NOP Q Q CLK K Q CLEAR Q CLR Q[4] PRESET Q COMPL Q Q 1 1 Contor binar Modelul Componenta din Tabelul de descriere biblioteca ENT A[4] Operatia Descrierea Comanda CLR 3 14 CLR LOAD ENP 4 A QA 13 ENP 5 B QB 12 NOP Q Q C QC D QD 15 LOAD 2 RCO INC Q ADD(Q,T) CLK ENP LOAD Q A 1 0 * 9 CLK ENT LOAD CLR RC0 Q[4] CLEAR Q 0 0 * * Registru de deplasare SER A[4] Operatia Descrierea Comanda SH 1 4 SH LOAD LOAD NOP Q Q 0 0 CLK LOAD Q A Q[4] SHIFT Q Q 2:0, SER 1 *
61 In cazul in care intrarea SEReste folosita drept intrare de comanda se realizeaza functiile din tabelul de mai jos: Modelul Componenta din Tabelul de descriere biblioteca A[4] Operatia Descrierea Comanda 3 9 SERIAL SER 4 SER SH LOAD 11 LOAD QA SHIFT SH 6 NOP Q Q * QB A 8 LOAD 13 B QC LOAD Q A * CLK SHIFT0 Q Q 2:0, C D CLK QD Q[4] SHIFT1 Q Q 2:0, Registru cu doua intrari multiplexate Modelul Componenta din Tabelul de descriere biblioteca A[4] B[4] Operatia Descrierea Comanda WS WS 2 A1 QA CKL A B1 QB LOADA Q A 0 4 Q[4] WS B2 C1 C2 D1 D2 CLK QC QD LOADB Q B 1
62 Scheme combinate. Schema unui sumator/scazator Schema se bazeaza pe utilizarea a doua circuite: XOR (7486) si ADD (7483) D 1 A[4] B[4] Operatia Descrierea Comanda D ADD Z = C4,ADD(A,B) SUB Z = C4,SUB(A,B) 1 C C0 1 4 Z[4] In functie de valoarea 0/1 a semnalului de comanda D, schema efectueaza adunarea/scaderea. Schema se poate extinde usor pentru operatiile pe 8 biti. In acest mod se pot realiza structuri complexe, noi blocuri constructive, a caror operare poate fi descrisa concis cu ajutorul tabelelor. Conexiuni prin magistrale. In numeroase cazuri implementarea in hardware a unui algoritm de prelucrare a datelor impune, la diverse etape ale executiei sale, conectarea unor registre-sursa la anumite registre-destinatie. Conexiunile directe ofera posibilitatea unui inalt grad de paralelism al transferurilor de date. In schimb sunt neeconomice sub aspectul consumului de circuite logice. Pentru exemplificare se vor considera, pe de-o parte, doua registre-sursa: RA si RB, iar pe de alta parte doua registre-destinatie: RC si RD, intre care se realizeaza urmatoarele transferuri: 1. RC RA 2. RD RB 3. RC RB 4. RD RA 5. RC RA; RD RB 6. RC RD; RC RA
63 Aceste transferuri se vor realiza sub controlul semnalelor de comanda de tip nivel: SCN1, SCN2, SCN3, SCN4, SCN5, SCN6 si al semnalelor de comanda de tip impuls: SCI1, SCI2, SCI3, SCI4, SCI5, SCI6. O ilustrare a implementarii transferurilor de mai sus este prezentata in continuare, considerand, pentru simplificare, registre de cate un bit. SCN2 1 2 SCN D PRE CLK Q CLR RB Q D PRE CLK Q CLR RD Q 5 6 SCN3 1 2 SCN6 SCN6 1 2 SCN CLK SCN6 SCN5 SCN4 SCN SCN4 1 2 SCN D PRE CLK Q CLR 1 RA Q SCN6 SCN5 SCN3 SCN1 CLK RC D Q 5 CLK Q 6 4 PRE CLR Considerand ca sunt s registre-sursa, avand n biti, si d registre-destinatie, de cate n biti se poate stabili o functie de cost, pe baza numarului de porti SI, SAU si a numarului de biti al fiecarui registru. Astfel, - numarul de porti SI = s.d.n, - numarul de porti SAU = d.n Rezulta o functie de cost n.d.(s + 1)
64 Pentru a reduce costul conexiunilor intre surse si destinatii se utilizeaza magistralele. Acestea reprezinta, de regula, trasee metalice/fire pe circuite imprimate sau la nivelul structurilor integrate pe siliciu. Modelul conexiunilor, prin intermediul magistralei, este ilustrat mai jos. +5V R RD RB D Q OC CLK RAMAG/BUS = RB CLK Q OC RD <- MAG/BUS D RC MAG/BUS CLK MAG/BUS = RA CLK RC <- MAG/BUS Se poate observa ca portile SI, care conecteaza iesirile registrelor RA si RB, la magistrala sunt de tipul colector deschis OC. Conexiunile Registrelor RA si RB, la magistrala MAG/BUS se realizeaza sub controlul unor semnale de comanda de tip nivel, specificate in desen prin expresiile: MAG/BUS = RA si MAG/BUS = RB. Fortarea continutului magistralei MAG/BUS in registrele RC si RD are loc sub controlul semnalelor de comanda de tip impuls, specificate in desen prin expresiile: RC MAG/BUS si RD MAG/BUS. Magistrala joaca rolul unui circuit SAU, conform figurii de mai jos. Transferurile nu se mai pot efectua in paralel, de la surse la destinatii. Ele vor avea un caracter secvential. Astfel, transferul: 1. RC RA, se va efectua prin operatiile: 1. MAG/BUS = RA; RC MAG/BUS, unde simbolul = reprezinta o conexiune, pe durata unui semnal de comanda de tip nivel.
65 D PRE CLK Q CLR Q D PRE CLK Q CLR Q D 4 1 PRE CLK Q CLR MAG/BUS = RB RA Q Q MAG/BUS = RA MAG/BUS CLK 1 2 RD <- MAG/BUS CLK D 4 1 PRE CLK Q CLR Q RC <- MAG/BUS Functia de cost va fi data de numarul portilor SI, al portilor SAU, cat si de numarul de biti ai vectorilor transferati: - numarul de porti SI = s.n, - numarul de porti SAU = n Rezulta o functie de cost n.(s + 1) De cele mai multe ori conexiunile registrelor-sursa la magistrala se realizeaza prin circuite Tristate, care inlocuiesc circuitele de tip OC.
66
67
68 6. INTRODUCERE IN LIMBAJUL DE PROGRAMARE HARDWARE AHPL. ( AHPL - A Hardware Programming Language ). In functie de scopul urmarit, un calculator numeric poate fi descris folosind diverse mijloace. Astfel, la nivelul etapei de proiectare, se folosesc adesea diagrame bloc, organigrame, limbaje specializate, tabele de cablaj etc. In cadrul acestei lucrari calculatorul numeric este descris in termenii unor secvente de transferuri ale datelor intre diferitele primitive functionale ale calculatorului, in vederea implementarii unui algoritm dat. Se considera ca, dupa terminarea acestei etape de proiectare, elaborarea schemelor logice si a schemelor de cablaj reprezinta operatii mecanice, de rutina, care se pot automatiza cu usurinta. Sistemele numerice de calcul prelucreaza in principal date structurate sub forma de vectori binari, stocati in registre sau memorii organizate sub forma de matrici, cu acces la linii. In acest context apare evidenta utilitatea unui limbaj prevazut cu facilitati pentru manipularea vectorilor si matricilor. Un asemenea limbaj a fost propus de K.E. Iverson in anul 1960 sub numele APL (A Programming Language ). Limbajul APL cunoaste o larga raspindire, ca limbaj conversational in sistemele cu multiacces IBM 360/370 si chiar in cadrul calculatoarelor personale IBM-PC compatibile. Trebuie mentionata, de asemenea, si implementarea realizata in tara noastra pe sistemele FELIX C-266/512. APL este un limbaj foarte puternic. El permite descrierea concisa a algoritmilor si verificarea lor prin executie, pe calculator. Pentru scopurile urmarite de proiectare, limbajul APL trebuie completat cu instructiuni si alte constructii, care permit o implementare directa in hardware. Un asemenea limbaj AHPL ( A Hardware Programming Language ) a fost propus de catre F. Hill si G. Peterson in 1974, fiind apoi perfectionat pe parcurs ( 1978, 1983 ). AHPL, ca limbaj de descriere a transferurilor intre registre, asigura o corespondenta directa intre notatia folosita si implementarea ei in hardware. AHPL foloseste, pe linga constructiile proprii, si un subset de constructii din APL, care isi gasesc un corespondent in hardware. Frecvent, in scopul facilitarii comunicarii si documenarii, in programele AHPL se mai utilizeaza unele notatii APL, care descriu algoritmul de operare al unui calculator numeric.
69 In momentul traducerii in hardware a descrierii AHPL a modulului numeric dat, aceste notatii nu sunt luate in consideratie. Autorii limbajului AHPL au elaborat si un compliator pentru hardware, care are ca intrare descrierea AHPL a sistemului numeric, iar ca iesire - schema sistemului, la nivel de diagrame. Indiferent de implementarea unui algoritm, este o buna practica aceea de a descrie mai intai algoritmul in APL si de a-l executa pe un calculator, prevazut cu un compliator de APL. In continuare algoritmul descris in APL poate fi implementat in hardware, firmware (microprogram) sau poate fi executat direct, fiind implementat in software. Conventii privind operanzii folositi in AHPL. Operanzii manipulati in limbajul AHPL reprezinta marimi constante sau variabile. Constantele sunt date numerice sau alfanumerice. Ele se reprezinta prin numere standard, respectiv - prin litere standard sau numere cuprinse intre semnele apostrof. Variabilele pot fi scalari, vectori, matrici. Este important de facut distinctie intre variabile si valori.in limbajele conventionale de programare o variabila reprezinta un nume prin care se face o referire la un operand; o valoare reprezinta marimea pe care o ia efectiv operandul. In AHPL, prin variabila se intelege numele unui registru al carui continut este manipulat printr-o instructiune a programului, iar prin valoare - data care se plaseaza in registru. Tipurile de operanzi in AHPL se vor deosebi prin conventii tipografice: litere mici pentru scalari, majuscule pentru vectori si majuscule ingrosate pentru matrici. Transferul unei constante ( binare - in cazul de fata ) intr-un registru AC se noteaza astfel: AC 0,1,1,1,1,0,1,0 Transferul continutului unui registru RD, intr-un registru AC, fara a se modifica continutul lui RD se reprezinta prin instructiunea: AC RD Un vector constituie o colectie de operanzi avand o structura unidimensionala. Numarul componentelor vectorului reprezinta dimensiunea vectorului. Pentru a specifica dimensiunea unui vector oarecare (AC) se va folosi notatia ρac, unde ρ reprezinta operatorul dimensiune. Daca AC are 16 biti (ranguri binare), atunci ρac = 16. In aceasta lucrare, in cazul in care nu se
70 vor face mentiuni speciale, pozitiile bitilor individuali vor fi specificate prin indici cu originea 0, plasata in extrema stanga: AC 0,AC 1,...,AC ρac-1 Trebuie observat ca aceasta notatie este destul de greoaie in textele dactilografiate, ceea ce face ca, in multe cazuri, indicii sa fie plasati pe aceeasi linie cu numele registrului, de exemplu: ACi - bitul de rang i din registrul AC. Pentru a specifica un grup de biti adiacenti, dintr-un registru se foloseste notatia: A i:j sau A(i:j), unde sunt inclusi si bitii i si j. Operanzii de tip matricial se reprezinta sub forma unui tablou bidimensional, constituit din elemente cu indici inferiori si superiori. Indicii inferiori specifica coloanele, iar cei superiori liniile. Se considera matricea M avind ρ1m coloane si ρ2m linii, unde ρ1 si ρ2 reprezinta notatiile pentru operatorii care aplicati lui M furnizeaza numarul de coloane si numarul de linii ale tabloului M. M 0 0 M M 0 ρ1m M i j.... M ρ2m-1 0 M ρ2m M ρ2m-1 ρ1m-1 Linia i a matricii M se specifica prin notatia M i sau M<i>, iar coloana j - prin notatia M j sau M[j]. Liniile succesive i...k, ale matricii M se noteaza prin M i:k sau M<i:k>, iar coloanele succesive j...l - prin M j:l sau M[j:l]. Conventii privind operatorii APL si AHPL. Operatorii folositi sunt operatorii primitivi si operatorii de tip mixt. Operatorii primitivi manipuleaza, de regula, operanzi de tip scalar, desi ei pot fi extinsi atat la vectori, cat si matrici. Acesti opeatori se pot referi la o singura variabila (operatori unari) sau la doua variabile (operatori binari). In cele ce urmeaza se prezinta operatorii primitivi aritmetici, logici si relationali. In scopul facilitarii comunicarii, in textele ce reprezinta programe AHPL pot fi intalniti toti acesti operatori. Implementari directe in hardware au insa numai operatorii logici. Operatorii aritmetici si relationali sunt specifici limbajului APL.
71 Operatorii aritmetici manipuleaza numere reale: x + y adunare; suma algebrica, ( APL ), x - y scadere; diferenta algebrica, ( APL ), x y inmultire; inmultire algebrica, ( APL ), x % y impartire algebrica; ( APL ). x valoare absoluta; ( APL ). Operatorii logici manipuleaza numere binare ( vectori binari ): x NU (APL si AHPL), x y SI (APL si AHPL), x y SAU (APL si AHPL), x y SAU-Exclusiv (APL si AHPL). Operatorii relationali sunt de forma: ( x R y ) unde R { <,, =,, > } ( APL ). In versiunile existente de APL, incercarea de a folosi alte tipuri de variabile, cu exceptia celor logice, conduce la eroare de domeniu. In raport cu operatorii aritmetici si relationali nu exista limitari privind folosirea variabilelor. In exemplele urmatoare se considera: x = 1, y = -3, W = ( 4,-5,0,2 ) si U = ( 1,2,1,-1 ). Instructiune: Rezultat: z x + y z = -2 z x z = 0 Z W + U Z = ( 5,-3, 1,1 ) Z W * U Z = ( 4,-10,0,-2 ) Z W % U Z = ( 4,-2.5,0,-2 ) z ( x < y ) z = 0 z ( x > y ) z = 1 Operatorii de tip mixt sunt extrem de puternici, deoarece permit manipularea unor combinatii de scalari, vectori si matrici. In cele ce urmeaza se vor prezenta operatorii de tip mixt, cu specificarea limbajelor in care se utilizeaza.
72 Notatie Denumire Semnificatie Observatii X,Y Inlantuire/ X 0,...,X ρx-1,y 0,...,Y ρy-1 APL si AHPL Concatenare M!N Inlantuire O matrice cu ρ2m+ρ2n linii AHPL linii. cu liniile lui M peste liniile lui N. k X Extragere Se extrag primele k elemente APL din vextorul X. k X Eliminare Se elimina primele k elemente APL din vectorul X. X Decodificare Echivalentul zecimal al vectorului APL binar X nτp Codificare Un vector cu n elemente binare, APL si AHPL binara. obtinut prin repre zentarea numarului zecimal p in baza Reducere X ρx-1 APL si AHPL Reducere X i AHPL si APL linie Reducere X j AHPL si APL coloana X U/Y Comprimare Vectorul X este obtinut APL si AHPL din vectorul Y prin su- in descrierea primarea rangurilor X i unitatilor logice pentu care U i =0 combinationale U este vector binar. A U/M Comprimare A i U/M i Idem linii. A U//M Comprimare A j U/M j Idem coloane coloane este un operator logic sau aritmetic. Nota2: A si M sunt matrici, iar U este un vector binar.
73 In exemplele care urmeaza se ilustreaza utilizarea operatorilor de tip mixt. Inlantuirea. Fie: X = ( 1,2,3,4 ) si Y = ( 5,6,7 ), daca Z X,Y atunci, rezulta: Z = ( 1,2,3,4,5,6,7 ) Inlantuirea permite descrierea operatiilor de deplasare si rotire ale vectorilor si matricilor. In cele ce urmeaza se vor prezenta notatiile AHPL pentru deplasari si rotiri de vectori. Fie vectorul A = ( A 0,A 1,A 2,...,A ρa-1 ) Deplasare logica - dreapta (cu inserta unui zero in bitul 0). A 0, A 0,A 1,A 2,...,A ρa-2 Deplasare logica - stanga (cu insertia unui zero in bitul de rang ρa-1). A A 1,A 2,...,A ρa-1,0 Deplasare aritmetica dreapta (cu extinderea bitului de rang 0 in bitul de rang 1). A A 0, A 0,A 1,A 2,...,A ρa-2 Deplasarea aritmetica stanga este identica cu deplasarea logica stanga. Rotire -dreapta. A A ρa-1, A 0,A 1,A 2,...,A ρa-2 Rotire - stanga. A A 1,A 2,...,A ρa-1, A 0 In operatiile de deplasare si rotire, inaintea bitului de rang 0 si dupa bitul de rang ρa-1, se pot plasa biti individuali reprezentand indicatori de conditii ( de exemplu, din unitatea de executie, bitul de transport). Cele mai multe microprocesoare dispun de instructiuni care implementeaza asemenea operatii de deplasare. Ele sunt folosite pentru instructiunile de transfer conditionat al comenzii. In continuare sint ilustrate operatiile de rotire/deplasare circulara a liniilor unei matrici. Fie: M = Deplasare circulara in sus Daca N M 1:2! M 0, atunci rezulta: N =
74 Deplasre circulara in jos Daca N M 2! M 0:1, atunci rezulta: N = Extragerea. Fie: X = (1,2,3,4,5,6) daca Y 4 X, atunci rezulta: Y = ( 1,2,3,4 ) in APL Eliminarea. daca, Y 4 X atunci rezulta: Y = ( 4,5,6 ) in APL. In AHPL notatiile echivalente vor fi urmatoarele: Y X 0:3 ( extragere ) si respectiv Y X 4:6 ( eliminare ) Decodificare binara. Fie: X = ( 1,1,0,1 ) si Y = ( 1,0,0,0,1 ) daca: x X si y Y, atunci: x = 13 si y = 17 Codificarea binara. Fie: x = 13 si y = 17 daca: X 4 Τ x si Y 5 Τ y, atunci: X = ( 1,1,0,1 ) si Y = ( 1,0,0,0,1 ). Reducere. un operator binar care se aplica unui vector binar X,rezultatul operatiei va fi de forma: x (...(( X 1 )@X 2 )@...X ρx-1 ) Expresia: x +/X este echivalenta cu : ρx-1 x Σ X i i=0 Daca X este un vector logic ( cu componente binare ), atunci urmatoarele operatii vor furniza informatii privind: x +/X, numarul de unitati din vectorul X; x /X, prezenta a cel putin unei unitati diferita de zero, daca x <> 0; x X, prezenta tuturor componentelor egale cu unu, daca x = 1.
75 Fie matricea M: M , atunci: +/M = ( 2,1,3 ); +//M = ( 2,1,1,2,) si +/(+//(M)) = Comprimare. Fie U = ( 1,0,0,1 ) si A = ( 1,2,3,4 ), atunci: X U/A, conduce la rezultatul: X = ( 1,4 ) Considerind matricea M si vectorul U de mai sus, comprimarea pe linii N U/M va furniza matricea N, de forma: 1 1 N Comprimarea coloanelor va fi exemplificata cu un vector logic V, de forma: V = ( 1,1,0 ). N <-- V//M va avea aspectul urmator: N Ca un ultim exemplu, penru a ilustra forta limbajului AHPL se va scrie un program pentru cautarea intr-o lista de cuvinte plasate intr-o memorie, in vederea extragerii acelor cuvinte pentru care primii 4 biti sunt egali cu 1. Se considera ca lista de cuvinte binare, de cite 16 biti, se afla intr-o memorie M, cu un numar de ρ2m cuvinte. Se va forma un vector U cu ρ2τm componente, care vor fi 0 pentru acele cuvinte, care nu indeplinesc conditia impusa si 1, in caz contrar. In final se va genera o matrice N obtinuta prin comprimarea coloanelor lui M dupa vectorul U. 1. U ρ2mτ0 /* se genereaza valoarea initiala a vectorului U 2. i 0 /* se initializeaza contorul i 3. ( M i 0^ M i 1 ^ M i 2 ^ M i 3 ) = 0 )/(5) /* se testeaza conditia 4. U i 1 /* se atribuie valoarea 1 componentei care nu indepplineste conditia impus 5. i i + 1 /* se incrementeaza contorul i 6. ( i < ρ2m )/(3) /* transfer conditionat al comenzii 7. N U//M
76 Se poate observa ca vectorul U se pute genera simplu prin opeatia: U (M 0 M 1 M 2 M 3 ) Deci, tot programul secvential de mai sus se poate inlocui cuexpresia: N (M 0 M 1 M 2 M 3 ) // M Conventii AHPL pentru descrierea logicii combinationale. S-a aratat ca procesul de prelucrare a datelor consta in trans-ferul acestora intre registrele sursa si registrele destinatie prin intermediul unor retele logice combinationale. Acestea din urma reprezinta resurse hardware, care pot fi folosite in mod repetat, cu diverse argumente, in puncte diferite ale secventei AHPL, care descrie algoritmul. Se considera o retea logica combinationala, care realizeaza operatia NAND ( SI-NU ) asupra rangurilor a doi vectori de 4 biti. C ( A 0 B 0, A 1 B 1,A 2 B 2, A 3 B 3 ) Daca expresia de mai sus apare in mod repetat in secventa AHPL, se poate folosi o notatie prescurtata: C NAND(A;B), care este asemanatoare unei notatii de subrutina intr-un limbaj de programare. In contextul de fata NAND(A;B) va fi mentionata ca o functie sau o unitate logica combinationala. Intr-un program AHPL, ea va fi descrisa o singura data, dupa care poate fi apelata in mod repetat, cu diferite argumente. Sub forma generala descriera unei asemenea functii fi delimitata de titlu si de sfirsit ( END ). UNIT: NAND(A;B) conexiuni... conexiuni END Dupa titlu pot urma declaratii privind vectorii manipulati, lungimea lor etc. Conexiunile sunt instructiuni care se traduc direct in hardware sub forma unor legaturi intre intrarile si iesirile unor circuite logice combinationale. Intr-un alt paragraf se vor da mai multe exemple privind descrierea unor unitati logice combinationale: BUSFN, DCD, ADD etc.
77
78 7. Descrierea sistemelor numerice la nivelul transferurilor intre registre folosind limbajul AHPL. Sistemele numerice de calcul au un caracter complex ceea ce conduce la o serie de dificultati, atat in privinta descrierii lor functionale, cat si a proiectarii lor. Plecand de la modul lor de functionare, ele pot fi partajate in subsisteme sau module mai simple, cu specificatii bine precizate in legatura cu semnalele de intrare si iesire, care vor reprezenta date, comenzi, stari, sincronizari etc, pe de-o parte, cat si in legatura cu algoritmul de operare. Sub aspect functional, un sistem numeric poate fi descris prin proceduri si functii, plecind de la algoritmul pe care trebuie sa-l execute. Astfel, intr-o prima etapa, descriera sistemului numeric va fi asemanatoare cu cea a unui program de mare complexitate. Procedurile vor avea ca implementari fizice modulele, in timp ce functiile vor fi realizate prin unitati logice combinationale. In cadrul modulelor pot fi evidentiate unitatile de executie si de comanda. In descrierea modulelor se intilnesc in mod frecvent functii a caror implementare conduce la scheme logice combinationale. Pentru prezentarea modalitatilor de descriere ale modulelor si functiilor se va folosi forma BNF ( Backus-Naur Form ). Structura unei proceduri ( modul ) este urmatoarea: MODULE: < nume modul > < lista de declaratii > < lista de pasi AHPL > ENDSEQ < lista de instructiuni individuale nesincronizate si instructiuni > END < lista de declaratii >:= < MEMORY ( memorii ) > < INPUTS ( intrari ) > < OUTPUTS ( iesiri ) > < BUSES ( magistrale ) > < LABELS ( etichete ) > < ONE-SHOTS ( monostabile ) > < COMBUSES ( magistrale decomunicatii)>
79 < MEMORY >: < lista de bistabile >;< lista de registre >;<lista de memorii > < lista de bistabile >:= < nume bistabil >;...;< nume bistabil > < lista de registre>:= < nume registru[i]>;...;<nume registru[j] > < i, j >:= dimensiunile registrelor < i, j >:= n < lista de memorii >:= < nume memorie[m;n] >;...;< nume memorie[r;q] < m,r >:= numar de cuvinte in memorii < n,q >:= numar de biti in cuvintele de memorie < m, n, q, r >:= n < INPUTS >: < lista de vectori >;< lista de semnale individuale> < lista de vectori >:= < nume vector[i] >;...;< nume vector[j] > < lista de semnale individuale >:= < nume semnal >;...;< nume semnal > <OUTPUTS >: < lista de vectori >;...;< lista de semnale individuale > < BUSES >: < lista de magistrale > < lista de magistrale >:= < nume magistrala[i] >;...;< nume magistrala[j] > < i,j >:= dimensiunile magistralelor < LABELS >: < lista de etichete > < lista de etichete >:= < nume eticheta >;...; < nume eticheta > ( etichetele sunt folosite pentru a referi campuri din anumite registre - subregistre etc ) < ONE-SHOTS >: < lista de monostabili > < lista de monostabili >:= < numemonostabil[i] >;...;< nume monostabil[j] > < i,j >:= duratele semnalelor la iesirile monostabilelor, date in multipli ai perioadei de tact < COMBUSES >: < lista de magistrale de comunicatii > < lista de magistrale de comunicatii >:= < nume magistrala[i] >;< nume magistrala[j] ( magistrala de comunicatii trebuie sa fie conectata la un set de linii de intrare/iesire in/din modul > Exemplu de declaratii: Se considera un modul FILTRU DE CUVINTE plasat intre doua sisteme numerice A ( emitator ) si B ( receptor ), care permite trecerea unor vectori binari ce indeplinesc anumite conditii. Modulul poseda registrele de intrare si iesire REGIN[16] si REGIES[16], registrul intern A[4] si bistabilul a,
80 intrarea X[16] si iesirile Z[16], gatain, gataies. Descrierea modulului va incepe astfel: MODULE: FILTRU DE CUVINTE MEMORY: REGIN[16]; REGIES[16]; A[4], a INPUTS: X[16] OUTPUTS: Z[16]; gatain; gataies In continuare se va prezenta secventa de pasi AHPL. Un pas AHPL contine toate operatiile elementare, sincrone cu o perioada a ceasului, care au loc la nivelurile resurselor unitatilor de executie si comanda. Fiecare pas de comanda va consta din instructiuni AHPL de atribuire (actiune si o instructiune AHPL de ramificare/control ). < secventa de pasi AHPL >:= < pas AHPL> < pas AHPL >... < pas AHPL > < pas AHPL >:= < lista de instructiuni de atribuire >;< instructiune de ramificatie > < instructiune de atribuire >:= < nul > < transfer sincron > < conexiune > < transfer sicron; conexiune > < instructiune de ramificare >:= < nul > < (F)/(S j ) > < (S j ) > < DEAD END-fara continuare > < nul >:= < absenta instructiunii de atribuire > < instructiune implicita de ramificare la pasul urmator > < transfer sincron >:= < VD <- VLCS > < VD MLCS*F > < MD*F VLCS > VD - vector destinatie. El reprezinta fie un registru simplu, fie un vector format din unul sau mai multe elemente de memorie asamblate pe baza unor operatori de selectie. Indicii superiori si inferiori, care afecteaza operanzii, sunt in mod obligatoriu constante. Se folosesc urmatorii operatori de selectie: A j - elementul j din vectorul A m:n - elementele m, pina la n, din vectorul A, - inlantuire ( concatenare ) A! B - inlantuire pe linii M j - linia j din matricea M
81 M m:n - liniile m, pina la n, din matricea M. VLCS reprezinta un vector logic combinational sursa, constituit din expresii logice combinationale evaluate, ale caror argumente (operanzi) pot fi: elemente de memorie, intrari, functii logice, magistrale, constante binare. Operatorii din expresii sint de tip logic: (SI), (SAU), (NU), / ( SI aplicat elementelor vectorului ), / (SAU aplicat elementelor vectorului), / (SAU-Exclusiv), SYN (sincronizare). In absenta parantezelor, in expresiile din VLCS, operatorii logici si de selectie vor avea urmatoarele prioritati: 1. Negatia si Sincronizarea, 2. Toti operatorii de selectie, cu exceptia inlantuirii, sau, 5. Inlantuirea. MD - matrice de memorie sau asamblaj de registre de memorare. MLCS - matrice logica combinationala sursa, constituita din asamblaje de vectori logici combinationali. F - vector de selectie, ale carui componente sint expresii logice combinationale evaluate, care se exclud mutual: F = ( f 1 ( x 1,...,x n ),...,fm (x 1,...,x n ), unde: ( f i f j =0 ) si ( /F ) = 1; i,j = 1,...,n; i = j; x I { 0,1 }. Expresiile: MLCS*F si MD*F sint echivalente cu expresiile: F/MLCS si F/MD ( selectie pe linii ). < conexiune > := < BUS = VLCS > < BUS = MLCS*F > < Z = VLCS > < Z = MLCS*F > Exemple: D A m:n, B p:q D A + B,C Fie matricea logica combinationala sursa: ( A! B! C ), unde A, B, C sunt vectori logici combinationali, si vectorul logic: F = ( d, e, f ).
82 In aceste conditii se pot scrie urmatoarele instructiuni de atribuire: 1. D ( A! B! C ) * ( d, e, f ) echivalenta cu: D d A U e B U f C 2. ( A! B! C ) * ( d, e, f ) D echivalenta cu: d A e B f C D 3. BUS = ( A! B! C ) * ( d, e, f ) reprezenand o conexiune conditionala la magistrala BUS a unuia dintre vectorii A, B, sau C. In instructiunea de tip ramificatie, F are semnificatia prezentata mai sus, iar E constituie un vector ale carui componente (E i ) sunt numere/etichete de pasi AHPL, din secventa data, la care poate avea loc ramificarea ( transferul comenzii ). De exemplu, ramificarea: ( x, x )/( E i, E j ) asigura transferul comenzii la linia Ei, daca x = 1 sau la linia Ej, daca x = 0. DEAD END marcheaza sfirsitul comenzii, terminarea operarii in sensul ca instructiunea de comanda nu mai genereaza trecerea la pasul urmator din secventa, acesta lipsind. Dupa END SEQ ( sfirsitul secventei de pasi AHPL ), in descrierea modulului sint plasate instructiunile individuale de atribuire nesincronizate, conexiunile permanente, operatiile de comanda asincrone, cum ar fi operatia RESET(1), care forteaza reluarea secventei numerotate de pasi AHPL de la linia 1. Descrierea AHPL a unei functii. UNIT: < nume de functie >( <parametri> ) < declaratii > < secventa de instructiuni de conexiune, contorizare, transfer al comenzii > END < parametri > := < lista de intrari > < lista de intrari >:= < VLC > < MLC > < declaratii >: < INPUTS > < OUTPUTS >
83 < INPUTS >: < lista de intrari separate prin ; > < OUTPUTS >:< vector logic combinational > < secventa de instructiuni > := < conexiune > < atribuire de valoare unui indice > < transfer conditionat al comenzii > < atribuire de valoare unui indice > := < nume indice valoare binara zecimala > < transfer conditionat al comenzii >:= < (F)/(S) > Efectul executiei unui program AHPL, ce descrie o unitate, reprezinta compilarea - generarea schemei hardware pentru acea unitate combinationala. Numai instructiunile de conexiune genereaza efectiv hardware. Instructiunile care manipuleaza indici si cele de transfer asigura efectuarea unor operatii de ciclare pentru generarea unor copii multiple ale aceleiasi scheme. Folosirea functiilor, in cadrul unor module, presupune descrierea lor ca unitati, o singura data, in vederea compilarii/generarii schemei logice combinationale specifice. Unitatea poate fi apelata ca functie, in cadrul instructiunilor de atribuire ( transfer conexiune ), din secventa de pasi AHPL, a unui modul. In rezumat structura bloc a unui sistem numeric consta din module si functii: Sistem Numeric *) Specifica o conexiune Modul Nume modul Declaratii Pas secv. Procedura Modul Secventa de comanda Pas secv. Sfarsit secventa Pas secv. Transferuri si conexiuni Modul Sfarsit Unitate Nume unitate Declaratii Pas secv. * ) Functie Unitate Secventa de conexiuni Pas secv. Sfarsit Pas secv Unitate
84 Sintaxa unui pas de comanda din secventa: Pas din secventa de comanda Actiune Ramificatie NUL Instructiune de conectare Transfer sincron Transferuri si conexiuni (F)/(E) (E j ) NUL Fara continuare (DEAD END) Transferul sincron poate avea unul din urmataoarele formate: VD VLCS Transfer sincron VD MLCS * F MD * F VLCS Instructiunea de conectare poate avea unul din urmatoarele formate: Instructiune de conectare BUS = VLCS BUS = MLCS*F z = VLCS z = MLCS * F Exemple de descrieri AHPL ale unor UNITATI (Circuite Logice Combinationale) si ale unor module. 1. Sumatorul Complet (FULLADD). Sumatorul Complet reprezinta un circuit logic combinational cu trei intrari: x, y, cin si doua iesiri: sum, cout. Intrarile x si y sunt intrari de date de cate un bit (corespunzatoare unui rang oarecare i, in cazul adunarii a doi vectori binari X si Y), iar cin este intrarea de transport (din rangul inferior). Iesire sum corespunde sumei, pentru rangul curent, iar cout constituie transportul in rangul urmator. x y cout FULLADD cin sum
85 Ecuatiile logice pentru sum si cout sunt urmatoarele: sum = ( x y cin ) ( x y cin ) ( x y cin ) ( x y cin ) cout = ( x y ) ( x cin ) ( y cin ) Aceste ecuatii se pot implementa cu ajutorul portilor SI, SAU, NU. Folosind si porti SAU-EXCLUSIV, expresiile de mai sus devin mai simple: sum = x y cin cout = ((x y) cin ) ( x y ) Cu ajutorul ecuatiilor de mai sus se poate prezenta o secventa AHPL, de descriere a Sumatorului Complet, sub forma unei Unitati: UNIT: FULLADD(x ; y ; cin) INPUTS: x ; y ; cin OUTPUTS: FULLADD[2] 1. a = x y 2. b = x y 3. sum = a cin 4. c = a cin 5. cout = b c 6. FULLADD 0 = cout 7. FULLADD 1 = sum END Primele cinci instructiuni reprezinta pasi de conectare, iar ultimele doua instructiuni constituie iesirile. Se poate observa ca secventa care descrie un Sumator Complet are un caracter spatial, in sensul ca pasii reprezentati corespund iesirilor/intrarilor portilor logice, care intra in componenta unei retele spatiale. Pasii 1-7 nu sunt legati de vreun mecanism de temporizare. Elementul timp intervine, in acest context, numai in legatura cu intarzierea in propagarea semnalelor prin porti.. Intrarile x, y si cin trebuie sa fie stabile pana la obtinerea rezultatelor sum si cout. Pe baza Unitatii FULLADD se poate genera un sumator cu transport succesiv pentru numere binare de cate 16 biti.
86 Sumator, ADD, cu transport succesiv, pentru numere binare de cate 16 biti. Pentru realizarea unui asemenea sumator, se vor utiliza, in caltate de blocuri constructive, componentele Sumatorului Complet: FULLADD 0 si FULLADD 1. Acestea vor fi chemate succesiv, in cadrul unor cicluri, pentru fiecare bit al sumatorului ADD. In cadrul programului AHPL, pentru controlul ciclurilor se va introduce un indice i, care va fi initializat, decrementat si testat. Operatiile corespunzatoare manipularii indicelui i vor fi marcate cu sageti cu corp dublu, care vor fi tratate intr-o maniera specifica de catre compilatorul, care va genera schema lui ADD. UNIT: ADD( X; Y ) INPUTS X[16]; Y[16] OUTPUTS: ADD[17] 1. C 16 = 0 2. i C i = FULLADD 0 ( X i ; Y i ; C i+1 ) 4. S i = FULLADD 1 ( X i ; Y i ; C i+1 ) 5. i i 1 6. ( i 0)/(3) 7. ADD = C 0, S 0:17 END Compilarea manuala a acestui program AHPL, va genera elementele schemei sumatorului ADD, in maniera prezentata mai jos la nivelul primelor doua si al ultimei parcurgeri a programului.
87 X 15 Y C 15 C 16 FADD S X 14 Y 14 X 15 Y 15 C 14 C 15 C 16 FADD FADD S 14 S X 0 Y 0 X 14 Y 14 X 15 Y 15 FADD C 0 C 14 C 15 C 16 FADD FADD C 0 S 0 S 14 S 15 ADD 0 ADD 1 ADD 14 ADD Decodificatorul DCD. Decodificatorul DCD(A), unde A este un vector binar de n biti, este un circuit combinational cu n intrari si 2 n iesiri. Pentru oricare vector binar, aplicat la intrare, numai o singura iesirea decodificatorului va fi activa. A 0 DCD 0 A 1 DCD 1 DCD A n DCD 2 n -1 Descrierea DCD(A) in AHPL este urmatoarea: UNIT: DCD(A) INPUTS: A[n] OUTPUTS: DCD( 2 n ) 1. i 0 2. DCD i = /(( n Τ i ) / A), ( n Τ i ) / A) 3. i i i ( i < 2 n )/(2) END
88 Primul pas initializeaza indexul i, pentru a stabili iesirea decodificatorului, care urmeaza sa fie evaluata. Operatiile inceteaza dupa evaluarea tuturor iesirilor decodificatorului DCD. Pentru a intelege cum se evalueaza iesirile decodificatorului, sa considera cazul particular n = 4 si i = 5. DCD 5 = /(( 4 Τ 5 ) / A), ( 4 Τ 5 ) / A ) = /((0,1,0,1) / A), (0,1,0,1) / A) = /(( A 1, A 3 ), (A 0, A 2 )) = A 0,A 1, A 2, A 3 In cazul in care A = A 0,A 1, A 2, A 3 = (0, 1, 0, 1) se obtine DCD 5 =1. Celelalte iesiri DCD j, pentru care j {0, 1, 2,.., 2 n-1 } j 5, vor lua valoarea Circuitul, BUSFN, de citire a unui cuvant dintr-o memorie M. Se considera o memorie M, alcatuita din mai multe registre M 0, M 1,, M 2 m 1. Memoria primeste informatiile de adresa de la un registru RA si efectueaza operatiile de citire/scriere prin intermediul unui registru RD. Scrie Citeste Adresa R A Comnada ( DCD), (BUSFN) M 0 M m -1 M RD Data Memoria M dispune de o unitate de comanda, care asigura controlul operatiilor de scriere si citire, pe baza semnalelor primite din exterior. Operatiile de citire si scriere se pot descrie, la nivelul transferurilor intre registre, dupa cum urmeaza: Citire i. RA Adresa (i +1). RD BUSFN( M; DCD(RA)); Citeste = 1 Scriere j. RA Adresa; RD Data (j +1). M* DCD(RA) RD; Scrie = 1
89 BUSFN(M; DCD(RA)) reprezinta o functie logica combinationala, care are ca argumente o matrice M, cu ρ2m linii si ρ1m coloane, pe de-o parte si un vector DCD(RA), cu 2 m componente, pe de alta parte, unde ρ2m = 2 m. Daca in locul vectorului DCD(RA) se utilizeaza un vector R[r], iar ρ1m este egal cu p, se poate obtine urmatoarea descriere AHPL: UNIT: BUSFN( M ; R ) INPUTS: M[ r : p ] OUTPUTS: BUSFN[ p ] 1. N 0 = M 0 R 0 2. i 1 3. N i = ( M i R i ) N i-1 4. i i i ( i < r )/(3) 6. BUSFN = N r-1 END O schita a implementarii unitatii BUSFN, in contextul operatiei de citirere, este data mai jos. M0 M1 Mp2M-1 SCNi DCD0 DCD1 DCDp2M-1 BUSFN(M;DCD(RA)) citeste N 0 1 N MAG/BUS
90 4. Implementarea secventei start/reset (PRESET). Implementarea primilor pasi dintr-o secventa AHPL, din cadrul descrierii unui modul a carui operare este lansata de semnalul start, este prezentata mai jos. Primul bistabil (1), cat si celelalte bistabile (2), (3), (4) ale schemei de comanda au fost fortate, printr-un semnal reset/pre/clr asincron, in starile Q 1 = 1 si, respectiv, Q 2 =0, Q 3 =0, Q 4 =0. Comanda reset, in cazul de fata PRESET, are un caracter asincron si apare, in secventa AHPL, intre specificatiileendseq si END, sub forma: PRESET(1), unde (1) constituie linia AHPL, la care se efectueaza saltul (un GO TO 1 asincron). SCN2 SCN3 SCN4 D PRE Q D Q D Q D C C CLR C CLR C CLR Q SYN(start) Ceas PRESET Ceas start SYN(start) SCN1 SCN2 SCN3
91 In continuare, operarea automatului cu stari complet decodificate, la nivelul primului bistabil, este prezentata sub forma diagramei de tranzitii: SYN(start) 1 PRESET(1) SYN(start) 2 Dupa cum se constata, automatul va parasi starea (1) numai in conditiile in care semnalul SYN(start) va trece pe nivel ridicat. In caz contrar, starea (1) se va extinde pe un numar indefinit de perioade de ceas. 5. Sincronizarea semnalului start. In cele prezentate mai sus, s-a vazut necesitatea existentei unui semnal de start, pentru activarea automatului de comanda al unui modul. De cele mai multe ori semnalul start este dat manual, ceea ce face ca el sa fie asincron cu ceasul sistemului si sa aibe o durata relativ mare. Sincronizarea semnalului start, specificata prin operatorul SYN(start), se poate realiza cu ajutorul diferitelor scheme. Mai jos se prezinta una dintre acestea, impreuna cu diagramele de semnale. SYN(start) SNP(SYN(start)) start D PRE Q D PRE Q ceas C C SYNI(start) ceas start SYN(start) SYNI(start) SNP(SYN(start))
92 Se poate usor observa ca, cel de-al doilea bistabilul reproduce sub forma negata, la iesirea Q, semnalul SYN(start), intarziat cu o perioada de ceas. Prin efectuarea produsului logic intre SYN(start) si semnalul SYNI(start) se obtine un semnal de start sincronizat, de tip nivel, cu durata unei perioade de ceas: SNP(SYN(start)). 6. Comanda citirii instructiunii dintr-o memorie principala asincrona. Memoriile principale ale calculatoarelor numerice reprezinta module, care opereaza asincron, de cele mai multe ori. Secventa AHPL, pentru citirea unei instructiuni dintr-o memorie M, prevazuta cu registrele de adresa RA si registrul de date RD, in registrul de instructiuni RI, are urmatorul aspect: 2. RA CP /* CP este contorul programului 3. RD BUSFN(M;DCD(RA)) 4. RI RD In cazul unei memorii asincrone, al carei model logic este dat mai jos, adresele si datele presupun, pe de-o parte, folosirea unor magistrale: ADR, DATIN, DATIES, iar comanda, pe de alta parte, utilizarea unor semnale de control citeste, scrie si de stare ocupat. DATIN ADR R A M R D DATIES MAG citeste scrie Comanda ocupat Modelul logic al modulului memoriei principale.
93 In aceste conditii secventa AHPL, de citire a unei instructiuni, din memorie, capata urmatorul aspect: 2. ADR CP; citeste = 1 SYN(ocupat)/(2) 3. nul SYN(ocupat)/(3) 4. FARA INTARZIERE MAG = DATIES; RI MAG citeste ADR <- CP SYN(ocupat) MAG = DATEIES RI <- MAG (1) D Q D 2 3 C CLR C CLR Q ceas ceas SCN2 citeste ocupat SYN(ocupat) SCN3 SCN4 Se poate constata faptul ca, pasul (4), FARA INTARZIERE, este amorsat in ultima parte a pasului anterior (3), ceea ce conduce la castigarea unei perioade de tact.
94 7. Exemple de module descrise in AHPL. Umatoarele doua exemple de module sunt preluate din lucrarea Calculatoare numerice. Hardware-structura si proiectare, autori F.J. Hill si G.R.Peterson, Editura Tehnica Unitate de comanda pentru o masina unealta. Se cere proiectarea unei unitati de comanda, pentru o masina unealta, care foloseste o memorie ROM[1024:18] pentru a stoca patru secvente, de cate 256 cuvinte x 18 biti, structurati sub forma a trei campuri, pentru a specifica pozitia uneltei in trei dimensiuni. Pozitia curenta a uneltei este memorata intr-un registru PR[18], care furnizeaza, conform structurarii sale pe cele trei campuri, vectori binari, de cate sase biti, pentru trei convertoare numeric/analogice CN/, care comanda echipamentul de actionare al masinii unelte. Comunicarea cu operatorul se realizeaza cu ajutorul unui bistabil start/stop ss (controlat din exterior de catre semnalele de comanda start si stop) si al unui registru RSECV[2] (comandat di exterior prin semnalul SECV[2], in care se memoreaza numarul secventei, care se executa: 00, 01, 10, 11. Prin fortarea in unu a bistabilului ss, se va lansa in executie secventa al carei numar este stocat in RSECV. Daca, pe parcursul functionarii sistemului, operatorul forteaza in unu intrarea stop, bistabilul ss va lua valoarea zero, secventa curenta se va termina si in registrul RP se va stoca un vector binar cu 18 componente egale cu zero, iar unitatea de comanda va trece in starea initiala (1). In cazul terminarii normale a secventei curente vor avea loc operatiile: ss 0 ; PR 18 Τ 0 ; (1) Modificarile continuturilor lui ss si RSECV vor fi sincronizate cu ceasul. Solutie: Pentru implementare, pe langa resursele mentionate mai sus, se va mai introduce un registru de adrese RA[10] de 10 biti. Cele patru secvente sunt notate cu A, B, C, D si vor avea, in zecimal, urmatoarele adrese de start: 0, 256, 512, 768. Frecventa ceasului este compatibila cu rata impusa de citirile efectuate de masina unealta. Un cuvant se citeste din memeorie intr-o singura perioada de tact. SECV start stop RSECV ss R A ROM R P IESRP
95 MODULE: Unitate_de _comanda_pentru_o_masina_unealta MEMORY: ROM[1024:18]; RP[18]; RA[10]; RSECV[2]; ss INPUTS: SECV[2]; start; stop OUTPUTS: IESRP[18] 1. RSECV SECV (ss, ss)/(1,2) 2. RA RSECV 0, RSECV 1, 8 Τ 0 3. RP BUSFN(ROM; DCD(AR)) 4. RA INC(RA) (( /RA 2:9 ss ), ss, ( /RA 2:9 ss ))/(5, 6,3) 5. ss 0 6. RP 18 Τ 0 (1) ENDSECV ss (1! 0) * (start, stop) IESRP = RP END Plecand de la descrierea AHPL, de mai sus, sa se detalieze sectiunea de executie si sectiunea de comanda la nivelul schemelor cu porti, bistabile, registre, inclusiv semnalele de comanda. 71. Verificator de caractere duble. Sa se proiecteze un modul numeric destinat verificarii caracterelor duble, prezente intr-un sir de caractere de cate 8 biti. Modulul poseda o linie de intrare, data, care va fi activata, pe nivel ridicat, de catre sursa de caractere, atunci cand un nou caracter este disponibil pe cele 8 linii de intrare CAR. Tranzitiile pe intrarile data si CAR[8] sunt sincronizate cu ceasul verificatorului de caractere. O linie de iesire, accept, va furniza un semnal de tip nivel, cu durata unei perioade de tact, dupa acceptarea caracterului de la intrarea CAR. O linie de iesire, y, conectata la un vistabil, Y, va fi activa pe nivel ridicat, in cazul in care cel mai recent caracter receptionat reprezinta o dublura a oricarui alt caracter din sirul de 16 caractere receptionate anterior. Iesirea
96 y va trece in 0 atunci cand accept este fortat in 1, ceea ce indica receptionarea unui nou caracter. Intervalul intre spsirile a doua caractere succesive este suficient de mare pentru a permite verificarea seriala a existentei vreunei dubluri. Sa se prezinte descrierea in AHPL a verificatorului de caractere duble. CAR[8] RIN[8] data accept CNT[4] MRD[16:8] Y[1] y Solutie: Verificatorul de caractere duble va contine un tablou de 8 registre de deplasare, a cate 16 biti fiecare. Acest tablou de registre va fi vazut ca o memorie MRD de 16 cuvinte a cate 8 biti: MRD[16:8]. In schema trebuie prevazute un registru de intrare RIN[8] si un contor CNT[4], de caractere. Caracterul curent, receptionat in RIN, este comparat cu fiecare caracter, stocat in MRD, in procesul rotirii caracterelor catre linia superioara. CNT va contoriza verificarea celor 16 caractere din MRD. Dupa terminarea verificarii ultimului caracter din MRD, caracterul curent, din RIN, este fortat in MRD 15, in timp ce cuvantul, inregistrat de cel mai mult timp, care se afla in MRD 0, este pierdut. La detectarea unui caracter dublu semnalul y este fortat in 1. Descrierea AHPL a modulului. MODULE: Verificator_de_caractere_duble MEMORY: MRD[16:8]; RIN[8]; CNT[4]; Y[1] INPUTS: CAR[8]; data OUTPUTS: accept; y 1. (data, data)/(1, 2) 2. accept = 1; y 0 RIN CAR; CNT 4Τ 0
97 3. Y * /(RIN MRD 0 ) 1 CNT INC(CNT) MRD (MRD 1:15! MRD 0 ) ( /CNT, /CNT )/(4,3) 4. MRD (MRD 1:15! RIN) (1) ENDSEQUENCE y =Y END
98
99 module calculator; // declaratii registre, memorie etc reg [7:0] ac, ri, rd; reg [3:0] ra, cp; reg z,s,c,reset; reg [7:0] m[0:15]; //incarcarea programului initial begin: incarca_prog //incarcarea programului $readmemb("prog2.v",m); //afisarea rezultatelor simularii sub forma tabelara $display(" timp cp ra rd ri ac z s reset"); $monitor("%d %d %h %h %h %h %h %h %h", $time, cp,ra,rd,ri,ac,z,s,reset); //afisarea formelor de unda $vw_dumpvars(); $vw_group("all",$time,cp,ra,rd,ri,ac,z,s,reset); //aplicarea semnalului reset (vezi task-ul apply_reset) apply_reset; end //oprire simulare initial begin: stop_at #300; $stop; end //bucla principala always begin:bucla_principala if (!reset) begin #10; fetch; #10; execute; end else #10; end // mijloace de depanare task apply_reset; begin reset = 1; #10;
100 reset = 0; cp = 0; ac = 0; end endtask // Task-urile principale: fetch, execute task fetch; begin rd = m[cp]; cp = cp + 1; end endtask task execute; begin ri = rd; case(ri[7:4]) 4'b0000:begin // LAC ra = ri[3:0]; rd = m[ra]; ac = rd; end 4'b0001:begin // SAC ra = ri[3:0]; rd = ac; m[ra] = rd; end 4'b0010:begin // ADN ra = ri[3:0]; rd = m[ra]; ac = ac+rd; s = ~ac[7]; z = ~( ac); end 4'b0011:begin //SCD ra = ri[3:0]; rd = m[ra]; ac = ac-rd; s = ~ac[7]; z = ~( ac); end 4'b0100: begin//and ra = ri[3:0]; rd = m[ra];
101 ac = ac & rd; end 4'b0101:begin // OR ra = ri[3:0]; rd = m[ra]; ac = ac rd; end 4'b0110:begin // XOR ra = ri[3:0]; rd = m[ra]; ac = ac ^ rd; end 4'b0111:begin // NAC ac = ~ac; end 4'b1000:begin // JMP cp = ri[3:0]; end 4'b1001:begin // JPZ if(z)begin cp = ri[3:0]; end else cp = cp; end 4'b1010:begin // JN if(~z) begin cp = ri[3:0]; end else cp = cp; end 4'b1100:// HLT begin $display("halt"); $stop; end default: $display("cod de operatie inexistent"); endcase end endtask endmodule
102 //prog2.v Veriwell -k C:\Program Files\VeriWell\exe\VeriWell.key -l C:\Program Files\VeriWell\exe\VeriWell.log calculator2.v VeriWell for Win32 HDL <Version 2.1.1> Tue Nov 21 08:19: This is a free version of the VeriWell for Win32 Simulator Distribute this freely; call VERIWELL for ordering information See the file "!readme.1st" for more information Copyright (c) Wellspring Solutions, Inc. All rights reserved Memory Available: 0 Entering Phase I... Compiling source file : calculator2.v The size of this model is [7%, 7%] of the capacity of the free version Entering Phase II... Entering Phase III... No errors in compilation Top-level modules: calculator timp cp ra rd ri ac z s reset 0 x x xx xx xx x x x xx xx 00 x x x 0c xx 00 x x c a5 0c a5 x x 0
103 40 2 c 4d 0c a5 x x d 5a 4d 00 x x d 0c 4d 00 x x c a5 0c a5 x x c 5d 0c a5 x x d 5a 5d ff x x d 0c 5d ff x x c a5 0c a5 x x c 6e 0c a5 x x e aa 6e 0f x x e c0 6e 0f x x 0 halt Stop at simulation time 150 C1>
104 CSCI 320 Computer Architecture Handbook on Verilog HDL By Dr. Daniel C. Hyde Computer Science Department Bucknell University Lewisburg, PA Copyright 1995 By Daniel C. Hyde August 25, 1995 Updated August 23, 1997
105 1. Tabla de materii 1. Introducere Ce este Verilog? Ce este VeriWell? De ce se utilizeaza Verilog HDL? Limbajul Verilog Primul Program Verilog Conventii Lexicale Structura unui Program Tipuri de Date Tipuri de Date Fizice Tipuri de Date Abstracte Operatori Operatori Arithmetici. Binari Operatori Arithmetici. Unari Operatori Relationali Operatori Logici Operatori la Nivel de Bit Operatori Unari de Reducere Alti Operatori Operator de Precedenta Constructii de Control Selectia: Instructiunile - if si case Repetarea: Instructiunile - for, while si repeat Alte Instructiuni Instructiunea - parameter Atribuirea Continua Atribuiri Procedurale Blocante si Non blocante Task-uri si Functii Controlul Sincronizarii (Timing) Controlul Intarzierii (#) Evenimente Instructiunea wait Instructiunile fork and join Examplu: Semafor de Trafic Utilizarea simulatorului Veriwell Crearea Fisierului Model Pornirea simulatorului Cum se iese din Simulator? Optiunile Simulatorului Depanarea Functiile si Task-urile de Sistem $cleartrace $display $finish $monitor......
106 4.5 $scope $settrace $showscopes $showvars $stop $time..... Bibliografie Introducere Verilog reprezinta un Limbaj de Descriere a Hardware-lui (Hardware Description Language -HDL). Un asemenea limbaj este utilizat pentru descrierea sistemelor numerice, de exemplu, un calculator sau o componenta a acestuia. Un sistem numeric poate fi descris, la niveluri diferite, in functie de aspectele care intereseaza. Astfel, un HDL poate descrie amplasarea traseelor de legatura (firele), a rezistoarelor si tranzistoarelor pe un circuit integrat, adica la nivel de comutator. Limbajul HD poate descrie sistemul numeric avand in vedere portile logice si bistabilele componente, adica la nivel de poarta. La un nivel mai ridicat sistemul numeric poate fi descris in termenii transferurilor vectorilor de informatie intre registre. Acesta reprezinta Nivelul Transferurilor intre Registre (Register Transfer Level - RTL). Limbajul Verilog suporta toate aceste niveluri. In cele ce urmeaza se va pune accent pe aspectele limbajului Verilog, care se refera nivelul RTL Ce este Verilog? Verilog reprezinta unul dintre cele doua limbaje importante HDL, folosite de catre proiectantii din industrie si din mediile academice. VHDL reprezinta cel de-al doile limbaj. In ceea ce priveste industria parerile sunt impartite. Unii cred ca Verilog este mai usor de invatat si de utilizat decat VHDL. Standardul IEEE, pentru VHDL, a aparut in 1987, in timp ce standardul IEEE, pentru Verilog, a fost elaborat in Verilog este asemanator limbajului C, care este foarte raspandit in randurile inginerilor electronisti si de calculatoare. VHDL este asemanator cu limbajul Ada, mai putin cunoscut de catre inginerii amintiti mai sus. Verilog a fost lansat, in 1985, de catre Gateway System Corporation, care a fost preluata de catre Cadence Design Systems, Inc. s Systems Division. Pana in 1990, cand a luat fiinta Open Verilog International (OVI), HDL Verilog a fost proprietatea companiei Cadence. Ulterior, Cadence a plasat Verilog in Domeniul Public, cu speranta deschiderii unei piete de produse software legate de Verilog VHDL, in conditiile in care acesta se va bucura de o larga raspandire.
107 Cadence a realizat faptul ca utilizatorii de Verilog HDL doresc alt software si alte servicii, care sa se bazeze pe pe acest limbaj, in vederea elaborarii de unelte de dezvoltare. Verilog HDL permite proiectantului de hardware sa descrie proiectele, atat la un inalt nivel de abstractizare, cum ar fi cel al arhitecturii sau comportamental, cat si la niveluri mai joase de implementare ( nivelurile portii si comutatorului), conducand la mastile/sabloanele pentru Circuitele Integrate pe Scara Foarte Larga (Very Large Scale Integration VLSI-Integrated Circuits IC- ) si la fabricarea circuitului. O prima utilizare a HDL-eurilor este acea legata de simularea proiectelor inainte de a fi introduse in fabricatie. Textul de fata nu acopera toate aspectele ce privesc Verilog HDL, ci numai acelea ce privesc nivelurile arhitectural si comportamental. Textul se axeaza pe proiectarea la nivel RTL Ce este VeriWell? VeriWell reprezinta o implementare cuprinzatoare a lui Verilog HDL, dezvoltata initial de catre Wellspring Solutions, Inc. VeriWell suporta limbajul Verilog, conform specificatiilor Manualului de Referinta a limbajului, eleborat de catre OVI. VeriWell a fost lansat in decembrie 1992 si a fost elaborat pentru a fi compatibil, atat cu standardul OVI, cat si cu Verilog-XL, al companiei Cadence. VeriWell este distribuit si vandut de catre SynaptiCAD Inc. Pentru platformele Windows 95/NT, Windows 3.1,Macintosh, SunOS si Linux, SynaptiCAD Inc.ofera versiuni free ale produsului, care sunt identice cu cele ale produsului comercial, cu exceptia limitarii la 1000 de linii de cod HDL 1.3. De ce se utilizeaza Verilog HDL? Sistemele numerice sunt extrem de complexe. La nivelul celor mai mici detalii, ele constau in sute de miloane de elemente de tipul tranzistoarelor sau al portilor. De aceea, pentru sistemele numerice mari, proiectarea la nivelul portilor este practic imposibila. Pe durata mai multor decade, schemele logice au servit ca lingua franca pentru proiectarea logica, ceea ce nu mai este cazul, in conditiile de astazi. In prezent, complexitatea hardware-lui a devenit atat de mare incat o schema la nivelul portilor logice este aproape inutila. Schema devine un paienjenis de conexiuni, care nu mai arata functionalitatea proiectului. Incepand cu 1970, inginerii de calculatoare si inginerii electronisti au apelat la limbajele de descriere a hardware-lui (HDL). Cele mai raspandite HDL-euri in industrie sunt Verilog si VHDL. In urma cu 5 ani Verilog se afla pe primul loc cu peste de utilizatori/proiectanti la companii de renume cum sunt: Sun Microsystems, Apple Computer, Motorola s.a.
108 Limbajul Verilog ofera proiectantului mijloace de descriere a unui sistem numeric in cadrul unei largi game de niveluri de abstractizare si, in acelasi timp, ii asigura accesul la uneltele de proiectare asistata de calculator, la nivelurile avute in vedere. Verilog permite proiectantilor de hardware sa descrie proiectele cu ajutorul constructiilor comportamentale, amanand detaliile de implementare pentru stadiile ulterioare ale procesului de proiectare. O reprezentarea abstracta ajuta proiectantul in explorarea alternativelor arhitecturale prin simulari, pentru a detecta congestiile proiectului inaintea inceperii proiectarii detaliate. Desi nivelul comportamental Verilog reprezinta un nivel inalt de descriere a unui sistem numeric, el reprezinta o notatie precisa. Exista unelete de proiectarea asistata, materializate prin programe, care vor compila programele elaborate in Verilog pana la nivelul circuitelor constand in porti si bistabile. Astfel, se poate merge in laborator pentru a se conecta circuitele logice prin cablaje in vederea obtinerii unui sistem functional. Alte unelte de proiectare pot compila programele descrise in Verilog intr-o descriere a mastilor de circuite integrate, pentru Integrarea pe Scara Larga (VLSI). De aceea, cu ajutorul unor unelte automatizate corespunzatoare se poate crea o descriere a proiectului VLSI in Verilog, in vederea transmiterii ei prin posta electronica, catre o topitorie de siliciu, pentru a primi ulterior, in cateva saptamani, circuitul integrat. Verilog permite, de asemenea, proiectantului sa specifice proiectele la nivelul portii logice, folosind constructiile porti si la nivelul tranzistorului, utilizand constructiile comutator. Scopul urmarit, in materialul de fata, nu este acela de a crea circuite VLSI, ci de a folosi limbajul Verilog pentru a descrie precis functionalitatea oricarui sistem numeric, de exemplu, un calculator. In orice caz, un circuit VLSI, proiectat pe baza constructiilor comportamentale din Verilog, va fi destul de lent si va ocupa o arie importanta pe pastila de siliciu. Nivelurile mai coborate ale limbajului Verilog permit inginerilor sa optimizeze circuitele logice si mastile/sabloanele VLSI pentru a maximiza viteza si a minimiza aria circuitului VLSI 2. Limbajul Verilog. Aceste note de curs nu isi propun o descriere completa a limbajului Verilog. Vor fi descrise numai acele elemente ale linbajului, care vor permite studentului sa exploreze aspectele arhitecturale ale calculatoarelor. De fapt, aceste note acopera numai o fractiune a limbajului.
109 Pentru o descriere completa a Verilog HDL se pot examina lucrarile date la bibliografie, cat si standardul IEEE. Studiul limbajului Verilog va fi inceput prin parcurgerea unui exemplu, constand intr-un program simplu Verilog Examinarea instructiunilor de atribuire permite observarea similitudinii limbajului Verilog cu limbajul C. Comentariile sunt asemanatoare cu cele din C++, adica //, la inceputul liniei. Limbajul Verilog descrie un sistem numeric sub forma unui set de module, dar, in cele ce urmeaza va fi prezent un singur modul numit simple 2.1 Primul program Verilog. //Dan Hyde; August 9, 1995 // Un prim model numeric in Verilog module simple; // Exemplu simplu la nivel RTL, pentru a demonstra Verilog. // Registrul A este incrementat cu unu. Apoi primii patru biti ai registrului B sunt incarcati cu // valorile negate ale ultimilor patru biti din A. C reprezinta o reducere and a ultimilor doi biti // din A. //declare registers and flip-flops reg [0:7] A, B; reg C; // Cele doua constructii initial si always opereaza concurent initial begin: stop_at // Va opri executia dupa 20 unitati de simulare. #20; $stop; end // Aceste instructiuni sunt executate la timpul simulat 0 ( nu exista #k). initial begin: Init // Initializeaza registrul A. Celelalte registre au valori x. A = 0; // Antetul de afisare. $display("time A B C"); // Afisaza valorile A, B, C in cazurile in care acestea se modifica. $monitor(" %0d %b %b %b", $time, A, B, C);
110 end //main_process va cicla pana la terminarea simularii. always begin: main_process // #1 insemna executia dupa o unitate de timp de simulare. #1 A = A + 1; #1 B[0:3] = ~A[4:7]; // ~ este operatorul "not" la nivel de bit #1 C = &A[6:7]; // reducerea "and" a ultimilor doi biti ai registrului end endmodule In module simple au fost declarate doua registrea A si B de cate 8 biti si un registru C, de un bit sau bistabil. In interiorul modulului, o constructie always si doua constructii initial descriu firele de control, care se executa in acelasi timp sau concurent. In constructia initial instructiunile sunt executate secvential ca in C sau in alte limbaje imperative traditionale. Constructia always este asemanatoare cu constructia initial cu exceptia ca aceasta cicleaza continuu, cat timp opereaza simulatorul. Notatia #1 semnifica faptul ca instructiunea care urmeaza se va executa cu o intarziere de o unitate de timp simulat. De aceea, firul de control, provocat de catre prima constructie initial, va intarzia, cu 20 unitati de timp simulat, chemarea task-ului de sistem $stop si va opri simularea. Task-ul de sistem $display permite proiectantului sa tipareasca mesajele in maniera in care printf o face in limbajul C. La fiecare unitate de timp simulat, cand una dintre variabilele listate isi modifica valoarea, task- ul de sistem $monitor tipareste un mesaj. Functia de sistem $time intoarce valoarea curenta a timpului simulat. Mai jos se prezinta iesirea Simulatorului VeriWell: ( A se vedea Sectiunea 3, referitoare la utilizarea Simulatorului VeriWell). Time A B C xxxxxxxx x xxxxxxxx x xxxx x xxxx xxxx xxxx 0
111 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 0 Stop at simulation time 20 Acest program, cat si rezultatele simularii trebuie studiate cu atentie. Structura programului este tipica pentru programele Verilog, care vor fi scrise in acest curs: o constructie initial, pentru a specifica durata simularii, o alta constructie initial, pentru initializarea registrelor si pentru a specifica registrele care se monitorizeaza si o constructie always, pentru sistemul numeric modelat. De observat ca toate instructiunile din cea de-a doua constructie initial sunt efectuate la timpul time = 0, deoarece nu sunt prevazute instructiuni de intarziere: #<integer>. 2.2 Conventii Lexicale. Conventiile lexicale sunt asemanatoare cu cele din limbajul C++. Comentariile sunt specificate prin // la inceputul liniei, fiind valabile pentru acea linie. Comentariile pe mai multe linii incep cu /* si se termina cu */. Cuvintele cheie, de exemplu, module, sunt rezervate si utilizeaza literele mici ale alfabetului. Limbajul este sensibil la literele mici si la majuscule. Spatiile sunt importante prin aceea ca delimiteaza obiectele in limbaj. Numerele sunt specificate sub forma traditionala ca o serie de cifre cu sau fara semn, in maniera urmatoare: <dimensiune>< format baza><numar> unde <dimensiune> contine cifre zecimale care specifica dimensiunea constantei ca numar de biti. Campul <dimensiune> este optional. Campul <format baza> are un singur caracter urmat de unul dintre urmatoarele caractere b, d, o si h, care specifica baza de numeratie: binara,
112 zecimala, octala si hexazecimala. Campul <numar> contine cifre care corespund lui < format baza>. Exemple: 549 // numar zecimal 'h 8FF // numar hexzecimal 'o765 // numar octal 4'b11 // numarul binar cu patru biti 'b10x // numar binar cu 3 biti, avand ultimul bit necunoscut 5'd3 // numar zecimal cu 5 ranguri -4'b11 // complementul fata de 2, pe patru ranguri al numarului 0011 sau 1101 Campul <numar> poate sa nu aibe semn. Oricare semn trebuie sa fie plasat la inceput. Un sir reprezinta o secventa de caractere plasate intre ghilimele: acesta este un sir. Operatorii pot fi exprimati prin unul, doua sau trei caractere (sectiunea 2.5). Un identificator este specificat printr-o litera sau underscore urmat de zero sau mai multe litere, cifre, semne dolar sau underscores. Identificatorii pot avea pana la 1024 caractere. 2.3 Structura unui Program. Limbajul Verilog descrie un sistem numeric ca un set de module. Fiecare dintre aceste module are o interfata cu alte module, pentru a specifica modul in care sunt interconectate. De regula se plaseaza un modul intr-un fisier, fara ca aceasta sa fie o cerinta obligatorie. Modulele opereaza concurent. In general, exista un modul pe nivelul cel mai inalt, care specifica un sistem inchis ce contine, atat datele de test, cat si modelele hardware. Modulul de pe nivelul cel mai inalt invoca aparitii ale celorlalte module. Modulele reprezinta parti hardware, care pot fi de la simple porti pana la sisteme complete ex., un microprocesor. Modulele pot fi specificate, fie comportamental, fie structural (sau o combinatie a celor doua). O specificare comportamentala defineste comportarea unui sistem numeric (modul) folosind constructiile limbajelor de programare traditionale, de exemplu: if, instructiuni de atribuire. O specificare structurala exprima comportarea unui sistem numeric (modul) ca o conectare ierarhica de submodule. La baza ierarhiei componentele trebuie sa fie primitive sau sa fie specificate comportamental. Primitivele Verilog includ atat porti, cat si tranzistoare de trecere (comutatoare). Structura unui modul este urmatoarea: module <nume_modul> (<lista de porturi>);
113 <declaratii> <obiecte ale modulului> endmodule Mai sus <nume_modul> reprezinta un identificator care, in mod unic, denumeste modulul. De asemenea, <lista de porturi> constituie o lista de porturi de intrare (input), iesire (output) sau intrare/iesire (inout), care sunt folosite pentru conectarea cu alte module. Sectiunea <declaratii> specifica obiectele de tip date ca registre (reg), memorii si fire (wire), cat si constructiile procedurale ca function-s si task-s Sectiunea <obiecte ale modulului> poate contine: constructii initial, constructii always, atribuiri continue sau aparitii/instante ale modulelor. Semantica constructiei unui module in Verilog este diferita de cea a subrutinelor, procedurilor si a functiilor din alte limbaje. Un modul nu este chemat niciodata. Un modul are o instanta la inceputul unui program si este prezent pe intreaga durata a programului. O instanta a unui modul Verilog este utilizata ca model al unui circuit hardware la care se presupune ca nu se efectueaza modificari de cablaj. La fiecare instanta a modulului, acesteia i se da un nume. De exemplu NAND1 si NAND2 sunt nume de instante ale porti NAND, in exemplul de mai jos. In acest exemplu este data o specificare comportamentala a unui modul NAND. Iesirea out este negatia produsului and al intrarilor in1 si in2. // Modelul Comportamenta al portii Nand. // Dan Hyde, August 9, 1995 module NAND(in1, in2, out); input in1, in2; output out; // instructiune de atribuire continua. o assign out = ~(in1 & in2); endmodule Porturile in1, in2 si out sunt etichete pe fire. Atribuirea continua assign urmareste in permanenta eventualele modificari ale variabilelor din membrul drept, pentru reevaluarea expresiei si pentru propagarea rezultatului in membrul stang (out). Instructiunea de atribuire continua este utilizata pentru a modela circuitele combinationale la care iesirile se modifica ca urmare a modificarilor intrarilor.
114 Specificarea structurala a unui modul AND, obtinuta ca urmare a conectarii iesirii unui NAND la cele doua intrari ale altui NAND. module AND(in1, in2, out); // Modelul structural al unei porti AND formata din doua porti NAND. input in1, in2; output out; wire w1; // doua instante ale modulului NAND NAND NAND1(in1, in2, w1); NAND NAND2(w1, w1, out); endmodule Acest modul are doua instante ale lui NAND, numite NAND1 si NAND2, conectate printr-un fir intern w1 Forma generala pentru invocarea unei instante este urmatoarea: <nume_modul > <lista de parametri > <numele instantei> (<lista de porturi>); unde <lista de parametri> are valorile parametrilor, care sunt transferate catre instanta. Un exemplu de parametru transferat ar fi intarzierea pe o poarta. Urmatorul modul reprezinta un modul de nivel inalt, care stabileste anumite seturi de date si care asigura monitorizarea variabilelor. module test_and; // Modul de nivel inalt pentru testarea altor doua module. reg a, b; wire out1, out2; initial begin // Datele de test a = 0; b = 0; #1 a = 1; #1 b = 1; #1 a = 0; end initial begin // Activarea monitorizarii $monitor("time=%0d a=%b b=%b out1=%b out2=%b", $time, a, b, out1, out2);
115 end // Instantele modulelor AND si NAND AND gate1(a, b, out2); NAND gate2(a, b, out1); Endmodule De notat ca valorile a si b trebuie mentinute pe toata durata operarii. De aceea este necesara utilizarea unor registre de cate un bit. Variabilele de tip reg stocheaza ultima valoare care le-a fost atribuita procedural. Firul, wire, nu are capacitatea de memorare. El poate fi comandat in mod continuu, de exemplu, prin instructiunea de atribuire continua sau prin iesirea unui modul Daca firele de intrare nu sunt conectate, ele vor lua valoarea x necunoscuta. Atribuirile continue folosesc cuvantul cheie assign in timp ce atribuirile procedurale au forma <variabila reg > = <expresie> unde <variabila reg> trebuie sa fie un registru sau o memorie Atribuirile procedurale pot aparea numai in constructiile initial si always Instructiunile din blocul primei constructii initial vor fi executate secvential, dintre care unele vor fi intarziate de #1 cu o unitate de timp simulat. Constructia always se comporta in acelasi mod ca si constructia initial cu exceptia ca ea cicleaza la infinit (pana la terminarea simularii). Constructiile initial si always sunt utilizate pentru modelarea logicii secventiale (automate cu stari finite) Verilog face o importanta distinctie intre atribuirile procedurale si atribuirea continua assign. Atribuirile procedurale modifica starea unui registru, adica a logicii secventiale, in timp ce atribuirea continua este utilizata pentru a modela logica combinationala. Atribuirile continue comanda variabile de tip wire si sunt evaluate si actualizate atunci cand un operand de intrare isi modifica valoarea. Este important de inteles si de memorat aceste diferente. Toate cele trei module vor fi plasate intr-un fisier, care va fi executat de catre simulator pentru a produce urmatoarea iesire: Time=0 a=0 b=0 out1=1 out2=0 Time=1 a=1 b=0 out1=1 out2=0 Time=2 a=1 b=1 out1=0 out2=1 Time=3 a=0 b=1 out1=1 out2=0 Intrucat simulatorul iese din cadrul evenimentelor, nu a mai fost necesara oprirea explicita a simularii.
116 2.4 Tipuri de Date Tipuri de Date Fizice. Intrucat scopul limbajului Verilog este acela de a modela hardware-ul numeric, tipurile primare de date vor fi destinate modelarii registrelor (reg) si firelor (wire). Variabilele reg stocheaza ultima valoare, care le-a fost atribuita procedural, in timp ce variabilele wire reprezinta conexiuni fizice intre entitati structurale cum ar fi portile. Un fir (wire) nu stocheaza o valoare. O variabila wire reprezinta numai o eticheta pe un fir. Trebuie remarcat faptul ca tipul de date wire reprezinta unul dintre tipurile de date net prezente in Verilog in care mai sunt incluse: and cablat (wand), or cablat (wor) si magistrala cu trei stari (tri). Aceste note se limiteaza numai la tipul de date wire. Obiectele reg si wire, care reprezinta date, pot lua urmatoarele valori: 0 valoarea logica zero sau fals 1 unu logic sau adevarat x valoare logica necunoscuta z impedanta ridicata a unei porti tristate. La inceputul simularii variabilele reg sunt initializate la valoarea x. Oricare variabila wire neconectata la ceva are valoarea x. In declaratii se poate specifica dimensiunea unui registru sau a unui fir. De exemplu, declaratiile: reg [0:7] A, B; wire [0:3] Dataout; reg [7:0] C; specifica registrele A si B ca avand 8 biti, cu cel mai semnificativ bit avand indicele zero, in timp ce registrul C, de opt biti, are indicele sapte, pentru cel mai semnificativ bit. specify Firul Dataout are 4 biti. Bitii unui registru sunt specificati prin notatia:[<start-bit>:<end-bit>]. De exemplu, in cea de-a doua atribuire procedurala, din secventa: initial begin: int1 A = 8'b ; B = {A[0:3] A[4:7], 4'b0000}; end
117 B este fortat la o valoare egala cu suma logica a primilor patru biti din A si a ultimilor patru biti din A, concatenata cu B are acum valoarea Parantezele {} specifica faptul ca bitii a doua sau ai mai multor argumente, separati prin virgule sunt concatenati impreuna. Un argument poate fi replicat prin specificarea numarului de repetitii sub forma: {numar_repetitii{exp1, exp2,..., expn}} Iata cateva exemple: C = {2{4 b1011}}; //lui C I se asigneaza vectorul de biti: 8 b C = {{4{A[4]}}, AA[4:7]}; // primii 4 biti reprezinta extensia semnului. Intr-o expresie gama de referire trebuie sa aibe, pentru indici, expresii constante. Un singur bit poate fi referit ca o variabila. De exemplu: reg [0:7] A, B; B = 3; A[0: B] = 3'b111; // ILEGAL indicii trebuie sa fie constanti!! A[B] = 1'b1; // Referirea la un singur bit este LEGALA. Aceasta cerinta stricta privind valorile constante pentru indici, la referirea unui registru, este impusa de faptul ca se doreste ca expresia sa fie realizabila fizic, in hardware. Memoriile sunt specificate ca vectori de registre. De exemplu Mem are 1K cuvinte de cate 32 de biti. reg [31:0] Mem [0:1023]; Notatia Mem[0] asigura referirea la cuvantul cua adresa zero din memorie. Tabloul de indici pentru o memorie (vector de registre) poate fi un registru. De remarcat faptul ca o memorie nu poate fi accesata la nivel de bit, in Verilog. Pentru a realiza aceasta operatie, cuvantul din memorie trebuie transferat mai intai intr-un registru temporar Tipuri de Date Abstracte. Intr-un model de hardware, pe landga variabilele, care modeleaza hardware-ul, se gasesc si alte tipuri de variabile. De exemplu, proiectantul doreste sa foloseasca o variabila integer, pentru a contoriza numarul de aparitii ale unui eveniment. Pentru comoditatea proiectantului, Verilog HDL poseda mai multe tipuri de date carora nu le corespund realizari hardware. Aceste tipuri de date include integer, real si time. Tipurile de date integer si real se comporta ca si in alte limbaje, de exemplu C.
118 Trebuie subliniata faptul ca variabila reg este fara semn, in timp ce variabial integer reprezinta un intreg de 32 de biti cu semn. Acest fapt are o mare importanta la scadere. Variabila time specifica cantitati, pe 64 de biti, si sunt folosite in conjunctie cu functia de sistem $time. Sunt acceptate tablouri de variabile integer si time, dar nu de reali. In Verilog nu sunt permise tablouri multidimensionale Iata cateva exemple: integer Count; // intreg simplu, cu semn, pe 32 de biti. integer K[1:64]; // un tablou de 64 intregi. time Start, Stop; // doua variabile timp de 64 de biti. 2.5 Operatori Operatori Aritmetici binari. Operatorii aritmetici binari opereaza cu doi operanzi. Operanzii de tip reg si net sunt tratati ca fara semn. Operanziide tip real si integer pot avea semn. Daca un bit oarecare, al unui operand, este necunoscut ( x ), atunci rezultatul este necunoscut. Operator Nume Comentarii + Adunare - Scadere * Inmultire / Impartire Impartirea cu zero furnizeaza un x, necunoscut % Modul Operatori Aritmetici Unari. Operator Nume Comentarii - Minus Unar Modifica semnul operandului sau Operatori Relationali. Operatorii relationali compara doi operanzi si intorc o valoare logica, adica TRUE(1) sau FALSE(0). Daca un bit oarecare este necunoscut, relatia este ambigua si rezultatul este necunoscut. Operator Nume Comentarii > Mai mare decat >= Mai mare decat sau egal < Mai mic decat <= Mai mic decat sau egal == Egalitate logica
119 != Inegalitae logica Operatori Logici Operatorii logici opereaza cu operanzi logici si intorc o valoare logica, adica TRUE(1) sau FALSE(0). Sunt utilizati in instructiunile if si while. A nu se confunda cu operatorii logici Booleeni la nivel de bit. De exemplu,! este un NOT logic iar ~ este NOT la nivel de bit. Primul neaga, ex.,!(5 == 6) este TRUE. Al doile complementeaza bitii, de exemplu: ~{1,0,1,1} este Operator Nume Comentarii! Negatia logica && AND logic OR logic Operatori la nivel de bit. Opeartorii la nivel de bit opereaza pe bitii operandului sau operanzilor. De exemplu, rezultatul lui A& B este AND pentru bitii corespunzatori din A si B. Operand pe un bit necunoscut, se obtine un bit necunoscut (x) in valoarea rezultatului. De exemplu, AND-ul unui x cu un FALSE este un x. OR-rul unui x cu un TRUE este un TRUE. Operator Nume Comentarii ~ Negatia la nivel de bit & AND la nivel de bit OR la nivel de bit. ^ XOR la nivel de bit ~& NAND la nivel de bit ~ NOR la nivel de bit ~^ sau ^~ Echivalenta la nivel de bit NOT XOR Operatori unari de reducere. Operatorii unari de reducere furnizeaza un rezultat de un singur bit prin aplicarea operatorului la toti bitii operandului. de exemplu, &A va efectua AND pe toti bitii lui A. Operator Nume Comentarii & reducere AND reducere OR ^ reducere XOR ~& reducere NAND
120 ~ reducere NOR ~^ reducere XNOR Alti Operatori. Operatorul conditional se comporta ca si in limbajul C. Operator Nume Comentarii === Egalitatea Case. Comparatia la nivel de bit include compararea valorilor x si z. Toti bitii trebuie sa se potriveasca, pentru egalitate. Intoarce TRUE sau FALSE.!== Inegalitatea Case Comparatia la nivel de bit include compararea valorilor x si z. Oricare diferenta intre bitii comparati produce o inegalitate. Intoarce TRUE sau FALSE. {, } Concatenarea Reuneste bitii separati, furnizati de doua sau mai multe expresii separate prin virgule, de exemplu: {A[0], B[1:7]} concateneraza bitul zero din A cu bitii 1pana la 7 din B. << Deplasare la stanga. Pozitiile din dreapta eliberate se incarca cu zero, de exemplu: A = A << 2; //deplaseaza A cu doi biti la stanga si forteaza zero in bitii eliberati. >> Deplasare la dreapta Pozitiile din stanga eliberate se incarca cu zero?: Conditional Atribuie una dintre cele doua valori, in functie de Conditional, de exemplu: A = C>D? B+3 : B-2 semnifica faptul ca daca C > D, atunci valoarea lui A este B+3 altfel B Precedenta operatorilor. Precedenta operatorilor este prezentata mai jos: Varful tabelei corespunde celei mai ridicate precedente, in timp ce baza corespunde celei mai coborate precedente.operatorii de pe aceeasi linie au aceeasi precedenta si asociaza termenul stang celui drept intr-o expresie. Parantezele sunt utilizate pentru a modifica precedenta sau pentru a clarifica situatia. Pentru a usura intelegerea, se recomanda utilizarea parantezelor.
121 operatori unari:! & ~& ~ ^ ~^ + - (cea mai ridicata precedenta) * / % + - << >> < <= > > = ==!= === ~== & ~& ^ ~^ ~ &&?: 2.6 Constructiile de Control. Verilog poseda o bogata colectie de instructiuni de control, care pot fi utilizate in sectiunile procedurale de cod, adica in cadrul blocurilor initial si always. Cele mai multe sunt familiare programatorului, care cunoaste limbajele traditionale de programare, cum ar fi limbajul C. Principala diferenta consta in aceea ca in locul parantezelor { }, din limbajul C, Verilog utilizeaza begin si end. In Verilog, parantezele { } sunt utilizate pentru concatenarea sirurilor de biti. Deoarece cei mai multi utilizatori sunt familiarizati cu limbajul C, urmatoarele subsectiuni vor contine numai cate un exemplu din fiecare constructie Selectia Instructiunile if si case. Instructiunea if este usor de utilizat: if (A == 4) begin B = 2; end else begin B = 4; end Spre deosebire de instructiunea case din C, prima <value> care se potriveste cu valoarea lui
122 <expression> este selectata si instructiunea asociata este executata, apoi controlul este transferat dupa endcase, adica nu sunt necesare instructiuni break ca in C. case (<expression>) <value1>: <instructiune> <value2>: <instructiune> default: <instructiune> endcase In urmatorul exemplu se verifica valoarea semnalului de 1 bit. case (sig) 1'bz: $display("semnal flotant"); 1'bx: $display("semnal necunoscut"); default: $display("semnalul este %b", sig); endcase Repetitia Instructiunile for, while si repeat. Instructiunea for este foarte apropiata de instructiunea for din C, cu exceptia ca operatorii ++ si nu sunt prezenti in Verilog. De aceea se va folosi i = i + 1. for(i = 0; i < 10; i = i + 1) begin $display("i= %0d", i); end Instructiunea while opereaza in forma normala: i = 0; while(i < 10) begin $display("i= %0d", i); i = i + 1; end Instructiunea repeat repeta urmatorul bloc de un numar fixat de ori, in exemplul urmator de 5 ori: repeat (5) begin $display("i= %0d", i);
123 i = i + 1; end 2.7 Alte Instructiuni Instructiunea parameter. Instructiunea parametru permite programatorului sa dea unei constante un nume. In mod tipic se utilizeaza pentru a specifica numarul de biti ai unui registru sau intarzierile. De exemplu, se pot parametriza declaratiile unui model: parameter byte_size = 8; reg [byte_size - 1:0] A, B; Atribuirea Continua. Atribuirea continua comanda variabile de tip wire, fiind evaluate si actualizate ori de cate ori o intrare operand isi modifica valoarea. In cele ce urmeaza valorile de pe firele in1 si in2 sunt inmultite pentru a comanda iesirea out. Cuvantul cheie assign este utilizat pentru a face distinctia intre atribuirea continua si atribuirea procedurala. Instructiunea urmatoare efecteaza produsul semnalelor de pe firele in1 si in2, neaga rezultatul si comanda continuu firul out. assign out = ~(in1 & in2); Atribuiri Procedurale Blocante si Nonblocante. Limbajul Verilog are doua forme pentru instructiunea de atribuire procedurala: blocanta si nonblocanta. Cele doua forme se deosebesc prin operatorii de atribuire = si <=. Instructiunea de atribuire blocanta (operatorul =) actioneaza ca si in limbajele traditionale de programare. Intreaga instructiune este efectuata inainte de a trece controlul la urmatoarea instructiune. Instructiunea nonblocanta (operator <=) evalueaza termenul din dreapta, pentru unitatea curenta de timp, si atribuie valoarea obtinuta termenului din stanga, la sfarsitul unitatii de timp. De exemplu, urmatorul program Verilog testeaza atribuirile blocante si non blocante: // testarea atribuirii blocante si nonblocante module blocant; reg [0:7] A, B; initial begin: init1 A = 3; #1 A = A + 1; // atribuire procedurala blocanta B = A + 1; $display("blocanta: A= %b B= %b", A, B );
124 A = 3; #1 A <= A + 1; // atribuire procedurala non blocanta B <= A + 1; #1 $display("nonblocanta: A= %b B= %b", A, B ); end endmodule si produce urmatoarele iesiri: Blocanta: A= B= Nonblocanta: A= B= Efectul este acela ca, pentru toate atribuirile nonblocante se folosesc vechile valori ale variabilelor, de la inceputul unitatii curente de timp, pentru a asigna registrelor noile valor, la sfarsitul unitatii curentre de timp. Aceasta reprezinta o reflectarea a modului in care apar unele transferuri intre registre, in unele sisteme hardware. 2.8 Task-uri si Functii. Task-urile sunt asemanatoare procedurilor din alte limbaje de programare, de exemplu, taskurile pot avea zero sau mai multe argumente si nu intorc o valoare. Functiile se comporta ca subrutinele din alte limbaje de programare. Exceptii: 1. O functie Verilog trebuie sa se execute intr-o unitate de timp simulat. Nu vor exista instructiuni de control al timpului: comanda intarzierii (#), comanda de eveniment (@) sau instructiunea wait. Un task poate contine instructiuni controlate de timp.. 2. O functie Verilog nu poate invoca (call, enable) un task; in timp ce un task poate chema alte task-uri si functii. Definitia unui task este urmatoarea: task <nume_task >; //De observat ca nu exista o lista de parametri sau (). <porturi argumente> <declaratii> <instructiuni> endtask O invocare a unui task este de forma urmatoare: <nume_task > (<lista de porturi>);
125 unde <lista de porturi> este o lista de expresii, care corespund prin pozitie lui <porturi argumente> din definitie. Porturi argumente, in definitie pot fi: input, inout sau output. Deoarece <porturi argumente> din definitia task-ului arata ca si alte declaratii, programatorul trebuie sa fie atent, in ceea ce priveste adaugarea declaratiilor la inceputul task-ului. // Testarea task-urilor si a functiilor // Dan Hyde, Aug 28, 1995 module tasks; task add; // definitia task-ului input a, b; // doua porturi de intrare argumente output c; // un port de iesire argument reg R; // declaratie de registru begin R = 1; if (a == b) c = 1 & R; else c = 0; end endtask initial begin: init1 reg p; add(1, 0, p); // invocarea task-ului cu 3 argumente $display("p= %b", p); end endmodule Parametri input si inout sunt transferati prin valoare catre task, iar parametrii output si inout sunt transferati inapoi prin valoare, catre constructia care a invocat task-ul. Chemarea prin referire nu este disponibila. Alocarea tuturor variabilelor este statica. Astfel, un task se poate autoinvoca, dar la fiecare invocare se va folosi aceeasi memorie, ceea ce inseamna ca variabilele locale nu sunt fortate in stiva. Deoarece firele concurente pot invoca acelasi task, programatorul trebuie sa fie atent la natura statica a alocarii spatiului de memorie, pentru a evita suprascrierea spatiului partajat de memorie.
126 Scopul unei functii este acela de a returna o valoare care urmeaza sa fie folosita intr-o expresie. Definitia unei functii trebuie sa contina cel putin un argument de intrare, input. Transferul argumentelor in functii este asemanator ca si la task-uri. Definitia unei functii este urmatoarea: function <gama sau tipul> <nume_functie>; //Nota: nu exista lista de parametri sau (). < porturi argumente> <declaratii> <instructiuni> endfunction unde <gama/range sa tipul/type> este tipul rezultatelor returnate expresiei, care a chemat functia. In interiorul functiei, trebuie sa se asigneze o valoare numelui functiei. Mai jos este prezentata o functie, care este similara task-ului de mai sus. // Testarea functiilor // Dan Hyde, Aug 28, 1995 module functions; function [1:1] add2; // definitia functiei input a, b; // doua porturi argumente de intrare reg R; // declararea registrului begin R = 1; if (a == b) add2 = 1 & R; else add2 = 0; end endfunction initial begin: init1 reg p; p = add2(1, 0); // invocarea unei functii cu doua argumente $display("p= %b", p); end endmodule
127 2.9 Control Sincronizarii/Timing-ului. Limbajul Verilog ofera doua tipuri explicite de control al sincronizarii, atunci cand urmeaza sa apara instructiuni procedurale. Primul tip il reprezinta comanda intarzierii in care o expresie specifica durata de timp intre prima aparitie a instructiunii si momentul in care ea se executa. Al doilea tip de comanda a intarzierii il reprezinta expresia eveniment, care permite executia instructiunii. A treia sectiune descrie instructiunea wait, care asteapta modificarea unei variabile specifice.. Verilog constituie un simulator bazat pe evenimente in timp discret, adica evenimentele sunt planificate la momente discrete de timp si plasate intr-o coada de asteptare, ordonata in timp. Cel mai timpuriu eveniment se afla in fruntea cozii de asteptare iar evenimentele ulterioare sunt dupa el. Simulatorul inlatura toate evenimentele pentru timpul curent de simulare si le prelucreaza. In timpul prelucrarii, pot fi create mai multe evenimente si plasate in locul corespunzator, in coada pentru prelucrarea ulterioara. Cand toate evenimentele pentru timpul curent au fost procesate, simulatorul trece la urmatorul pas in timp si prelucreaza urmatoarele evenimente din fruntea cozii. Daca nu exista controlul sincronizarii, timpul de simulare nu evolueaza. Timpul de simulare poate progresa numai in una din urmatoarele situatii: 1. specificarea intarzierii pe poarta sau fir; 2. un control al intarzierii, introdus prin simbolul #; 3. un eveniment de control, introdus prin 4. instructiunea wait. Ordinea executiei evenimentelor in acelasi interval de timp/ceas este impredictibila Controlul Intarzierii (#) O expresie de control al intarzierii specifica durata de timp intre prima aparitie a instructiunii si momentul executiei acesteia. De exemplu: #10 A = A + 1; specifica o intarziere de 10 unitati de timp inainte de a executa instructiunea de asignare procedurala. Simbolul # poate fi urmat de o expresie cu variabile Evenimente. Executia unei instructiuni procedurale poate fi amorsat de o schimbare de valoare pe un fir sau intr-un registru sau de aparitia unui eveniment cu nume.:
128 @r begin // controlat printr-o modificare a valorii in registrul r A = B&C; clock2) A = B&C; // controlat de frontul pozitiva al lui clock3) A = B&C; // controlat de frontul negativ al lui clock3 clock) // controlat de frontul negativ begin A = B&C; end In formele care folosesc posedge si negedge, trebuie sa fie urmate de o expresie de un bit, de regula un semnal de ceas. La o tranzitie de la 1 la 0 ( sau necunoscut), se detecteaza un negedge Un posedge este detectat la o tranzitie de la 0 la 1 (sau necunoscut). Verilog furnizeaza, de asemenea, facilitati pentru a denumi un eveniment si apoi sa amorseze aparitia acelui eveniment. Mai intai trebuie sa se declare acel eveniment: event event6; Pentru a amorsa un eveniment se va folosi simbolul : event6; Pentru a controla un bloc de cod, se va folosi dupa cum se arata mai begin <cod procedural oarecare > end Se va presupune ca evenimentul apare intr-un fir de control, adica concurent, iar codul de control se afla in alt fir. Mai multe evenimente pot fi sumate logic in interiorul parantezelor Instructiunea wait. Instructiunea wait permite intarzierea unei instructiuni procedurale sau a unui bloc, pana ce conditia specificata devine adevarata: wait (A == 3) begin A = B&C; end
129 Diferenta intre comportamentul unei instructiuni wait si un eveniment este aceea ca instructiunea wait este sesizeaza nivelul, in timp ce clock); este amorsat de catre o tranzitie a semnalului sau sesizeaza frontul Instructiunile fork si join. Folosind constructiile fork si join, Verilog permite existenta mai multor fire de control in cadrul constructiilor initial si always. De exemplu, pentru a avea trei fire de control, se ramifica (fork) controlul in trei si apoi fuzioneaza (join), dupa cum se va vedea mai jos: fork: trei // desface firul in trei; cate unul pentru fiecare begin-end begin // codul pentru firul1 end begin // codul pentru firul2 end begin // codul pentru firul3 end join // fuziunea firelor intr-un singur fir. Fiecare instructiune intre fork si join, in acest caz cele trei blocuri begin-end, este executata concurent. Dupa terminarea celor trei fire, este executata urmatoarea instructiune dupa join. Trebuie sa existe certitudinea ca intre cele trei fire diferite nu exista interferente. De exemplu, nu se poate modifica continutul unui registru, in aceeasi perioada de ceas, in doua fire diferite Exemplu: Comanda semaforului de trafic. Pentru a demonstra task-urile si evenimentele, se va prezenta un model de controlor de semafor de trafic. // Model numeric pentru un controlul unui semafor de trafic. // By Dan Hyde August 10, 1995 module traffic; parameter on = 1, off = 0, red_tics = 35, amber_tics = 3, green_tics = 20; reg clock, red, amber, green; // va opri simularea dupa 1000 unitati de timp
130 initial begin: stop_at #1000; $stop; end // initializeaza luminile si seteaza monitorizarea registrelor. initial begin: Init red = off; amber = off; green = off; $display(" Timpul green amber red"); $monitor("%3d %b %b %b", $time, green, amber, red); end // task de asteptare pentru aparitiile fronturilor pozitive ale ceasului // inainte de a stinge (off) luminile task light; output color; input [31:0] tics; begin repeat(tics) // asteapta detectarea fronturilor pozitive ale clock); color = off; end endtask // forma de unda pentru o un ceas cu o perioada de doua unitati de timp always begin: clock_wave #1 clock = 0; #1 clock = 1; end always begin: main_process red = on; light(red, red_tics); // cheama task-ul de asteptare green = on; light(green, green_tics); amber = on; light(amber, amber_tics);
131 end endmodule Iesirea simulatorului de semafor de trafic este urmatoarea: Time green amber red Stop at simulation time Utilizarea Simulatorului. 3.1 Crearea Fisierului Model Se introduce codul Cerilog, generat cu ajutorul unui editor oarecar, de exemplu Edit. Ca extensie pentru fisierul sursa se va folosi.v. 3.2 Pornirea Simulatorului. VeriWell este executat din fereastra UNIX shell. Se tasteaza"veriwell" urmat de numele fisierelor care contin modelele si optiunile. Optiunile pot aparea intr-o ordine oarecare, oriunde in linia de comanda. De exemplu:
132 host-name% veriwell cpu.v bus.v top.v -s Aceasta va incarca fiecare fisier in memorie, le va compila si va intra in modul interactiv. Prin inlaturarea optiunii "-s", simularea va incepe imediat. Optiunile sunt prelucrate in ordinea in care apar in linia de comanda.fisierele sunt prelucrate in ordinea in care ele apar dupa prelucrarea optiunilor. 3.3 Iesirea din Simulator. Pentru a iesi din simulator se tasteaza $finish; sau Control-d. Pentru a stopa simularea se tasteaza Control-c. Executia unui task de sistem $stop; in cadrul codului Verilog va stopa simularea. 3.4Optiunile Simulatorului. Optiunile utilizate in mod curent, in linia de comanda, sunt prezentate mai jos. Pentru alte optiuni se recomanda consultarea lucrarii: VeriWell User s Guide. -i <inputfilename> Specifica un fisier care contine comenzi interactive, care urmeaza sa fie executate imediat ce se intra in modul interactiv. Aceasta optiune trebuie sa fie utilizata cu optiunea "-s". Aceasta poate fi utilizata pentru a initializa variablele si pentru a stabili limitele timpului de simulare. -s Asigura intrarea in modul interactiv inaintea inceperii simularii. -t Realizeaza trasarea/urmarirea tuturor instructiunilor. Acest mod poate fi dezactivat prin task-ul de sistem $cleartrace. 3.5 Depanarea in Modul Interactiv VeriWell. VeriWell este interactiv. Dupa lansare, simularea poate fi controlata prin comenzi simple. De asemenea, VeriWell accepta oricare instructiune Verilog statement (dar nu pot fi adaugate noi module sau declaratii). Modul interactiv poate fi introdus pe trei cai: 1). La folosirea optiunii "-s" in linia de comanda sau in fisierul de comanda, se lanseaza modul interactiv, inaintea inceperii simularii. 2). Cand simularea intalneste task-ul de sistem $stop. 3). Atunci cand utilizatorul tasteaza Control-c, in timpul simularii (nu in timpul compilarii). Comenzi Interactive. Continua ('.') [period]
133 Relanseaza executia de la locatia curenta. Pas singular cu urmarire (',') [comma] Executa o singura instructiune si afisaza rezultatul trasarii. Pas singular fara trasare (';') [semicolon] Executa o singura instructiune fara urmarire. Locatia curenta (':') [colon] Afisaza locatia curenta. Control-d sau $finish; Iesirea din simulatorul VeriWell. In mod tipic, instructiunile Verilog executate interactiv sunt utilizate pentru depanare si colectare de informatii. $display si $showvars pot fi tastate, in modul interactiv, pentru a arata valorile variabilelor. De remarcat faptul ca trebuie tastate task-ul de sistem, parametrii si ( ; ). $scope(<name>); si $showscopes; pot fi tastate pentru a traversa ierarhia modelului. $settrace; si $cleartrace; vor activa/dezactiva modul de urmarire. Tastarea "#100; $stop;" va opri executia dupa 100 unitati de timp simulat. 4. Task-urile de Sistem si Functiile. Task-urile de sistem nu sunt parti ale limbajului Verilog. Ele reprezinta task-uri construite si pastrate in biblioteca. Cateva dintre cele mai des utilizate task-uri de sistem sunt prezentate mai jos. 4.1 $cleartrace Task-ul de sistem $cleartracedezactiveaza urmarirea.. A se vedea task-ul de sistem $settrace pentru activarea trasarii. $cleartrace; 4.2 $display Afisaza text pre ecran ca si printf pentru limbajul C. Forma generala este: $display(<parametru>, <parametru>,... <parametru>); unde <parametru> poate fi un sir intre ghilimele, o expresie care intoarce o valoare sau un parametru nul. De exemplu, afisarea unui antet: $display("registre: A B C"); Caracterul special % indica faptul ca urmatorul caracter reprezinta o specificatie de format. Pentru fiecare caracter %, care apare in sir, trebuie sa fie furnizata o expresie corespunzatoare
134 dupa sir. De exemplu, urmatoarele instructiuni vor tipari valoarea lui A in binar, octal, zecimal si hexazecimal: $display("a=%b binar %o octal %d zecimal %h hex",a,a,a,a); generandu-se urmatoarea iesire: A= binar 017 octal 15 zecimal 0f hex Specificatorii uzuali de format sunt: %b afisaza in format binar %c afisaza in format ASCII %d afisaza in format zecimal %h afisaza in format hexazecimal %o afisaza in format octal %s afisaza in format sir Un 0 intre % si specificatorul de format aloca numarul exact de caractere cerut pentru afisarea rezultatului evaluarii expresiei, in locul numarului necesar pentru valoarea cea mai mare pe care ar lua-o expresia. De exemplu, aceasta este utila la afisarea timpului, dupa cum se va observa din exemplele de mai jos, care contin doua instructiuni $display. $display("timp = %d", $time); $display("timp = %0d", $time); si care genereaza uramatoarele iesiri: Timp = 1 Timp = 1 Intr-un sir pot fi introduse secvente Escape. Secventele Escape mai frecvent folosite sunt urmatoarele: \n caractelul linie noua \t caracterul tab \\ caracterul \ \ caracterul " the " %% semnul procent Parametrul nul genereaza un spatiu de un caracter, la afisare. Un parametru nul este caracterizat prin doua virgule adiacente in lista de parametri. $display adauga autoamat un caracter linienoua, la sfarsitul iesirii. A se vedea $write, in Verilog Language Reference Manual, daca nu se doreste o linie noua.
135 4.3 $finish Task-ul de sistem $finish asigura iesirea din simulator catre sistemul de operare gazda. A nu se uita tastarea ( ; ), in modul interactiv. $finish; 4.4 $monitor Task-ul de sistem $monitor permite monitorizarea si afisarea valorilor oricarei variabile sau expresii specificate ca parametru al task-ului. Parametrii sunt specificati ca si in cazul task-ului de sistem $display. Cand se invoca task-ul $monitor simulatorul stabileste un macanism prin care, de fiecare data cand o variabila sau o expresie, din lista de parametri, isi modifica valoarea, cu exceptia lui $time, intreaga lista a parametrilor este afisata la sfarsitul pasului de timp, ca si cand ar fi fost raportata de catre task-ul $display. Daca doi sau mai multi parametri isi schimba valoarile in acelasi timp se va realiza o singura afisare. De exemplu, instructiunea urmatoare va afisa o linie ori de cate ori se modifica unul dintre registrele A, B sau C. $monitor(" %0d %b %b "%b, $time, A, B, C); La un moment dat numai o instructiune $monitor trebuie sa fie activa. Monitorizarea poate fi activata/dezactivata prin urmatoarele instructiuni: $monitoroff; <linii de cod> $monitoron; 4.5 $scope Task-ul de sistem $scope ofera utilizatorului posibilitatea de a atribui, ca domeniu interactiv, un nivel particular al ierarhiei, pentru identificarea obiectelor. $scope este util in timpul depanarii intrucat utilizatorul poate modifica domeniul, pentru a inspecta valorile diverselor variabile, din diferite module, task-uri si functii. $scope(<nume>); Parametrul <nume> trebuie sa fie numele complet ierarhic al unui modul, task, functii sau bloc cu nume. A se vedea task-ul de sistem $showscopes, pentru afisarea numelor. 4.6 $settrace Task-ul de sistem $settrace activeaza urmarirea activitatii de simulare. Urmarirea consta in obtinerea diferitelor informatii, inclusiv a timpului curent de simulare, a numarului liniei, a numelui fisierului, a modulului si a oricarui rezultat al instructiunii care se executa. $settrace;
136 urmarirea se poate dezactiva prin task-ul de sistem $cleartrace. 4.7 $showscopes Task-ul de sistem $showscopes afisaza o lista completa a tuturor modulelor, task-urilor, functiilor si a modulelor cu nume din domeniul curent. $showscopes; 4.8 $showvars Task-ul de sistem $showvars furnizeaza informatia de stare pentru variabilele registre si fire, atat scalari, cat si vectori. Invocat fara parametri, $showvars afisaza starile tuturor variabilelor din domeniul curent. Invocat cu o lista de variabile, el arata numai stareaacelora specificate. $showvars; $showvars(<lista de variabile>); 4.9 $stop Task-ul de sistem $stop opreste simulatorul, trece la modul interactiv si transfera comanda catre utilizator. $stop; 4.10 $time Functia de sistem $time system intoarce timpul curent de simulare sub foma unui intreg de 64 de biti. $time trebuie utilizat intr-o expresie. Bibliografie 1. Cadence Design Systems, Inc., Verilog-XL Reference Manual. 2. Open Verilog International (OVI), Verilog HDL Language Reference Manual (LRM), Los Gatos Boulevard, Suite , Los Gatos, CA 95032; Tel: (408) , Fax: (408) , OVI@netcom.com, $ Sternheim, E., R. Singh, Y. Trivedi, R. Madhaven and W. Stapleton, Digital Design and Synthesis with Verilog HDL, published by Automata Publishing Co., Cupertino, CA, 1993, ISBN X, $ Thomas, Donald E., and Philip R. Moorby, The Verilog Hardware Description Language, second edition, published by Kluwer Academic Publishers, Norwell MA, 1994, ISBN , $98, includes DOS version of VeriWell simulator and programs on diskette. 5. Bhasker, J., A Verilog HDL Primer, Star Galaxy Press, 1058 Treeline Drive, Allentown, PA 18103, 1997, ISBN , $60.
137 6. Wellspring Solutions, Inc., VeriWell User s Guide 1.2, August, 1994, part of free distribution of VeriWell, available online. 7. World Wide Web Pages: FAQ for comp.lang.verilog - comp.lang.verilog archives - Cadence Design Systems, Inc. - Wellspring Solutions - ftp://iii.net/pub/pub-site/wellspring Verilog research at Cambridge, England -
138 9. Bazele Aritmetice ale Calculatoarelor Numerice Introducere. Intrucat elementele de memorare sunt constituite din dispozitive cu doua stari stabile, iar iar elementele de prelucrare a informatiei sunt bazate pe circuite logice, care opereaza pe baza logicii bivalente, intr-un calculator numeric datele sunt reprezentate in binar, sub forma unor succesiuni de unitati si zerouri. Exista numeroase posibilitati pentru reprezentarea datelor, care se deosebesc intre ele prin expresibilitate, cost de implementare, usurinta conversiilor de la un format la altul, cat si prin alte considerente. Astfel, in cadrul unui calculator numeric, la nivel hardware, se folosesc mai multe tipuri de date: - Bit: 0,1 - Sir de biti: secvente de biti de lungimi date: - tetrada: 4 biti, - octet/byte: 8 biti, - semicuvant: 16 biti, - cuvant: 32 de biti, - cuvant dublu: 64 de biti - Caracter: - ASCII: cod de 7 biti - Zecimal: - cifrele zecimale 0-9 codificate binar (doua cifre zecimale pot fi impachetate pe un octet sau intr-un octet se poate plasa o singura cifra zecimala); - Intreg (Virgula fixa): - fara semn, - cu semn, reprezentare in: - semn si modul (cod direct), - complementul fata de 1 (cod invers), - complementul fata de 2 (cod complementar). - Real (Virgula mobila): - precizie simpla, - precizie dubla, - precizie extinsa.
139 Calculatoarele poseda elemente de stocare a datelor, de tipul registrelor sau al celulelor de memorie, care dispun de un numar finit de elemente/ranguri, ceea ce afecteaza precizia calculului. Astfel, la programarea unor aplicatii numerice, trebuie avute in vedere aspectele legate de precizia limitata a reprezentarii informatiei Sisteme de numeratie Reprezentarea numerelor. Un sistem de numeratie consta in totalitatea regulilor si simbolurilor/cifrelor folosite pentru reprezentarea numerelor. Sistemele de numeratie pot fi de doua tipuri: pozitionale si nepozitionale. Intr-un sistem pozitional valoarea/ponderea unui simbol depinde de pozitia pe care o ocupa in reprezentarea unui numar dat, in timp ce intr-un sistem nepozitional acest lucru nu are loc. Ca exemplu de sistem nepozitional se poate da sistemul de numeratie roman. Sistemele de numeratie pozitionale mai poarta numele si de sisteme de numeratie ponderate, intrucat valoarea unei cifre depinde de pozitia ei in reprezentarea numarului dat. Un numar intreg N este reprezentat, intr-un sistem de numeratie pozitional, in baza b, sub forma unui n-tuplu de simboluri x i, N b = x n-1 x n-2 x n-3 x i x 1 x 0 unde x i reprezinta o cifra a sistemului de numeratie. O cifra x i poate lua valori intregi cuprinse intre 0 si b-1, baza b reprezentand numarul valorilor posibile pe care le poate lua o cifra oarecare x i. In general, un numar, constituit dintr-o parte intreaga si o parte subunitara are umatoarea reprezentare in baza b: N b = x n-1 x n-2 x n-3 x i x 1 x 0, x -1 x -2 x -3 x -i x -m, (o x i b-1). Valoarea N a numarului N b se calculaeza cu ajutorul urmatoarei expresii: n-1 N = Σ x i. b i i=-m Fie numarul (435,25) 10, in baza 10 (n=3, m=2 si b=10). 4 x x x x x 10-2 = (400) 10 + (30) 10 + (5) 10 (1) + (2/10) 10 + (5/100) 10 = (435,25) 10
140 In continuare se considera numarul (1011,01) 2, pentru care: n = 4, m = 2 si b = 2: 1 x x x x x x 2-2 = (8) 10 + (0) 10 + (2) 10 + (1) 10 + (0/2) 10 + (1/4) 10 = (11,25) 10 In ultimul exemplu se prezinta metoda polinomiala de conversie a numerelor, reprezentate in baza 2, in numere reprezentate in baza Conversia numerelor dintr-o baza in alta. Intr-un sistem de calcul datele sunt reprezentate in mai multe sisteme de numeratie. Astfel, datele de la intrare si cele de la iesire sunt, in general, reprezentate in baza 10. In memoria calculatorului si in unitatea de prelucrare datele sunt reprezentate in baza 2. Sunt situatii in care datele, care se prelucreaza, sunt reprezentate in baza 10, cifrele zecimale fiind codificate prin tetrade binare. Pentru a usura operatiile de programare, uneori, numerele binare sunt convertite in numere reprezentate in baza 8 sau baza 16. Plecand de la reprezentarea numerelor sub forma coeficientilor dezvoltarii polinomiale, in raport cu baza, conversia se poate efectua prin operatii repetate de impartire/inmultire in conditiile numerelor intregi/subunitare. Se presupune un numar N constituit dintr-o parte intreaga N i si o parte subunitara N f : Astfel: N = N i + N f N i = x n-1 x n-2 x n-3 x i x 1 x 0 si N b = 0, x -1 x -2 x -3 x -i x -m Conversia numerelor intregi din baza b in baza q presupune impartirea repetata a catului de la impartirea precedenta la noua baza si retinerea restului, mai mic decat noua baza, pana cand catul curent devine mai mic decat noua baza. Ca prim cat se ia numarul N i, care urmeaza sa fie convertit. Resturile obtinute formeaza cifrele noului numar, incepand cu cea mai putin semnificativa. Toate operatiile se efectueaza in baza de plecare b. Din punctul de vedere al valorii exprimate: (N i ) b = (N i ) q (N i ) q se poate scrie ca un p-tuplu astfel: N i = y p-1 y p-2 y p-3 y i y 1 y 0
141 Pentru a obtine coeficientii y i, ai dezvoltarii in baza q, se va recurge la urmatoarea secventa de operatii: (N i ) b : q = (N i ) 1 b + y 0 /q, cifra curenta a noului numar este y 0 (N i ) 1 b : q = (N i ) 2 b + y 1 /q, cifra curenta a noului numar este y 1.. (N i ) p-2 b : q = (N i ) p-1 b + y p-2 /q, cifra curenta a noului numar este y p-2 p-1 unde 0 (N i ) b q reprezinta cifra cea mai semnificativa a noii reprezentari Exemplu: (17) 10 = (? ) 2 17 : 2 = 8 +1/2, y 0 = 1; 8 : 2 = 4 +0/2, y 1 = 0; 4 : 2 = 2 +0/2, y 2 = 0; 2 : 2 = 1 + 0/2, y 3 = 0; y 4 = 1 ( 17 ) 10 = Conversia numerelor subunitare din baza b in baza q presupune inmultirea repetata a partii subunitare, care rezulta de la inmultirea precedenta, cu noua baza si retinerea partii intregi, pana cand partea subunitara curenta devine 0 sau pana cand se epuizeaza rangurile de reprezentare in noua baza. Ca prima parte subunitara se ia numarul N f, care urmeaza sa fie convertit. Intregii obtinuti formeaza cifrele noului numar, incepand cu cea mai semnificativa. Toate operatiile se efectueaza in baza de plecare b. Din punctul de vedere al valorii exprimate: (N f ) b = (N f ) q (N f ) q se poate scrie ca un m-tuplu astfel: N f = y -1 y -2 y -3 y- i y -m Pentru a obtine coeficientii y- i ai dezvoltarii in baza q se va recurge la urmatoarea secventa de operatii: (N f ) b q = (N f ) -1 b + y 0-1, cifra curenta a noului numar este y -1 (N f ) -2 b q = (N f ) -2 b + y -2, cifra curenta a noului numar este y -2..
142 (N f ) -m+1 b q = 0 + y -m, cifra curenta a noului numar este y -m -i In cazul in care (N f ) b = 0, procesul se opreste. Se poate constata faptul ca procesul de conversie a numerelor subunitare poate fi insotit de erori, in cazul unui numar limitat de ranguri pentru reprezentarea in noua baza sau in cazul aparitiei unor secvente repetate de unitati si zerouri. Exemplu: (0,125) 10 = (0,001) 2 Se considera urmatorul exemplu: (0,1) 10 = (? ) 2 0,1 2 = 0 + 0,2 ; y -1 = 0; 0,2 2 = 0 + 0,4 ; y -2 = 0; 0,4 2 = 0 + 0,8 ; y -3 = 0; 0,8 2 = 1 + 0,6 ; y -4 = 1; 0,6 2 = 1 + 0,2 ; y -5 = 1; 0,2 2 = 0 + 0,4 ; y -6 = 0; 0,4 2 = 0 + 0,8 ; y -7 = 0; 0,8 2 = 1 + 0,6 ; y -8 = 1; 0,6 2 = 1 + 0,2 ; y -9 = 1; 0,2 2 = 0 + 0,4 ; y -6 = 0; (0,1) 10 = ( 0, ) 2 Se poate observa ca, in acest ultim caz, conversia nu se efectueaza exact. Conversiile intre baze, care reprezinta puteri ale lui 2, constituie cazuri particulare, si se efectueaza mecanic. Astfel, in cazul numerelor reprezentate in octal/hexazecimal, cifrele octale/hexazecimale se inlocuiesc cu triadele/tetradele binare corespunzatoare si invers. Numerele octale/hexazecimale se exploreaza, pentru conversia in binar, de la dreapta la stanga. Mai jos se prezinta un tabel de corespondenta intre cifrele octale, zecimale si hexazecimale, pe de-o parte si echivalentele lor binare, pe de alta parte.
143 binar octal zecimal hexazecimal Exemple: (011101) 2 = (011) 2 (101) 2 = (3) 8 (5) 8 = (35) 8 (011101) 2 = (0001) 2 (1101) 2 = (1) 16 (D) 16 = (1D) Reprezentarea informatiei numerice in calculatoare. Calculatoarele moderne opereaza atat cu numere intregi (cu semn si fara semn), cat si cu numere reale. In cazurile numerelor intregi cu semn si al mantisei numerelor reale semnul este codificat prin bitul plasat in extrema stanga. Semnul - este codificat prin 1, iar semnul + prin 0. Pentru numerele intregi cu semn: N i = x n-1 x n-2 x n-3 x i x 1 x 0 semnul este codificat prin bitul x n-1. Un numar real N r se reprezinta prin doua campuri: mantisa/fractia f, cu semn, si exponent e: N r = s e f unde: - s reprezinta semnul mantisei, codificat printr-un bit, conform conventiei mentionate mai sus, - f constituie mantisa sub forma unui numar subunitar normalizat ( m 1/2 ), - e specifica exponentul, de regula, deplasat cu o anumita cantitate pentru a-l face 0. O discutie mai amanuntita, privind reprezentarea numerelor reale se va face intr-un paragraf ulterior.
144 9.3. Coduri de reprezentare a numerelor intregi, cu semn, in calculatoare. Numerele intregi, cu semn, se pot reprezenta in calculatoare in trei moduri diferite, numite uneori si coduri de reprezentare: - semn si modul (cod direct), - complementul fata de 1 (cod invers), - complementul fata de 2 (cod complementar). Codul direct (semn si modul). [x] d = semn x [x] d = 0 x n-2 x n-3 x i x 1 x 0, pentru x > 0; [x] d = 1 x n-2 x n-3 x i x 1 x 0, pentru x < 0 Se poate observa ca, in acest cod, 0 are doua reprezentari, daca este afectat de semn: [+0] d = si [-0] d = Astfel, un numar x in cod direct, reprezentat pe n ranguri, poate lua valori in gama: -2 n x 2 n-1-1, ceea ce face ca pentru: - n = 8 valorile minime/maxime sa fie 127 / +127, iar - n = 16 valorile minime/maxime sa fie / Reprezentarea in modul si semn este utila pentru implementarea operatiei de inmultire, dar prezinta unele dificultati la adunare si scadere. Codul invers (complementul fata de unu). Denumirea de complementul fata de unu provine de la faptul ca, reprezentarea in virgula fixa s-a realizat in calculatoare, mai intai, pentru numere subunitare, numerele negative fiind stocate sub forma complementului fata de 2, diminuat cu 1, prin scaderea lui x din 1. In cazul numerelor binare negative intregi, reprezentate pe n ranguri, codurile inverse se obtin prin scaderea modulelor acestora din 2 n 1. [x] i = 0 x n-2 x n-3 x i x 0, pentru x > 0; [x] i = 1 x n-2 x n-3 x i x 0, pentru x < 0 unde: x i reprezinta inversul lui x i Se poate observa ca, in acest cod, 0 are doua reprezentari, daca este afectat de semn:
145 [+0] i = si [-0] i = Astfel, un numar x in cod invers, reprezentat pe n ranguri, poate lua valori in gama: ceea ce face ca pentru: -2 n x 2 n-1-1, - n = 8 valorile minime/maxime sa fie 127 / +127, iar - n =16 valorile minime/maxime sa fie / Reprezentarea in codul invers este identica cu reprezentarea in cod direct, in cazul numerelor pozitive. Pentru a obtine codul invers al unui numar se inverseaza valorile binare ale tuturor rangurilor, operatie extrem de usor de realizat in hardware. Codul complementar (complementul fata de doi). Denumirea de complementul fata de doi provine de la faptul ca reprezentarea in virgula fixa s-a realizat in calculatoare mai intai pentru numere subunitare, iar numerele negative se stocau sub forma complementului fata de 2, prin scaderea lui x din 2. In cazul numerelor binare, intregi negative, reprezentate pe n ranguri, codurile inverse se obtin prin scaderea modulelor acestora din 2 n. [x] c = 0 x n-2 x n-3 x i x 0, pentru x 0; ~ ~ ~ ~ [x] c = 1 x n-2 x n-3 x i x 0, pentru x < 0 unde: ~ ~ ~ ~ 1 x n-2 x n-3 x i x 0 se obtine ca urmare a operatiei: 2 n - x Se poate observa ca, in acest cod, 0 are o singura reprezentare: [0] c = Astfel, un numar x in cod complementar, reprezentat pe n ranguri, poate lua valori in gama: ceea ce face ca pentru: -2 n-1 x 2 n-1-1, - n = 8 valorile minime/maxime sa fie 128 / +127, iar - n = 16 valorile minime/maxime sa fie / Pentru: x > 0 [x] d = [x] i = [x] c Pentru: x < 0 [x] c = [x] i + 1 = 2 n - x.
146 Se poate observa usor ca, prin mijloace hardware, codul complementar al unui numar negativ se poate obtine adunand, la inversul numarului (obtinut prin negarea logica a tuturor rangurilor), o unitate in cel mai putin semnificativ rang. Reprezentarea in cod complementar faciliteaza realizarea hardware-lui necesar operatiilor de adunare si scadere in calculatoare. Reprezentarea in exces. Reprezentarea in exces este cunoscuta si sub numele de reprezentare deplasata. Ideea de baza consta in aceea de a atribui celui mai mic numar (numar negativ) valoarea cea mai mica intreaga ce se poate reprezenta in calculator, manipuland in acest mod numere fara semn. In cazul reprezentarii numerelor (14) 10 si (-14) 10 sub forma unor numere pe binare pe 8 biti, folosind forma excess 128 va trebui sa se obtina corespondentele binare ale numerelor ( = 142) 10 si ( = 114) 10. Astfel, codul binar in exces 128 pentru (-14) 10 este ( ) 2. Nu exista o semnificatie numerica a valorii in excess, ea are ca efect deplasarea reprezentarii in complementul fata de doi. Pentru cazul studiat valoarea exces a fost astfel aleasa incat sa aibe acelas sablon de biti ca si cel mai mare numar negativ, ceea ce face ca numerele sa apara ca si cand ar fi sortate ca numere binare fara semn. Celui mai mic numar negativ (-128) 10 ii va corespunde ( ) 2, in timp ce celui mai mare numar pozitiv (127) 10 ii va corespunde ( ) 2. Aceasta reprezentare simplifica efectuarea operatiei de comparare a numerelor, ceea ce este esential pentru realizarea hardware-lui necesar operarii asupra exponentilor, la reprezentarea in virgula mobila Codul binar-zecimal. Numerele pot fi reprezentate in sistemul de numeratie cu baza 10, in conditiile in care rangurile zecimale sunt codificate prin tetrade binare. Acesta este codul binar-zecimal sau BCD (Binary Coded Decimal). Posibilitatile de codificare oferite de catre o tetrada binara nu sunt epuizate in cazul BCD, deoarece raman neutilizate 6 tetrade dintr-un total de 16. In cazurile in care se doreste o codificare BCD cu semn, tetradele binare: (1100) si (1101) se folosesc pentru codificarea semnelor + si -, in timp ce tetradele binare (0000),.., (1001) se utilizeaza pentru codificarea cifrelor zecimale. Pe un octet/byte, in bitii cei mai putin semnificativi, poate fi plasata o singura tetrada: BCD neimpachetat. In cazul plasarii a doua tetrade BCD pe un singur octet, se spune ca BCD este impachetat.
147 Codurile BCD se utilizeaza in calculatoarele destinate calculelor comerciale, financiare, inlaturand necesitatea conversiilor zecimal-binar si binar-zecimal. Un numar negativ in baza 10, cu mai multe ranguri, se poate reprezenta in BCD in complementul fata de 9 sau fata de 10. In cazul numerelor (+402) 10 si (-402) 10 se pot da reprezentarile lor in complementul fata de 9 si fata de 10: (+402) 10 a) (0) 10 (4) 10 (0) 10 (2) (-402) 10 complementul fata de 9 b) (9) 10 (5) 10 (9) 10 (7) (-402) 10 complementul fata de 10 c) (9) 10 (5) 10 (9) 10 (8) 10 In ultimul exemplu numerele pozitive vor fi reprezentate in gama , iar numerele negative in gama Reprezentarea in virgula mobila. Reprezentarea numerelor in virgula fixa precizeaza un numar de ranguri la stanga virgulei, pentru partea intreaga, si un alt numar de ranguri la dreapta virgulei, pentru partea subunitara. In vederea asigurarii unei game largi de reprezentare, cat si a unei precizii convenabile, in cazul virgulei fixe trebuie sa se aloce un numar mare de ranguri. Astfel, in cazul in care se doreste manipularea numerelor cu valori pana la 1 trilion (10 12 ) sunt necesare 40 de ranguri binare, intrucat Acelasi numar de 40 ranguri binare este necesar in cazul asigurarii unei precizii de o trilionime. Numerele ar fi astfel reprezentate pe 80 de biti. In practica solicitarile privind gama si precizia pot fi si mai mari. Virgula mobila ofera posibilitatea reprezentarii cu un numar mic de ranguri binare a unei game largi de numere exprimabile, prin efectuarea unui compromis intre numarul de rangur, care asigura precizia, si numarul de ranguri, care asigura gama. In numarul, reprezentat in virgula mobila, de mai jos: 0,
148 gama este stabilita de catre numarul de ranguri ale exponentului si de catre baza, care, in cazul de fata, este 10. Precizia este asociata cu numarul de ranguri ale partii subunitare, 5 in exemplul de mai sus. Precizia si gama impun un numar de 6 ranguri zecimale, la care se mai adauga unul pentru codificarea semnului partii subunitare/mantisei: semnul mantisei virgula exponent mantisa In afara compromisului intre precizie si gama, bazat pe modificarea numarului de biti din reprezentarile exponentului si mantisei, pentru marirea gamei de reprezentare, se mai poate actiona, si asupra bazei, in sensul cresterii acesteia. Prin aceasta creste precizia pentru numerele mici, iar pentru numerele mari scade. Reprezentarea normalizata. Un numar poate fi reprezentat, in virgula mobila, in mai multe moduri: 3654, = 36, = 0, Pentru a evita reprezentarile multiple ale aceluiasi numar se introduce forma normalizata. Aceasta se obtine prin deplasarea spre stanga a mantisei, astfel incat, imediat la dreapta virgulei sa se afle o cifra diferita de 0. Pe masura deplasarii mantisei la stanga se incrementeaza si exponentul. Operatia nu are sens atunci cand mantisa are toate rangurile egale cu 0. Un exponent este, de regula, rezervat pentru reprezentarea lui zero si a altor cazuri speciale, cum ar fi. Cu exceptia cazului cand este egala cu zero, mantisa poseda in bitul cel mai semnificativ o unitate, pentru o baza egala cu 2. Acest bit, egal cu 1, este prezent in mod implicit, ceea ce permite deplasarea mantisei spre stanga cu un bit, in scopul maririi preciziei. Bitul in cauza poarta numele de bit ascuns". Terminologia folosita in legatura cu erorile de calcul. In analiza erorilor posibile privind prelucrarea datelor se folosesc o serie de termeni si concepte specifice. Precizia. Constituie un termen asociat cu lungimea cuvantului, numarul de biti disponibili intrun cuvant pentru reprezentarea unui numar dat. In cazul unui registru de 8 biti, considerand ca se reprezinta numai numere naturale, precizia de reprezentare va fi de 1/256. Precizia nu trebuie confundata cu acuratetea. Acurateta. Aceasta reprezinta o masura a apropierii unei aproximatii fata de valoarea exacta. Acest termen nu trebuie confundat cu precizia. Ca exemplu se poate considera reprezentarea nu-
149 marului natural 6 in binar, pe 4 biti. Reprezentarea exacta, fara nici o eroare va fi Daca se ia numarul binar fractionar 0, ,care trebuie reprezentat pe 8 biti se va obtine: 0, Ultima forma constituie o reprezentare cu eroare a numarului initial. Astfel, in al doile caz reprezentarea, care contine o eroare, este mai precisa (8 biti in loc de 4), dar are o acurateta mai mica. Gama. Gama reprezinta multimea numerelor reprezentabile intr-un sistem dat. Astfel, in reprezentarea numerelor intregi in complementul fata de doi, pe patru biti, gama de reprezentare va fi de la -8 la + 7, adica (+7) - (-8) = 15. Rezolutia. Aceasta constituie marimea diferentei/distantei intre doua numere sau cifre adiacente. Pentru reprezentarea cu patru cifre zecimale, gama fiind intre 0000 si 9999, rezolutia este constanta si egala cu 1. In cazul reprezentarii in virgula mobila rezolutia nu mai este constanta in cadrul gamei. Ea este dependenta de valoarea exponentului utilizat. Trunchierea. Cunoscuta si sub denumirea de rotunjire prin lipsa, aceasta tehnica este utilizata in cazurile in care precizia nu este suficienta pentru reprezentarea corecta a numarului stocat. Considerand stocarea valorii lui pi = 3, intr-un dispozitiv capabil sa memoreze numai 6 cfre zecimale, numarul pi = 3,14159 se va reprezenta cu o eroare de trunchiere egala cu 0, Rotunjirea. Metoda prin care se cauta sa se selecteze valoarea cea mai apropiata de valoarea initiala a numarului poarta numele de rotunjire. In zecimal, daca cifra aflata la dreapta ultimei cifre, care intra in reprezentare, este mai mare sau egala cu 5 atunci ultima cifra se incrementeaza cu 1, in caz contrar se lasa neschimbata. In binar, daca cifra aflata la dreapta ultimei cifre, care intra in reprezentare, este 1 atunci la ultima cifra se adauga o unitate, in caz contrar cifra nu se modifica. Depasirea. Situatia de depasire apare cind rezultatul unui calcul este prea mare pentru a putea fi reprezentat in sistem. Spre exemplu, daca se lucreaza in binar cu numere intregi reprezentate in complementul fata de doi, pe 4 biti, gama de reprezentare fiind -8 la +7, orice rezultat care depaseste gama va conduce la depasire. Depasirea superioara si depasirea inferioara. Aceste situatii apar la reprezentarea numerelor in virgula mobila, atunci cand rezultatul este mai mare sau mai mic decat cel mai mare sau cel mai mic numar care poate sa fie reprezentat in sistem. Pentru a preveni obtinerea unor rezultate false/eronate/pseudorezultate se elaboreaza tehnici prin care se semnalizeaza aparitia unor
150 asemenea situatii. Erori introduse la conversia numerelor din baza zece in baza doi. Aceste erori apar datorita faptului ca cele mai multe numere nu reprezinta multipli ai unor fractii binare. Situatia se intalneste in mod frecvent la introducerea datelor in calculator. De regula, numarul rangurilor binare este destul de mare pentru a se putea reprezenta numarul necesar de cifre zecimale. Reprezentarea numerelor reale. Calculatoarele destinate calculelor stiintifice si ingineresti opereaza in principal cu numere reale. Se cunoaste ca multimea numerelor reale este convexa, adica in oricare interval, indiferent de marimea sa, exista un numar infinit de valori reale. Intr-un calculator pot fi reprezentate precis valori discrete, dintr-o multime finita, deoarece fiecare informatie/data poate fi reprezentata numai printr-un numar fix de biti. Astfel, oricare reprezentare a unor numere reale, intr-un calculator, constituie o aproximare a valorilor exacte. Un aspect important se refera la faptul ca datele reale presupun in acelasi timp atat o gama mare de valori, cat si o anumita precizie. In principiu numerele reale se pot reprezenta in doua moduri: in virgula fixa si in virgula mobila. Reprezentarea in virgula fixa presupune un numar dat de ranguri pentru partea intreaga si pentru partea subunitara: X = x n-1 x n-2 x i x 1 x 0, x -1 x -2 x -i x -m Desi prin aceasta reprezentare se poate asigura o precizie satisfacatoare, in multe cazuri (in functie de numarul de ranguri n + m ) apar dificultati importante in privinta gamei de reprezentare a datelor de intrare, a rezultatelor partiale si finale in cadrul unui program executat pe un calculator. Aceasta implica introducerea unor factori de scara, care sa asigure limitarea valorilor maxime la posibilitatile reale de reprezentare, in calculatorul dat. Reprezentarea in virgula mobila sau notatia stiintifica foloseste in principal doua campuri:unul pentru exponent (e) si altul pentru mantisa/parte subunitara/fractie (f). Astfel, numarul real X se poate scrie: X = f.r e unde r este baza, f - mantisa, iar e - exponentul. Baza se ia egala cu 2 sau o putere a acestuia (64).
151 Mantisa f se reprezinta ca un numar subunitar, normalizat afectat de semn ( f 1/2, pentru a nu pierde din precizie); numarul de biti din mantisa asigura precizia de reprezentare. Exponentul stabileste gama de reprezentare; pentru simplificarea algoritmilor de efectuare a operatiilor aritmetice, in virgula mobila, se utilizeaza numai exponenti pozitivi (deplasati), prin adunarea unei cantitati date, astfel incat, cel mai mic exponent sa nu ia o valoare negativa (sa fie zero). Daca exponentul are k biti si mantisa m biti (exclusiv semnul s), numarul X se va putea reprezenta astfel: X = s e k-1 e k-2.e 0 f -1 f -2..e -m Semnul s, al mantisei, va fi plasat in rangul cel mai semnificativ al reprezentarii binare. Stabilirea formatului de reprezentare a numerelor reale, in virgula mobila, a constituit obiectul a numeroase studii, care s-au concretizat prin elaborarea unui standard (IEEE 754). Astfel, au fost alese doua formate standard: - formatul scurt sau de baza, pe un cuvant de 32 de biti, care asigura o viteza mai mare de operare; - formatul lung sau dublu de baza, pe un cuvant de 64 de biti, care asigura o precizie mai mare de lucru. In alegerea bazei s-a plecat de la observatia ca aceasta trebuie sa permita cea mai buna precizie posibila si pentru formatul scurt. S-a demonstrat ca o baza egala cu 2 asigura o precizie mai buna in cazul rotunjirii mantisei rezultatului unei operatii aritmetice, decat alte baze (4, 8, 16), cel putin cu un rang in raport cu baza 16. In privinta reprezentarii se considera ca folosirea codului direct ( semn si modul ) este superioara codului complementar. Daca lungimea cuvintului este fixata gama si precizia se influenteaza reciproc. O gama de 10 +/-75 este insuficienta, in timp ce o gama de 10 +/-300 corespunde cerintelor celor mai multe aplicatii. De aceea in cazul formatului scurt a fost sacrificata gama, intr-o oarecare masura, pentru a asigura o buna precizie. Daca se foloseste aceeasi unitate aritmetica, atat pentru operatiile in formatul scurt, cat si pentru operatiile in formatul lung, in primul caz nu se vor inregistra depasiri de tip superior sau inferior. De asemenea, se poate observa ca numarul de biti (52) din mantisa in formatul lung este mai mare decat dublul numarului de biti (2 24) ai mantisei in formatul scurt. Aceasta face ca la inmultirea in formatul scurt adunarea produselor partiale sa nu fie afectata de erori.
152 Formatul scurt ( simplu - de baza ). s e f bitul 0: s = semnul mantisei ( s = 1 - mantisa negativa ); - bitii 1-8: e = exponentul deplasat ( deplasarea este ); - bitii 9-31: f = mantisa/fractia ( cand e 0, se presupune un bit egal cu 1, la stanga lui f; virgula se plaseaza intre acest bit si primul bit explicit al mantisei; valoare: numarul reprezentat intr-un format scurt este: ( -1 ) s 2 e-(2 7-1).( 1 + f ), cu conditia e 0. Valoarea/marimea numerelor reprezentate este in gama: (1,0) pana la ( ), ceea ce reprezinta aproximativ 1, pana la 3, Formatul lung ( dublu - de baza ). s e f bitul 0: s = semnul mantisei ( s = 1 - mantisa negativa ); - bitii 1-11: e = exponentul deplasat ( deplasarea este ); - bitii 12-63: f = mantisa/fractia ( cand e 0, se presupune un bit egal cu 1, la stanga lui f; virgula se plaseaza intre acest bit si primul bit explicit al mantisei; valoare: numarul reprezentat intr-un format lung este: ( -1 ) s 2 e-(2 10-1).( 1 + f ), cu conditia e 0. Observatii privind formatele. 1. Baza a fost aleasa din considerente de echilibrare a gamei, cu restrictia ca toate numerele mici sa aibe valori reciproce reprezentabile. Contrar altor practici, gama obtinuta este deplasata pentru a putea asigura depasirea inferioara (underflow), deoarece aceasta situatie se poate rezolva mai usor, prin hardware, decat depasirea superioara (overflow)
153 2. S-a constatat ca prezenta unui prim bit implicit, inaintea bitilor mantisei, asigura depasirea inferioara gradata. Mai jos se va arata cum au fost rezolvate aspectele mentionate la punctele 1 si Cazuri speciale. 3.1 In conditiile unui exponent egal cu zero s-a rezervat un camp pentru: - zero: toti bitii sunt zero; - date initializate: bitul de semn este unu, iar ceilalti biti sunt zero; - numere denormalizate: toate formatele de biti cu exponent zero si mantisa diferita de zero se interpreteaza ca numere denormalizate; in efectuarea operatiilor aritmetice bitul cel mai semnificativ este fortat la zero iar bitul implicit unu este adunat la exponent, ceea ce va permite implementarea gradata a depasirii inferioare. Valoarea denormalizata va fi: ( -1 ) s 2 1-(2 7-1).( 0 + f ) 3.2 In conditiile unui exponent cu toti bitii egali cu unu s-a rezervat un camp pentru: - + : semnul este zero, iar celalti biti sunt unu; - - : toti bitii sunt unu: - nedefinit: semnul si mantisa sunt zero, iar exponentul este format din unitati; - alte situatii: celelalte combinatii sunt rezervate pentru utilizari inca nedefinite. Standardul IEEE 754 pentru reprezentarea numerelor in virgula mobila. Acest standard a fost acceptat de numerosi producatori de microprocesoare si de unitati centrale pentru minicalculatoare si calculatoare de capacitate medie-mare. In aceste conditii se vor putea transporta, fara dificultati majore, pachetele de programe stiintifice intre diferite tipuri de echipamente de calcul. A. Formate. Formatele prezentate mai sus fac parte din standardul IEEE 754. In plus standardul mai contine formatul extins cu formele scurta (simpla) si lunga (dubla), in care mantisa este prevazuta cu un bit j, pentru specificarea explicita a partii intregi, care in formatul de baza discutat a fost presupus implicit. In acest format se dau alte valori minime si maxime pentru exponenti si mantise, in raport cu formatul de baza. In cele ce urmeaza se prezinta in rezumat caracteristicele tuturor formatelor.
154 Formatul simplu - de baza. Acest format este organizat pe 32 de biti: 1 bit pentru semnul mantisei, 8 biti pentru exponent si 32 de biti pentru mantisa. Valoarea V a numarului se calculeaza astfel: - daca e = 255 si f 0, atunci V = NaN ( nu este un numar -Not a Number - simbol codificat in format ); - daca e = 255 si f = 0, atunci V = (-1) s. - daca 0 < e < 255, atunci V = (-1) s.2 e-127.(1,f); - daca e = 0 si f 0, atunci V = (-1) s (0,f); - daca e = 0 si f = 0, atunci V = (-1) s.0 (zero). Formatul dublu - de baza. Acest format este organizat pe 64 de biti: 1 bit pentru semnul mantisei, 11 biti pentru exponent si 52 de biti pentru mantisa. Valoarea V a numarului se determina dupa cum urmeaza: - daca e = 2047 si f 0, atunci V = NaN ( nu este un numar -Not a Number - simbol codificat in format ); - daca e = 2047 si f = 0, atunci V = (-1) s. - daca 0 < e < 2047 atunci V = (-1) s.2 e-1023.(1,f); - daca e = 0 si f 0, atunci V = (-1) s (0,f); - daca e = 0 si f = 0, atunci V = (-1) s.0 (zero). Formatul simplu - extins. Acest format este structurat astfel: 1 bit de semn, 1 bit pentru partea intreaga (j) a mantisei, cel putin 31 de biti pentru partea fractionara a mantisei (f) si un exponent ce poate lua valori cuprinse intre minimum m = si maximum M = Valoarea V a numarului se determina dupa cum urmeaza: - daca e = M si f 0, atunci V = NaN; - daca e = M si f = 0, atunci V = (-1) s. ; - daca m < e < M, atunci V = (-1) s.2 e.(j,f); - daca e = m si j = f = 0, atunci V = (-1) s. 0 (zero); - daca e = m si j 0 sau f 0, atunci V = (-1) s.2 e*.(j,f); unde e* este egal cu m sau m + 1, selectat la implementare.
155 Formatul dublu extins. Acest format are caracteristici identice cu formatul simplu extins, cu exceptia ca exponentul ia valori intre m = si M =16383, avand cel putin 63 de biti pentru partea fractionara (f). B.Rotunjirea. Operatia de rotunjire trateaza numarul ca avand o precizie infinita si il modifica pentru a corespunde formatului destinatie. Schema hardware va emite un semnal pentru a arata daca rezultatul este corect sau incorect. Standardul IEEE 754 include atat un mecanism standard-implicit de rotunjire, cat si alte trei metode ce pot fi selectate de utilizator. Mecanismul standard rotunjeste numarul la cea mai apropiata valoare reprezentabila. Daca sunt posibile doua valori, formatul este rotunjit la valoarea para, care face ca eroarea de rotunjire sa fie egala cu jumatate din valoarea celui mai putin semnificativ bit. Celelalte trei mecanisme de rotunjire selectabile sunt urmatoarele: - rotunjirea catre + asigura cea mai apropiata valoare dar nu mai mica decat a numarului dat; - rotunjirea catre - furnizeaza cea mai apropiata valoare, dar nu mai mare decat numarul dat; - rotunjirea catre 0 ( trunchiere ) asigura valoarea cea mai apropiata, dar nu mai mare decat numarul dat in modul. Operatia de rotunjire se aplica formatului destinatie. In formatul dublu sau formatul extins standardul permite utilizatorului sa specifice daca rotunjirea trebuie sa se efectueze in formatul simplu - de baza. Aceasta permite ca pe o masina, care are numai formatul dublu de baza sau formatul extins, sa se emuleze si formatul simplu de baza. C. Valori speciale. Standardul de reprezentare in virgula mobila suporta aritmetica cu numere infinite folosind modalitatile afina si proiectiva, selectabile de utilizator. Modalitatea infinit-afina este definita prin relatia: - < ( oricare numar finit ) < +
156 Modalitatea infinit-proiectiva compara intotdeauna numerele egale, indiferent de semn. Standardul defineste un set de operatii astfel incat folosirea unui operand infinit nu va conduce la un rezultat eronat; pentru detectarea unor asemenea cazuri nu sunt prevazute capcane. In calculele cu valori infinite toate exceptiile care se vor discuta in continuare raman valabile. NaN constituie o valoare speciala, introdusa pentru a semnaliza operatii invalide sau operatii care produc rezultate invalide cu o valoare speciala. Standardul defineste posibilitatile de utilizare si neutilizare ale capcanelor pentru NaN. Folosirea capcanei asigura activarea unei exceptii, la efectuarea unei operatii cu un operand NaN. Neutilizarea capcanei conduce numai la pozitionarea indicatorilor corespunzatori de eroare (conditii). D. Operatii. In standard sunt definite operatiile aritmetice de baza: adunarea, scaderaea, inmultirea si impartirea; radacina patrata si gasirea restului la impartire; conversia formatului in: virgula mobila, numere intregi si numere zecimale codificate binar BCD ( cu exceptia numerelor BCD extinse EBCD ); compararea numerelor in virgula mobila. Operatia de comparare conduce la unele situatii particulare, cand se folosesc operanzi NaN sau cu valori infinite. Relatiile permise sunt: "mai mic decat", "egal cu", "mai mare decat" si "neordonat". Ultimul caz apare cand cel putin un operand este NaN si cand un numar infinit este comparat in modalitatea proiectiva cu un numar finit. Relatia "neordonat" afirma predicatele "neordonat" si "< >", negand insa pe toate celelalte. Atunci cand se testeaza daca un numar are valoarea NaN, nu va fi posibila verificarea intre o constanta NaN si un numar, deoarece relatia este intotdeauna "neordonat". E. Exceptii si capcane. Standardul IEEE754 defineste atat exceptiile, care trebuie detectate, cat si informatiile necesare elementului, care manipuleza capcana, pentru gasirea exceptiilor. Implementarea va asigura cate un indicator pentru fiecare tip de exceptie. Raspunsul standard la exceptie consta in continuarea operatiei, fara activarea capcanei. Operatie invalida. Acest tip de exceptie se incadreaza in doua clase: exceptii de operand invalid si rezultat invalid. In ambele cazuri, daca nu este activata o capcana, rezultatul va fi NaN. Exceptiile de operand sunt provocate de urmatoarele evenimente: - un operand este NaN, fara a se genera un semnal pentru capcana si fara a se activa capcana;
157 - se executa una din urmatoarele operatii: - ( ) + ( ) - ( modalitatea proiectiva ), - ( ) + (- ) - ( modalitatea afina ), - ( )/( ), 0/0 si 0 ; - in operatia xremy, de aflare a restului la impartire, fie x este infinit, fie y este zero; - cand se incearca extragerea radacinii patrate dintr-un numar negativ; - la conversia de la formatul in virgula mobila la intreg sau BCD, cand conversia corecta conduce la o depasire, la o valoare infinita sau NaN; - la comparatiile ce folosesc predicatele <, > sau negatiile lor, cand relatia este de "neordonare" si cand nici un operand nu este"neordonat". Exceptiile de rezultat invalid apar cand rezultatul unei operatii nu este corect in raport cu formatul destinatie. Alte exceptii. Exceptiile standard sunt urmatoarele: - impartire cu zero; - depasire superioara; - depasire inferioara; - rezultat inexact, atunci cand nu se genereaza alte exceptii si cand valoarea rotunjita pentru rezultat conduce la depasire superioara, fara a activa capcana. Parametrii pentru capcana. Capcanele, care corespund fiecarei exceptii pot fi activate/dezactivate de utilizator. Cand este activata, exceptia transfera controlul la o rutina pentru manipularea capcanei (furnizata de utilizator sau de catre sistem). O asemenea rutina trebuie sa primeasca urmatoarele informatii: - tipul exceptiei, care a aparut, - tipul operatiei, care s-a executat, - formatul destinatiei, - rezultatul corect rotunjit ( in cazul depasirii superioare/inferioare, rezultatului inexact/invalid), pe langa alte informatii referitoare la faptul ca rezultatul nu corespunde formatului destinatie, - valorile operandului, in cazurile impartirii cu zero si exceptiilor de operand invalid.
158 Standardul aritmetic. Scopul urmarit prin aritmetica in virgula mobila este acela de a pune la dispozitia utilizatorului un sistem convenabil de reprezentare a numerelor prin care se obtin rezultate precise ca urmare a efectuarii operatiilor aritmetice. D. Knuth a sugerat un model de aritmetica in virgula mobila, care permite obtinerea unor rezultate in virgula mobila foarte apropiate de rezultatul corect. Algoritmii propusi de Knuth conduc la implementari extrem de costisitoare si nu ofera solutii pentru cazul rezultatelor aflate exact intre doua numere in virgula mobila. In continuare se prezinta atat un set de reguli, care specifica toate cazurile, cat si algoritmii de implementare ai acestui set de reguli. Reguli. 1. Multimea numerelor in virgula mobila trebuie sa contina 0 si 1 (identitati aditive si multiplicative), iar daca x apartine multimii atunci si -x va apartine multimii. 2. Daca rezultatul corect al unei operatii in virgula mobila esteun numar in virgula mobila, atunci acel numar trebuie sa fie generat de operatia respectiva, in caz contrar rezultatul va fi rotunjit conform regulei Daca rezultatul corect se afla exact la mijlocul intervalului dintre doua numere in virgula mobila, atunci aritmetica respectiva trebuie sa genereze numarul cu mantisa para. Regulile de mai sus ( regula de rotunjire poarta numele de "rotunjire la par" ) asigura maximum de precizie. In continuare vor fi ilustrate metodele de implementare ale operatiilor aritmetice in virgula mobila (adunare, scadere, inmultire si impartire), care utilizeaza "rotunjirea la par", in vederea obtinerii rezultatului final. Pentru exemplificare se va considera un acumulator cu urmatoarea structura, pentru efectuarea operatiilor aritmetice cu numere avand mantisa de patru biti: D F1 F2 F3 F4 G R ST cu urmatoarele notatii: - D: bitul de depasire, - F1 - F4: cei 4 biti ai mantisei, - G: Bitul de garda, - R: bitul de rotunjire,
159 - ST: bitul de legatura/lipitura, "stiky". Bitul ST este pozitionat in unu, daca in procesul de denormalizare are loc transferul unei unitati din bitul R spre dreapta. Daca ST este pozitionat in unu el va ramane in aceasta stare pe toata durata operatiilor. Toate deplasarile in acumulator implica bitii D, G, R si ST. Bitul ST nu este modificat de deplasarea la stinga. Deplasarea la dreapta introduce zero in bitul D. In algoritmii de mai jos se considera ca acumulatorul este initializat la zero si ca operanzii au fost verificati daca sunt invalizi sau egali cu zero. Astfel, se considera numai operanzii valizi, normalizati, diferiti de zero. De asemenea, se considera ca operatiile aritmetice, privind exponentii pentru inmultire, imparire si ajustare prin deplasare, sunt evidente, fara a necesita detalieri, si ca semnul rezultatului este stabilit in mod corespunzator. Adunarea si scaderea in virgula mobila vor fi tratate impreuna, evidentiind doua cazuri: - adunarea modulelor, atunci cand se aduna numere cu acelasi semn sau cand se scad numere cu semne diferite; - scaderea modulelor, atunci cand se scad numere cu acelasi semn sau se aduna numere cu semne diferite. 1.Adunarea modulelor. 1.1.Denormalizarea: numarul cu exponent mai mic se incarca in acumulator si se deplaseaza cu un numar de pozitii spre dreapta, egal cu diferenta exponentilor. Daca exponentii sunt egali oricare dintre numere/operanzi poate fi incarcat in acumulator, fara a se efectua vreo deplasare. 1.2.Adunarea: cel de-al doilea operand este adunat la acumulator. 1.3.Normalizarea: daca s-a pozitionat in unu bitul D atunci se deplaseaza continutul acumulatorului cu un bit spre dreapta. 1.4.Rotunjirea: se aduna 1 la pozitia G, dupa care, daca G = R = ST = 0, se forteaza F Renormalizarea: daca D este pozitionat in unu se face deplasarea continutului acumulatorului spre dreapta. 1.6.Depasirea: se verifica daca a avut loc o depasire a exponenului. 2.Scadera modulelor. 2.1.Denormalizarea: se incarca numarul cu modulul cel mai mic in acumulator si se deplaseaza la dreapta, daca este necesar. Rezultatul va fi zero daca si numai daca operanzii sunt egali, abandonadu-se operatiile urmatoare. 2.2.Scadearea: se scade continutul acumulatorului din celalalt operand, pastrand rezultatul in acumulator ( daca ST = 1 se va genera un imprumut );
160 2.3.Normalizarea: se deplaseaza acumulatorul la stanga pana cand F1 devine egal cu 1; 2.4.Rotunjirea: se aduna 1 la bitul G si apoi, daca G = R = 0 si ST = 0, se forteaza F4 0; nu este necesara rotunjirea daca pentru normalizare au fost necesare mai multe deplasari la stanga; 2.5.Renormalizarea: in cazul in care rotunjirea a condus la depasire, se efectueaza o deplasare spre dreapta. Inmultirea. In algoritmul pentru inmultirea in virgula mobila se considera prezente resursele hardware necesare pentru a forma produsul la doua numere in lungime dubla. In caz contrar se poate folosi algoritmul "aduna si deplaseaza la dreapta" in acumulator, pentru a forma produsul, incepand cu rangul inferior. In continuare partea mai putin semnificativa este pierduta pe masura ce este deplasata in afara bitului ST. 1.Inmultirea: se formeaza produsul in lungime dubla; 2.Normalizarea: pentru o eventuala normalizare a produsului se face o deplasare cu un bit; 3.Pozitionarea bitilor G, R, ST: fie produsul normalizat in lungime dubla: F1 F2 F3 F4 F5 F6 F7 F8 atunci G = F5, R = F6, ST = F7 F8. 4.Rotunjirea: se realizeaza dupa cum s-a aratat mai sus; 5.Renormalizarea: se realizeaza dupa cum s-a aratat mai sus; 6.Erori: se verifica depasirea superioara/inferioara a expnentului. Impartirea. Se considera ca, in procesul efectuarii impartirii, restul este disponibil in orice moment. 1.Impartirea: se formeaza primii sase biti ai catului normalizat: F1 F2 F3 F4 F5 F6 2.Pozitionarea bitilor G, R, ST: se forteaza: G = F5, R = F6 si ST = rest; 3.Rotunjirea: se efectueaza dupa regulile mentionate mai sus; 4.Renormalizarea: se efectueaza dupa regulile mentionate mai sus. Prezenta bitului ST permite implementarea rotunjirii directionate, adica la dreapta sau la stanga pe un numar standard de biti. In algoritmii de mai sus s-a cautat obtinerea unei precizii maxime cu pretul reducerii vitezei, intr-o oarecare masura.
161 Erori in reprezentarea numerelor in virgula mobila. Precizia finita introduce erori, care pot sau nu pot sa fie acceptabile pentru aplicatia data. Spre exemplu, se considera reprezentarea unui milion, in virgula mobila, dupa care se scade 1, din aceasta. In cazul in care eroarea este mai mare decat 1, restul va fi tot de 1 milion. Pentru a caracteriza eroarea, gama si precizia, se vor face urmatoarele notatii: b baza; f - numarul rangurilor semnificative ale mantisei/fractiei, in baza data; E - cel mai mare exponent; e - cel mai mic exponent. Numarul rangurilor semnificative din fractie este diferit de numarul de biti in cazul in care baza este diferita de 2. De exemplu, o baza egala cu 16 foloseste 4 biti pentru fiecare rang. Daca baza este de forma 2 k (o putere a lui 2), atunci sunt necesari k biti pentru fiecare rang exprimat in baza data. Utilizarea lui 1 ascuns mareste f cu 1 bit, chiar daca nu conduce la cresterea numarului de numere reprezentabile. In cadrul analizei reprezentarii in virgula mobila intereseaza urmatoarele aspecte: - numarul numerelor reprezentabile; - numarul care are valoarea/marimea cea mai mare; - numarul diferit de zero, care are valoare/marimea cea mai mica; - dimensiunea celei mai mari distante intre doua numere succesive; - dimensiunea celei mai mici distante intre doua numere succesive. Numarul numerelor reprezentabile se poate calcula luand in considerare numarul de valori pe care le pot lua campurile distincte ale reprezentarii in virgula mobila: - semnul poate lua doua valori; - numarul de exponenti este dat de expresia: ((M m) + 1); - primul rang al fractiei: b-1; - celelalte ranguri ale fractiei: b f-1 ; - zero. Astfel, se obtine urmatoarea expresie: 2 ((M m) + 1) (b-1) b f Trebuie aratat ca, in cazul exponentului, nu toate combinatiile de biti sunt valide. Spre exemplu, in standardul IEEE 754, desi sunt rezervati 8 biti pentru exponent, cel mai mic exponent este -126 si nu 128. Exponentii interzisi sunt folositi pentru reprezentari speciale: zero si infinit.
162 Se vor considera, in continuare, numarul care are valoarea/marimea cea mai mare si numarul diferit de zero, care are valoare/marimea cea mai mica; Numarul cu marimea cea mai mica are, de asemenea, cel mai mic exponent b m si cea mai mica fractie normalizata (diferita de zero), care va fi egala cu b -1. Astfel, numarul cel mai mic va fi: b m-1. In mod similar numarul cel mai mare va avea cel mai mare exponent b M si cea mai mare fractie (1 - b -f ), ceea ce conduce la valoarea b M. (1 - b -f ). Cea mai mica distanta si cea mai mare distanta intre doua numere consecutive sunt calculate intr-o maniera similara. Cea mai mica distanta apare atunci cand exponentul are cea mai mica valoare b m si cand se modifica cel mai putin bit semnificativ al fractiei, b -f. Aceasta conduce la o valoare minima a distantei egala cu b m-f. Cea mai mare distanta apare atunci cand exponentul are cea mai mare valoare b M si cand se modifica cel mai putin bit semnificativ al fractiei,b - f. Aceasta conduce la o valoare minima a distantei egala cu b M-f. Se va considera un exemplu, de reprezentare in virgula mobila, in care exista un bit de semn, un exponent pe 2 biti in exces 2, o fractie pe 3 biti normalizat, fara 1 ascuns. Reprezentarea lui zero este In figura de mai jos este data reprezentarea in acest format: Observatii: - au aparut distante mari intre zero si primele numere reprezentabile, deoarece reprezentarea normalizata nu permite structuri de biti in mantisa, care sa corespunda acestor distante; - cel mai mic exponent este 2 si cea mai mica fractie normalizata este (0,100) 2, ceea ce face ca modulul celui mai mic numar reprezentabil, diferit de zero, sa fie 1/8. - cel mai mare exponent este 2 1, iar cea mai mare fractie este (1 2-3 ), ceea ce conduce la o valoare de 7/4 pentru cel mai mare numar reprezentabil; - cel mai mic exponent este 2, iar valoarea celui mai putin semnificativ bit al fractiei este 2-3, conducand la o valoare minima a distantei intre doua numere consecutive egala cu 2-5, adica 1/32;
163 - cel mai mare exponent este 1, iar valoarea celui mai putin semnificativ bit al fractiei este 2-3, conducand la o valoare maxima a distantei intre doua numere consecutive egala cu 2-2, adica 1/4; - datorita normalizarii numarul reprezentarilor valide este mai mic decat numarul reprezentarilor posibile; - numarul reprezentabile este dat de expresia: 2 ((M m) + 1) (b-1) b f = 2 ((1 (- 2) + 1) (2-1) = erorile relative sunt aproximativ aceleasi, comparand rapoartele intre distantele minime/maxime, intre doua numere consecutive, si valorile maxime ale celor mai mici/mari numere reprezentabile: ( b m-f ) / (b (1 - b -f ))= 1/( b f -1), pentru numerele mici distanta valoarea maxima pentru numarul cu exponent minim distanta ( b M-f ) / (b M (1 - b -f ))= 1/( b f -1), pentru numerele mari cel mai mare numar Observatie: Standardul IEEE 754 utilizeaza numere denormalizate pentru a umple distanta intre numerele plasate in apropierea zeroului. Exemplu. Sa se reprezinte in virgula fixa numarul (0,9375) 10. Convertit in binar, in virgula fixa, acest numar va avea urmatoarea forma: (0,0011) 2. Valoarea sa exprimata in virgula mobila va fi: 1, Studiu de caz privind pierderea de precizie la conversia de la intregi la virgula mobila. In timpul razboiului din Golf, , s-au utilizat baterii de rachete Patriot, pentru urmarirea si distrugerea rachetelor irakiene Scud. Bateriile, prevazute cu radare si tehnica de calcul operau numai cateva ore, pentru a se evita detectarea lor. In 5 februarie, 1991, baracile armatei SUA, de la Dhahran au fost atacate cu rachete, inregistrandu-se 28 de morti, datorita unor erori in partea de prelucrare a datelor de la sistemele radar. Tintele sunt urmarite de radar, stabilindu-se, pe baza parametrilor calculati, pozitia viitoare a acesteia. Astfel, se genereaza o poarta in care se considera a fi plasata tinta, ceea ce va permite eliminarea altor zgomote, din afara portii.
164 Predictia urmatoarei pozitii a rachetei Scud se calcula pe baza vitezei acesteia. Viteza este determinata prin modificarea pozitiei in raport cu timpul. Timpul in sistemul Patriot este actualizat de catre ceasul intern la intervale de 100 ms. Viteza este reprezentata in virgula mobila pe 24 de biti, iar timpul ca un intreg pe 24 de biti. Pentru a calcula noua pozitie, timpul si viteza trebuie sa fie reprezentate in virgula mobila, pe 24 de biti. Conversia de la intreg la virgula mobila, pentru timp, s-a facut cu erori, care cresc proportional cu timpul de operare al sistemului. Astfel, poarta pentru noua pozitie a fost calculata eronat, eroarea depinzand de viteza rachetei si de durata de timp de cand sistemul era operational. In acea zi Patriot opera de peste 100 de ore, eroarea stabilirii portii fiind de 687 metri, ceea ce a condus la pierderea tintei. Situatia fusese semnalata cu doua saptamani anterior de catre israelieni. Software-ul a fost modificat, a fost transmis pe campul de lupta, dar nu fusese instalat. O solutie simpla, pe moment, ar fi constat in reboot-area a sistemului, la intervale de cateva ore, pentru eliminarea erorilor acumulate la conversia timpului.
165 Coduri alfanumerice Spre deosebire de numerele reale, care au o gama infinita, numarul caracterelor alfanumerice este limitat, ceea ce permite ca un intreg set de caractere sa fie codificat cu un numar redus de biti pe caracter. In practica se utilizeaza doua sisteme de codificarea a caracterelor alfa numerice: ASCII ( American Standard Code for Information Interchange) si EBCDIC (Extended Binary Coded Decimal Interchange Code) Codul ASCII. Acest cod, utilizat pentru reprezentarea carcterelor alfanumerice, utilizeaza 7 biti pe caracter. Toate cele 2 7 coduri posibile reprezentand caractere valide. In tabela de mai jos se prezinta in hexazecimal codurile ASCII alfanumerice. Caracterele din pozitiile 00 1F si 7F, sunt caractere de control utilizate pentru transmisie, controlul afisaii/tiparirii, cat si pentru alte scopuri. Toate celelalte caractere sunt afisabile si incluzand: literele, cifrele, semnele de punctuatie si spatiul. Cifrele 0 9 apar in secventa ca si literele mici si mari, ceea ce simplifica manipularea caracterelor. Pentru a transforma reprezentarea alfanumerica a unei cifre zecimale in valoarea sa numerica este suficient sa se scada (30) 16 din ea. Pentru a transforma codul unei majuscule in codul corespunzator al literei mici se va aduna la primul (20) 16.
166 Codul EBCDIC. Codul ASCII permite reprezentarea a 128 de caractere, ceea ce reprezinta o limitare pentru cele mai multe tastaturi moderne. Aceste tastaturi contin, pe langa tastele alfanumerice si taste dedicate unor caractere speciale. Codul EBCDIC este un cod pe 8 biti utilizat de catre IBM. In tabelul de mai jos se prezinta, in codificare hexazecimala codurile EBCDIC. Adesea codul ASCII, pe 7 biti, este reprezentat pe un octet, avand 0 sau 1 in bitul cel mai semnificativ, care este folosit drept bit de paritate. Aceasta nu este de natura sa favorizeze codul ASCII in raport cu codul EBCDIC. In schimb, la transmisia seriala a datelor codurile pe 8 biti necesita mai mult timp, decat cele pe 7 biti.
167 Coduri detectoare de erori. Datele stocate, transmise si prelucrate in cadrul sistemelor numerice sunt reprezentate sub forma unor succesiuni de unitati si zerouri. Reprezentarea lor fizica se realizeaza prin niveluri ale unor tensiuni electrice, care pot fi afectate de diverse zgomote, avand cauze diferite. Zgomotele pot modifica unii biti din 0 in 1 si invers, ceea ce conduce la distorsionarea informatiei, la erori. Pe baza unui model statistic al erorilor este posibila crearea unei astfel de reprezentari a datelor incat sa fie posibile, atat detectarea, cat si corectarea erorilor. Daca se considera codul ASCII, in care sunt utilizate toate posibilitatile de codificare ale caracterelor, oricare modificare a unui bit intr-un cod al unui caracter dat va conduce la codul valid al altui caracter. Aceasta observatie sta la baza introducerii redundantei, sub forma unor biti suplimentari, ceea ce va permite detectarea si corectarea erorilor. Detectarea si corectarea erorilor. Distanta Hamming defineste distanta logica intre doua coduri de caractere valide si este masurata prin numarul de biti prin care difera acestea. Pentru codul ASCII aceasta distanta este egala cu 1. Adugand un singur bit redundant, la codul ASCII al fiecarui caracter alfanumeric, se poate detecta o singura eroare, intrucat codul eronat se va plasa intre doua coduri valide ASCII. O metoda de recodificare a codului ASCII, pentru a obtine o distanta Hamming egala cu 2, consta in introducerea unui bit de paritate, plasat la stanga codului normal ASCII. Acest bit va fi calculat pe baza sumei modulo 2 a bitilor egali cu 1 din codul ASCII. In cazul conventiei de paritate para, bitul de paritate va fi egal cu rezultatul sumei modulo 2, amintita mai sus, iar in cazul paritatii impare acesta va fi egal cu valoarea negata a acesteia. P Caracterul d e f g D Bit de paritate Codul ASCII
168 In aceste conditii tabela codurilor ASCII, cu bit de paritate, va avea 256 de intrari/coduri, dintre care jumatate vor fi invalide. In cazul receptionarii unui caracter invalid se poate cere retransmisia, ceea ce in multe situatii nu este convenabil. O solutie ar fi aceea prin care se poate detecta si corecta aparitia unei reori. In acest scop trebuie sa se mareasca numarul bitilor redundanti din codul ASCII. Pentru detectarea si corectarea unei erori in cadrul fiecarei pozitii a unui cod ASCII, fiecarui cod valid ASCII trebuie sa i se asocieze alte 7 coduri invalide, in care se va modifica exact un singur bit. Acest lucru trebuie sa se intample cu fiecare cod valid ASCII, iar codurile invalide asociate fiecarui cod valid trebuie sa fie diferite. Spre exemplu codului ASCII valid pentru caracterul d i se vor asocia codurile invalide de mai jos: cod valid pentru d coduri invalide pentru d Problema se pune in legatura cu numarul necesar al bitilor redundanti. Pentru un cod de k biti, se considera ca numarul bitilor redundanti egal cu r. Pentru fiecare cele 2 k cuvinte initiale exista caractere de k biti, in care cate un bit este modificat, la care se adauga caracterele de r biti, cu cate un bit modificat plus caracterul nemodificat. Astfel, vor exista 2 k x (k + r + 1) coduri in total. Pentru a suporta toate aceste coduri trebuie sa fie suficiente combunatii de k + r biti. Relatia care trebuie indeplinita este data mai jos: 2 k (k + r + 1) 2 k+ r sau (k + r + 1) 2 r In cazul k = 7, daca se cauta intregul r care satisface relatia de mai sus, rezulta r = 4, ceea ce conduce la un cod ASCII, prevazut cu caractere redundante, de = 11 biti. Asignarea celor 4 biti redundanti la cuvintele originale se va face astfel incat sa poata fi identificata o eroare la un singur bit. Fiecarui bit din cuvantul codificat, incluzand bitii de verificare/redundanti, ii este asignata o combinatie data de biti de verificare C 8 C 4 C 2 C 1.
169 Combinatiile sunt calculate, in figura de mai jos, ca reprezentari binare ale pozitiilor bitilor care sunt verificati, incepand cu pozitia 1. C 1 este in pozitia de bit1, C 2 in pozitia de bit 2, C 4 in pozitia 4 samd. Plasarea lor in pozitii corespunzatoare puterilor lui 2 faciliteaza procesul de localizare a erorii. Acest mod particular de amplasare poarta numele de Cod de Corectare a unei Erori Singulare (CCES) sau SEC (Single Error Correcting) C 8 C 4 C 2 C 1 Bit verificat Intrucat pozitiile unitatilor sunt unice in fiecare combinatie a bitilor de verificare, o eroare se poate localiza prin observarea bitilor redundanti eronati. Pentru exemplificare se considera codul ASCII al caracterului a Pozitia bitilor Bitii de verificare Valorile bitilor de verificare se stabilesc conform tabelului de mai sus. Bitul de verificare C 1 = 0 realizeaza paritatea para pentru grupul de biti {1, 3, 5, 7, 9, 11}. Membrii acestui grup sunt luati din pozitiile, care au 1 in coloana lui C 1, din tabela de mai sus. Bitul de verificare C 2 = 0 furnizeaza paritatea para pentru grupul de biti {2, 3, 6, 7, 10, 11}. In mod similar bitul de verificare C 4 = 0 asigura paritatea para pentru grupul de biti {4, 5, 6, 7}. In final C 8 = 0 stabileste paritatea para pentru grupul de biti {8, 9, 10, 11}. O posibilitate de cautare in tabela membrilor grupului de paritate, consta in aceea ca bitul n al cuvantului codificat este verificat prin bitii din
170 pozitiile 1,.,i a caror suma este egala cu n. De exemplu bitul 7 este verificat de bitii din pozitiile 1, 2, 4, deoarece = 7. Se considera ca receptorul primeste sirul de biti , in conditiile CCES pentru ASCII. Ce caracter a fost transmis? Se vor calcula paritatile pentru fiecare din bitii de verificare Bit eronat Paritate C 1 verifica biti bitii{1, 3, 5, 7, 9, 11} para C 2 verifica biti bitii{2, 3, 6, 7, 10, 11} impara C 4 verifica biti bitii{4, 5, 6, 7} para C 8 verifica biti bitii{8, 9, 10, 11} impara Pentru a localiza eroarea, se vor aduna pozitiile bitilor de verificare cu paritate impara: = 5. Astfel cuvantul care a fost transmis este: Daca se inlatura bitii de verificare, se va obtine codul ASCII al caracterului D. Schema de detectare si corectare a unei erori poate fi vizualizata pe un hipercub, in varfurile caruia sunt plasate codurile valide si invalide. Distanta Hamming separa codurile valide, in timp ce un cod invalid esteplasat la o distanta mai mica de un cod valid, ceea ce faciliteaza detectarea si corectarea erorii. In cazul aparitiei a doua erori, schema de mai sus permite detectarea lor, fara a oferi posibilitatea de a le corecta. In cazul a doua erori, care ar putea fi corectate, distanta minima Hamming trebuie sa fie egala cu 5. In general, pentru a detecta p erori distanta Hamming minima trebuie sa fie p + 1, iar o distanta Hamming de 2p + 1 permite corectarea a p erori Verificare prin redundanta verticala. Schema prezentata mai sus s-a referit la detectarea si corectarea unei erori singulare intr-un caracter individual. Aceasta mai poarta numele de verificarea redundanta orizontala/longitudinala (VRO).
171 O alternativa o reprezinta verificarea redundanta verticala/longitudinala (VRV) in cadrul careia, la sfarsitul unui grup de cuvinte transmise, se adauga o suma de control. In acest caz, paritatea este calculata pe coloane, suma de control fiind atasata, in final, la mesaj. La receptie, se calculaeaza din nou suma de contro, care se compara cu cea receptionata. Daca apare o eroare se solicita retransmiterea mesajului intrucat nu exista suficienta redundanta pentru identificarea pozitiei unei erori. Tehnicile VRO si VRV se pot utiliza pentru a imbunatati verificarea aparitiei unor erori. In unele cazuri erorile apar in rafala, modificand mai multi biti consecutivi, atat pe linii, cat si pe coloane, in cadrul unui mesaj. Pentu asemenea situatii se recomanda o schema mai puternica de verificare denumita Verificare Redundanta Ciclica (VRC sau CRC - Cyclic Redundancy Checking). VRC reprezinta o varianta a VRV. Problema. Sa se calculeze numarul necesar de biti de verificare pentru corectarea unei erori duble in codul ASCII. Solutie. In codul ASCII sunt folositi, pentru fiecare caracter, k = 7 biti, la care se vor mai adauga r biti redundanti de verificare. Pentru fiecare dintre cele 2 k caractere ASCII vor exista (k+ r) caractere eronate la nivelul unui bit si [(k+ r)( k+ r-1)]/2 caractere eronate la nivelul a doi biti, la care se mai adauga caracterul corect. Numarul caracterelor codificate cu (k+ r) biti este egal cu 2 (k+ r). In aceste conditii trebuie sa se indeplineasca conditia de mai jos: 2 k (k+ r) x { (k+ r) + [(k+ r)( k+ r-1)]/2 +1 } 2 Inlocuind k cu valoarea sa 7, rezulta ca valoarea cea mai mica pentru r, care satisface relatia de mai sus este r = 7. Intrucat, pentru corectarea a p erori trebuie pastrata o distanta Hamming egala cu 2p + 1, rezulta ca in acest caz, unde p = 2, distanta va fi egala cu 5. In cazul in care se mentine aceeasi distanta si pentru detectarea a erorilor, cunoscand ca distanta Hamming este egala cu numarul erorilor detectate p + 1, rezulta ca numarul erorilor detectate este egal cu 4.
172 Probleme. x
173 x
174 x) SEC inseamna Single Error Correcting
175
176
177 2.2.Inmultirea. Inmultirea numerelor consta in generarea si adunarea produselor partiale obtinute prin inmultirea rangului curent al inmultitorului cu deinmultitul. In cazul numerelor binare, produsul partial curent este egal cu deinmultitul, deplasat spre stanga conform pozitiei rangului inmultitorului, daca bitul curent al inmultitorului este unu, sau egal cu zero, daca bitul curent al inmultitorului este zero. Daca produsul partial curent este diferit de zero, el se aduna la suma produselor partiale anterioare. Exista si posibilitatea ca, dupa fiecare adunare, suma produselor partiale sa fie deplasata spre dreapta cu un rang Inmultirea in cod direct. Inmultirea in cod direct/semn si modul presupune tratarea separata a semnelor si inmultirea modulelor. Fie numerele X si Y, X x n-1 x n-2. x 1 x 0, Y y n-1 y n-2. y 1 y 0, care urmeaza sa fie inmultite, pentru a furniza produsul Z: Z z 2n-2 z 2n-3 z 1 z 0. Semnul produsului z 2n-1 va fi obtinut astfel: z 2n-2 = x n-1 y n-1. Produsele partiale: P 0,.,P n-3, P n-2 se obtin dupa cum urmeaza: P 0 = x. y P 1 = x. y P n-2 = x. y n-2. 2 n-2 iar suma lor va conduce la produsul modulelor: z 2n-3 z 1 z 0 Fie cazul a doua numere reprezentate in cod direct pe 5 biti: - deinmultitul x = si - inmultitorul y = Pentru semn rezulta: z 8 = 1 0 = 1, in timp ce modulul produsului se va obtine dupa cum se arata mai jos:
178 z 7 z 1 z 0 = Astfel, produsul celor doua numere va avea 9 biti: z 8 z 7 z 1 z 0 = In exemplul de mai sus produsele partiale s-au obtinut prin deplasarea spre stanga a deinmultitului, inmultit cu rangul corespunzator al inmultitorului. Solutie paralela. O implementare combinationala presupune utilizarea sumatoarelor complete si a unor porti AND. Astfel, se obtine un sumator modificat, pentru un rang, conform schemei de mai jos: Cj Cj SPi,j-1 Yj 1 Xi CI A0 B0 Z0 CO 4 5 SPi,j SPi,j-1 Yj Xi Sumator modificat SPi,j Ci+1 Ci+1 a) Sumator modificat b) Schema bloc a sumatorului modificat x 3 0 x 2 0 x 1 0 x 0 0 y 0 sumator modificat sumator modificat sumator modificat sumator modificat 0 x 3 x 2 SP 0,3 x 1 SP 0,2 x 0 SP 0,1 SP 0,0 y 1 sumator modificat sumator modificat sumator modificat sumator modificat 0 SP 1,4 SP 1,3 SP 1,2 SP 1,1 SP 1,0 z 4 z 3 z 2 z 1 z 0
179 S-a notat cu SP i,j bitul i al sumei produselor partiale j. Schema prezinta numai primele doua etaje ale dispozitivului paralel de inmultire. Sumatorul modificat poate fi utilizat in cadrul unei structuri de inmultire paralela, ca in figura de mai sus. Din punctul de vedere al implementarii algoritmului, se poate afirma ca, in acest caz, este vorba de o programare spatiala, care conduce la viteza ridicata de operare. Solutia necesita, pentru implementare, (n-1) 2 sumatoare modificate. In cel mai defavorabil caz, rezultatul inmultirii se obtine dupa propagarea semnalelor prin 4.(n 1) porti. Se lasa pe seama cititorului elaborarea unei solutii bazate pe sumatoare cu salvare a transportului si sumatoare cu transport anticipat. Solutie seria l- paralela. In scopul reducerii cantitatii de hardware, dispozitivele de inmultire se realizeaza sub forma unei structuri paralele hardware, pentru un pas de inmultire, cu operare secventiala. Daca se noteaza produsul partial j cu pp j, atunci un pas de inmultire va avea urmatoarea forma: pp j = pp j-1 + x. y j. 2 j O schema bloc, pentru solutia mentionata mai sus, este prezentata in continuare: x 3 x 2 x 1 x 0 Generator de produse partiale y j 0 Sumator pe n biti. registru de deplasare dreapta cu 2.(n-1) ranguri in care se acumuleaza sumele produselor partiale. Operarea se efectueaza conform urmatoarei secvente: 1. anuleaza continutul registrului in care se acumuleaza sumele produselor partiale; 2. initializeaza numarul rangului bitului inmultitorului j = 0; 3. formeaza produsul partial x. y j. 4. aduna produsul partial la jumatatea superioara a registrului sumei produselor partiale;
180 5. efectueaza j = j + 1 si daca j = n treci la deplaseaza la dreapta cu un rang continutul registrului sumei produselor partiale; 7. treci la pasul 3; 8. produsul cu 2.(n 1) ranguri s-a obtinut in registrul de deplasare. Rezultatul se poate stoca fie sub forma unui singur cuvant, pastrand jumatatea superioara, fie sub forma unui cuvant dublu. In primul caz va fi afectata precizia. Inmultirea numerelor in cod complementar. Intrucat, in marea majoritate a cazurilor, numerele negative se reprezinta in calculatoare in codul complementar, in continuare, vor fi examinate cateva metode de inmultire in acest cod. Mai intai se vor examina deplasarile aritmetice la stanga si la dreapta in cod complementar. Se considera urmatoarele cazuri: 1. x > 0. [x] c = 0 x n-2. x 1 x 0, Deplasarea la stanga: [2.x] c = x n-2. x 1 x 0 0, Deplasarea la dreapta: [2-1.x] c = 00x n-2. x 1, 2. x < 0. ~ ~ ~ [x] c = 1x n-2. x 1 x 0, Deplasarea la stanga: ~ ~ [2.x] c = x n-2. x 1 0, Deplasarea la dreapta: ~ ~ [2-1.x] c = 11x n-2. x 1. Cateva metode pentru inmultirea numerelor reprezentate in cod complementar. Metoda 1. - Se modifica, daca este cazul, inmultitorul si deinmultitul astfel incat inmultitorul sa fie pozitiv. - Produsele partiale se calculeaza in mod obisnuit.
181 - Deplasarea spre stanga/ dreapta a deinmultitului/sumei produselor partiale se realizeaza conform regulilor de deplasare in cod complementar. Metoda 2. Aceasta metoda presupune inmultirea numerelor cu semn in maniera obisnuita, ca si cand ar fi vorba de numere intregi fara semn. Rezultatul va fi corect numai in cazul in care cei doi operanzi sunt pozitivi. In caz contrar sunt necesare corectii, care se incadreaza in trei cazuri. 1. x > 0, y > 0. [x] c. [y] c = x. y = [x. y] c 2. x < 0, y > 0; [x] c = 2 n - x ; [y] c = y ; [x] c. [y] c = 2 n. y - x. y ; rezultat incorect [x] c. [y] c = 2 2n - x. y ; rezultat corect Rezulta necesitatea unei corectii egala cu: 2 2n - 2 n. y, care se va aduna la rezultatul incorect. 3. x > 0, y < 0; [x] c = x ; [y] c = 2 n - y ; [x] c. [y] c = 2 n. x - x. y ; rezultat incorect [x] c. [y] c = 2 2n - x. y ; rezultat corect Rezulta necesitatea unei corectii egala cu: 2 2n - 2 n. x, care se va aduna la rezultatul incorect. 4. x < 0, y < 0; [x] c = 2 n - x ; [y] c = 2 n - y ; [x] c. [y] c = 2 2n - 2 n. y - 2 n. x + x. y ; rezultat incorect [x] c. [y] c = x. y ; rezultat corect Rezulta necesitatea unei corectii egala cu: -2 2n + 2 n. y + 2 n. x, care se va aduna la rezultatul incorect. Metoda este greoaie si are un caracter pur teoretic. Metoda 3. Algoritmul lui Booth. In acest caz se pleaca de la observatia ca, valoarea unui numar Y, reprezentat in cod complementar, se poate calcula astfel: Y = - y n-1. 2 n-1 + y n-2. 2 n-2 + y n-3. 2 n y y = unde: n-1 = S (y i-1 - y i ).2 i i=0 - y n-1 reprezinta rangul de semn, codificat cu 0/1 in cazul numerelor pozitive/negative; - y -1 constituie rangul aflat la dreapta rangului 0, avand initial valoarea 0. In aceste conditii valoarea produsului X.Y se va exprima dupa cum urmeaza:
182 n-1 X.Y = S x. (y i-1 i=0 - y i ).2 i Pe baza formulei de mai sus se poate calcula produsul partial de rang i : y i-1 y i produsul partial x.2 i 1 0 x.2 i Pentru implementarea hardware se considera resursele corespunzatoare unei structuri orientate pe un singur acumulator: Deinmultit (X) Inmultitor (Y) n-1.. RD.. 0 n-1.. AC.. 0 n-1.. MQ.. 0 MQq RD RD 0 1 0/1 MUX 0/1 activare selectare SL Sumator 0/1 CNT Resursele hardware: - AC registrul acumulator; - RD registrul de date al memoriei; - MQ registru de extensie al acumulatorului; - MQq registru de un bit, extensia lui MQ; - CNT contor de cicluri ( ρcnt = log 2 n );
183 - SL structura logica pentru activarea si selectarea intrarilor multiplexorului, cat si pentru controlul transportului la sumator; - Sumator- sumator combinational cu n ranguri binare. Descrierea operarii dispozitivului se poate face cu ajutorul urmatoarei organigrame: Start RD Deinmultit AC Inmultitor CNT log 2 n T n MQ n T 0 MQ q 0 MQ AC; AC n T 0 0,1 MQ 0,MQ q 0,0; 1,1 AC ADD(AC,RD) AC SUB(AC,RD) CNT DEC(CNT) CNT = 0? DA Z = AC,MQ (n-1:1) NU AC,MQ,MQ q AC 0, AC,MQ Stop
184 Programul AHPL: MODULE: Dispozitiv_de_inmultire MEMORY: RD[n]; AC[n]; MQ[n]; MQ q ; CNT[ log 2 n ] INPUTS: X[n]; Y[n] OUTPUTS: Z[2n-1] // se considera operanzii X si Y adusi in RD si AC 1. MQ AC; MQ q 0; CNT log 2 n T n 2. AC n T 0 3. (MQ 0 MQ q, MQ 0 MQ q, MQ 0 MQ q, MQ 0 MQ q )/(6, 4, 5, 6) 4. AC ADD(AC,RD) (6) 5 AC SUB(AC,RD) 6 CNT DEC(CNT) 7 ( /CNT, /CNT )/(9,8) 8 AC,MQ,MQ q AC 0, AC,MQ (3) 9 ENDSEQ Z = AC,MQ (n-1:1) END In continuare se va prezenta un program Verilog pentru simularea unui dispozitiv de inmultire. //Simularea unui dispozitiv de inmultire a numerelor reprezentate in complementul fata de doi, //folosind Algoritmul lui Booth module inmultitorb; parameter n=8; reg [n-1:0] RD,AC,MQ; reg [2*n-1:0] Z; reg [2:0] CNT; reg MQq; initial begin: init AC=-7;RD=-5;MQ=0;MQq=0;CNT=n-1; $display("timp RD AC MQ MQq CNT");
185 $monitor("%0d %b %b %b %b %b",$time,rd,ac,mq,mqq,cnt); wait (CNT==0) begin $monitor("produs= %b",{ac[n-1],ac,mq[n-1:1]}); #1 $stop; end end always begin #1; MQ=AC; #1; AC=0; while(cnt>0) begin case({mq[0],mqq}) 2'b00:begin #1;{AC,MQ,MQq}={AC[n-1],AC,MQ}; end 2'b01: begin #1;AC=AC+RD; #1;{AC,MQ,MQq}={AC[n-1],AC,MQ}; end 2'b10: begin #1;AC=AC-RD; #1;{AC,MQ,MQq}={AC[n-1],AC,MQ}; end 2'b11: begin #1;{AC,MQ,MQq}={AC[n-1],AC,MQ}; end endcase
186 #1;CNT=CNT-1; end end endmodule Veriwell -k C:\Program Files\VeriWell\exe\VeriWell.key -l C:\Program Files\VeriWell\exe\VeriWell.log inmultitorb.v VeriWell for Win32 HDL <Version 2.1.1> Tue Dec 19 16:26: This is a free version of the VeriWell for Win32 Simulator Distribute this freely; call VERIWELL for ordering information See the file "!readme.1st" for more information. Copyright (c) Wellspring Solutions, Inc. All rights reserved Memory Available: 0 Entering Phase I... Compiling source file : inmultitorb.v The size of this model is [3%, 2%] of the capacity of the free version Entering Phase II... Entering Phase III... No errors in compilation Top-level modules: inmultitorb //Cazul: RD = 5; AC = 7; timp RD AC MQ MQq CNT
187 Produs= Stop at simulation time 19 C1> $finish; Top-level modules: inmultitorb // Cazul: RD = 5; AC = -7; timp RD AC MQ MQq CNT Produs= Stop at simulation time 20 C1> $finish; // Cazul: RD = -5; AC = -7; timp RD AC MQ MQq CNT
188 Produs= Stop at simulation time 20 C1> 2.3.Impartirea. Ca regula generala, impartirea numerelor se realizeaza prin scaderea repetata a impartitorului, deplasat spre dreapta cu un rang, din restul de la scaderea precedenta, pana la obtinerea unui rest egal cu zero sau mai mic decat impartitorul; ca prim rest se considera deimpartitul. In general se practica doua metode: - metoda bazata pe refacerea ultimului rest pozitiv (metoda cu restaurare) si - metoda in care nu se reface ultimul rest pozitiv (metoda fara restaurare). Pentru prima metoda se prezinta exemplul urmator, in care deimpartitul este 22, iar impartitorul este 9: 22 : 9 = q 0, q -1 q q 0 = : 9 = 2, q -1 = 4 q -2 = 4
189 Cea de-a doua metoda pleaca de la ideea ca, in loc de a scadea impartitorul deplasat la dreapta cu un rang, din ultimul rest pozitiv, se va aduna impartitorul deplasat la dreapt, la la ultimul rest negativ. Metoda se va ilustra prin exemplul de mai jos: 22 : 9 = q 0, q -1 q q 0 = q -1 = 6 q -2 = Catul va avea forma: 3, , in care termenii cu bara sunt negativi [3, (-6)5(-6)5(-6)], ceea ce va impune efectuarea unei corectii care va aduce rezultatul la forma: 22 : 9 = 2,44444 Multima metoda necesita un numar mai mare de pasi, astfel incat, in continuare se va examina implementarea metodei bazata pe restaurarea ultimului rest pozitiv. Algoritmul impartirii numerelor reprezentate in complementul fata de doi, cu restaurarea ultimului rest pozitiv. Pentru ilustrarea algoritmului se vor considera urmatoarele resurse hardware: - AC acumulator; - RD registrul de date al memoriei; - MQ registrul de extensie a acumulatorului;
190 - CNT registru incrementator, contor de cicluri. Impartitorul Y va fi incarcat in RD, iar deimpartitul X in AC. In MQ se va acumula catul. n-1 RD 0 n-1 AC 0 n-1 MQ 0 CNT Descrierea algoritmului: 1. Se deplaseaza continutul lui RD cu p ranguri spre stanga, in conditiile in care 2 p este prima incercare de multiplu binar al impartitorului. Se verifica daca RD = 0, in caz afirmativ operatia se termina cu semnalizarea unei erori. Daca RD 0, se incarca CNT cu vectorul binar avand valoarea p. 2. Daca deimpartitul si impartitorul au semne identice/diferite se scade/se aduna impartitorul din/la deimpartit, pentru a obtine restul. 3. a) Daca restul si deimpartitul au semne identice sau restul este egal cu zero, se introduce o unitate in bitul cel mai putin semnificativ a lui MQ, iar restul va lua locul deimpartitului. b) Daca restul si deimpartitul au semne diferite si restul curent nu este zero, se introduce un zero in bitul cel mai putin semnificativ al lui MQ, fara a mai modifica deimpartitul. 4. Se deplaseaza continutul registrului imparitorului cu un rang spre dreapta, extinzand rangul de semn. Se decrementeaza CNT. Se deplaseaza MQ spre stanga cu un bit. 5. Se repeta pasii 2-4 pana cand continutul lui CNT devine egal cu zero. 6. Daca deimpartitul si impartitorul au avut semne identice rezultatul se afal in registrul MQ. In cazul in care semnele celor doi operanzi au fost diferite, rezultatul se obtine prin complementarea continutului registrului MQ. Realizarea practica a algoritmului impune introducerea unor resurse hardware suplimentare, fata de AC, RD, MQ, CNT si anume: - R[n] registrul in care se obtine restul curent; - z[1] bistabil in care se stocheaza informatia (1/0) referitoare la semnele identice/diferite ale celor doi operanzi; - e[1] bistabil care semnalizeaza conditia de eroare/non-eroare (1/0); - S unitate logica combinationala, care genereaza semnalul de sfarsit al operatiilor de deplasare spre stanga in registrul RD;
191 S = RD n-1.rd n-2. RD n-3 RD n-1.rd n-2 - F- unitate logica combinationala, care calculeaza identitatea/neidentitatea semnelor operanzilor; F = AC n-1 RD n-1 - V unitate logica combinationala, care verifica semnele operanzilor din acumulator (deimpartit) si din registrul restului curent R; V = AC n-1 R n-1 - U unitate logica combinationala, care verifica existenta unui rest curent egal cu zero; U = R. Structura generala, la nivel de schema bloc, a dispozitivului de impartire: S S n-1 AC 0 n-1 n-2 n-3 RD 0 z F RD MUX RD n-1 ADD 0 n-1 R 0 CNT V U e n-1 MQ 0 Deplasare stanga
192 Programul AHPL pentru dispozitivul de impartire. MODULE: Dispozitiv_de_impartire MEMORY: RD[n]; AC[n]; MQ[n]; R[n]; CNT[ log 2 n ]; z[1]; e[1] INPUTS: X[n]; Y[n] OUTPUTS: Z[n] // se considera operanzii X si Y adusi in AC si RD. 1. MQ n T 0; CNT log 2 n T 0; Z 0; e 0 ( /RD)/(12) // eroare 2. (S)/(4) 3. RD RD n-2:0, 0; CNT INC(CNT) (2) 4. z F 5. R (ADD(AC,RD)! SUB(AC,RD)) * ( F, F ) 6. ( V U )/(8) 7. MQ MQ n-2:0, 0 (9) 8. MQ MQ n-2:0, 1 9. ( /CNT)/(11) 10. RD RD n-1,rd n-1:1 ; CNT DCR(CNT) (5) 11. MQ (MQ! ADD(MQ,1)) * ( z, z ) 12. e ( 0! 1) * ( /RD, /RD) ENDSEQ Z = MQ END
193 3. Operatii aritmetice in virgula mobila. Operatiile aritmetice in virgula mobila vor fi examinate la nivelurile schemei bloc, pentru unitatea aritmetica, si organigramelor pentru adunare/scadere si inmultire. In analiza care urmeaza se considera operanzii de intrare X,Y si rezultatul Z, care vor avea urmatoarele formate: X xs, XE, XF ; Y ys, YE, YF; Z zs, ZE, ZF 3.1. Schema bloc a unitatii aritmetice in virgula mobila. Schema bloc a unitatii aritmetice in virgula mobila, in cazul de fata, se bazeaza pe structura schemei unitatii aritmetice in virgula fixa, la care s-au mai adaugat o serie de resurse, pentru manipularea exponentilor (registre si unitate aritmetica). RE2 RE1 ees UALE Prelucrare exponenti Conditii RD AC MQ es DEP. LOGICA DEP. LOGICA.. UAL Conditii Prelucrari mantise/fractii Partea care prelucreaza exponentii contine urmatoarele resurse:
194 - E1 si RE2 - registre pentru exponenti; - ees- bistabil de extensie a registrului exponentului la stanga; - UALE- Unitate Aritmetica Logica pentru Exponenti. In partea care prelucreaza mantisele/fractiile, fata de resursele hardware pentru prelucrarea in virgula fixa au mai aparut doua circuite de deplasare logica si un bistabil de extensie a acumulatorului la stanga es. Cele doua unitati aritmetice logice sunt prevazute cu circuite logice pentru generarea indicatorilor de conditii si de eroare. Operanzii de prelucrat se afla initial in registrele AC si RD. Din acestea se extrag exponentii (operatia de despachetare), care sunt incarcati in RE1 si RE2. Fractiile sunt deplasate spre stanga in AC si RD, pentru a beneficia de o precizie maxima. Dupa terminarea operatiilor asupra exponentilor si fractiilor, are loc o insertie (operatia de impachetare) a exponentului rezultatului in registrul AC, prin deplasarea fractiei din AC spre dreapta.
195 3.2 Organigrama adunarii/scaderii in virgula mobila. ZE XE- YE > < ZE: 0 ZE XE- YE = Da Dif exp> dim F Dif exp> dim F Da Z X Nu Nu Z Y Deplaseaza YE Deplaseaza XE Iesire Iesire ZE XE ZE YE Aduna fractiile Da Exponent maxim? Da Depasire superioara? Nu Pozitioneaza eof Iesire Pozitioneaza semn, deplaseaza fractia, incrementeaza exponent Da Suma zero? Nu Da Normalizat? Iesire Pozitioneaza zero curat Nu Exponent minim? Da Deplaseaza fractia, decrementeaza exponent Nu Pozitioneaza euf Iesire
196 3.3. Organigrama inmultirii in virgula mobila. Da Operand zero? Pozitioneaza zero curat Aduna exponentii Exp eof? Da Pozitioneaza eof Nu iesire cu Exp euf? Da Pozitioneaza euf eroare Da Restaureaza exponentul deplasat Valoarea absoluta a fractieilor Inmulteste fractiile Pozitioneaza semnul produsului Da Nu Prod <0? Complementeaza produs Normalizat? Nu Exp euf? Da Nu Decrementeaza exponent. Deplaseaza fractie Iesire
197 Intarzierile in circuitele numerice. Tehnologia CMOS - tehnologia de baza. CMOS: Semiconductor Metal Oxid Complementar. - Tranzistor NMOS (Semiconductor Metal Oxid de tip N) - Tranzistor PMOS (Semiconductor Metal Oxid de tip P) Tranzistorul NMOS - Tranzistorul conduce daca la poarta lui se aplica un potential electric ridicat (Vdd) - Tranzistorul este blocat daca la poarta lui se aplica un potential electric coborat (GND) Tranzistorul PMOS - Tranzistorul este blocat daca la poarta lui se aplica un potential electric ridicat (Vdd) - Tranzistorul conduce daca la poarta lui se aplica un potential electric coborat (GND) Componentele de baza: Inversorul CMOS
198 Componentele de baza: Portile logice Porti logice: comparatie. a) Daca tranzistoarele PMOS sunt rapide: - Se recomanda conectarea lor in serie - Se prefera poarta NOR - Se prefera, de asemenea, NOR daca tranzitia H L este mai critica decat tranzitia L H. b) Daca tranzistoarele NMOS sunt rapide: - Se recomanda conectarea lor in serie - Se prefera poarta NAND - Se prefera, de asemenea, NAND daca tranzitia L H este mai critica decat tranzitia H L. Comportarile ideala si reala. a) Cand intrarea 0 1, iesirea 1 0, dar NU instantaneu. - Iesirea efectueaza tranzitia 1 0 : tensiunea de iesire tranziteaza de la Vdd (5V) la 0V. b) Cand intrarea 1 0, iesirea 0 1 dar NU instantaneu. - Iesirea efectueaza tranzitia 0 1 : tensiunea de iesire tranziteaza de la 0V la Vdd (5V). c) Tensiunea nu se modifica instantaneu.
199 Analogia temporala cu fluidul. - Apa Sarcina Electrica; Capacitatea Rezervorului Capacitatea (C). - Nivelul Apei Tensiunea; Debitul Apei Curentul (Sarcina/Timp). - Dimensiunea Conductelor; Conductanta Tranzistoarelor (G). - Timpul de umplere a rezervorului este proportional cu C/G. Conectarea in serie a portilor. - Intarzierea Totala de propagare = Suma Intarzierilor Individuale = d1 + d2 - Capacitatea C1 are doua componente: Capacitatea firelor care leaga cele doua porti Capacitatea de intrare a celui de-al doilea inversor.
200 Calculul intarzierilor. - Suma intarzierior pe caile seriale - Intarzierea (Vin V2) Intarzierea (Vin V3) Intarzierea (Vin V2) = Intarzierea (Vin V1) + Intarzierea (V1 V2) Intarzierea (Vin V3) = Intarzierea (Vin V1) + Intarzierea (V1 V3) - Drumul Critic = Calea cea mai lunga dintre cele N cai paralele - C1 = Capacitatea C a firelor + Cin a portii G2 + Cin a portii G3 Modelul general al intarzierii in circuitele combinationale. - O Celula Logica Combinationala (simbol) este complet specificata prin: Comportarea functionala (intrare iesire): Tabele de adevar, ecuatii logice, VHDL, Verilog etc. Factorul de incarcare pentru fiecare intrare. Intarziere critica in propagarea de la fiecare intrare la fiecare iesire, pentru fiecare tranzitie: T HL (A,O) = Intarzierea interna fixa + Intarzierea dependenta de sarcina sarcina - Modelul liniar
201 Caracterizarea unei porti. - Capacitatea de intrare pentru fiecare intrare. - Pentru fiecare cale intrare-iesire se considera, pentru fiecare tip de tranzitie: H L, L H, H Z, L Z etc: o Intarzierea interna (ns) o Intarzierea dependenta de sarcina (ns/ff) - Exemplu: Poarta NAND cu 2 Intrari Exemplu: Multiplexor 2:1. - Sarcina capacitiva de Intrare (1 S.I.): A,B: S.I. (NAND) = 61 ff S: S.I. (INV) + S.I. (NAND) = 50 ff + 61 ff = 111 ff - Intarzierea Dependenta de Sarcina (I.D.S.): identica cu cea a portii G3: TAYlhf = 0,0021 ns/ff TAYhlf = 0,0020 ns/ff TBYlhf = 0,0021 ns/ff TBYhlf = 0,0020 ns/ff TSYlhf = 0,0021 ns/ff TSYhlf = 0,0020 ns/ff - Intarzierea Interna (I.I.): A la Y: I.I.G1 + (C.Fir1 + S.I.G3)*I.D.S.G1 + I.I.G3 B la Y: I.I.G2 + (C.Fir2 + S.I.G3)*I.D.S.G2 + I.I.G3 S la Y (cazul cel mai defavorabil): I.I.Inv + (C.Fir0 + S.I.G1)*I.D.S.Inv + I.I.A la Y - Efectul C.Fir1 se poate aproxima prin: presupunerea ca Fir1 are o capacitate egala cu capacitatile C ale portilor conectate la el - Exemplu de calcul al I.I.: TAYlh = TPhl G1 +(2.0*61 ff) * TPhlf G1 + TPlh G3 = 0.1ns ff*0,0020 ns/ff + 0,5 ns = 0,844 ns
202 Abstractie: Multiplexor 2:1. - Sarcina de Intrare: A = 61 ff, B = 61 ff, S = 111 ff - Intarzierea dependenta de sarcina: TAYlhf = 0,0021 ns/ff TAYhlf = 0,0020 ns/ff TBYlhf = 0,0021 ns/ff TBYhlf = 0,0020 ns/ff TSYlhf = 0,0021 ns/ff TSYhlf = 0,0020 ns/ff - Intarzierea Interna: TAYlh = TPhl G1 +(2.0*61 ff) * TPhlf G1 + TPlh G3 = 0.1ns ff*0,0020 ns/ff + 0,5 ns = 0,844 ns - Exercitii: Sa se calculeze: TAYhl, TBYlh, TSYlh, TAYhl. Elemente logice utilizate in cadrul cursului. - NAND2, NAND3, NAND4 - NOR2, NOR3, NOR4 - INV1 (inversor normal) - INV4 (inversor cu capacitate mare de comanda) - XOR2 - XNOR2 - MUX (Multiplexoare rapide) - Sursa de alimentare (Sursa pentru unitati) - GND (Sursa de zerouri) - Bistabile de tip D comandate pe front negativ de ceas Modelul de Sincronizare (Timing) pentru elementele cu memorie. - Setup Time (Timp de Stabilire): Intrarea trebuie sa fie stabila inaintea frontului negativ al semnalului de ceas ceas. - Hold Time (Timp de Mentinere): Intrarea trebuie sa ramana stabila dupa frontul negativ al semnalului de ceas.
203 - Clock-to-Q Time (Timpul Ceas-la-Q): Iesirea nu se poate modifica instantaneu la frontul semnalului de ceas Ca si la portile logice exista doua componente ale intarzierii: o Intarzierea Interna Clk-to-Q o Intarzierea dependenta de sarcina Clk-to-Q. Pentru exemplificare se considera Setup = 1ns, Hold = 0,5ns. Metodologia de Sincronizare (Clocking). - Toate elementele de memorare sunt sincronizate cu acelasi semnal de ceas. - In ceea ce priveste blocurile logice combinationale: Toate intrarile sunt actualizate la fiecare semnal de ceas Toate iesirile trebuie sa fie stabile inaintea sosirii urmatorului semnal de ceas. Drumul Critic si Perioada/Ciclul Ceasului. - Drumul Critic: Calea cea mai lenta intre doua elemente de memorare. - Perioada/Ciclul Ceasului este o functie de drumul critic si trebuie sa fie mai mare decat: Clk-to-Q + Intarzierea corespunzatoare Drumului Critic prin Circuitul Combinational + Setup
204 Efectul Alunecarii (Skew) Ceasului asupra Ciclului. - Scenariul cel mai defavorabil pentru Ciclu: Registrul de intrare foloseste CLK1 Registrul de iesire foloseste CLK2 - Ciclul Alunecarea Ceasului Clk-to-Q + Intarzierea cea mai mare + + Setup Ciclul Clk-to-Q + Intarzierea cea mai mare + Setup + + Alunecarea Ceasului Metode pentru reducerea Ciclului. - Reducerea numarului de niveluri logice: - Folosirea metodelor dinamice de sincronizare. - Examinarea Incarcarii: O poarta nu trebuie sa comande mai multe porti. Trebuie evitata comanda unui fir lung de catre o poarta de mici dimensiuni - Folosirea mai multor etaje pentru comanda sarcinilor capacitive mari.
205 Evitarea violarii timpului Hold. - Cerinta pentru Timpul Hold: Intrarea registrului nu trebuie sa se schimbeimediat dupa modificarea ceasului. - Aceasta se poate realiza usor in schemele de sincronizare pe fronturi de ceas. - Timpul Hold, pentru cele mai multe bistabile, este 0 ns. - CLK-to-Q + Intarzierea pe Calea cea mai scurta > Timpul Hold. Efectul Alunecarii Ceasului asupra Timpului Hold. - Scenariul cel mai defavorabil pentru Timpul Hold: Registrul de Intrare (FF1) este sincronizat cu CLK2 Registrul de Iesire(FF2) este sincronizat cu CLK1 Iesirea lui FF2 rapid nu trebuie sa modifice intrarea lui FF1, pe aceeasi tranzitie a ceasului. - (CLK-to-Q + Intarzierea pe calea cea mai scurta Alunecarea Ceasului) > Timpul Hold
206 OPERATIILE ARITMETICE 1. Procesorul Aritmetic. Un procesor aritmetic reprezinta un dispozitiv capabil sa efectueze operatii simple sau complexe asupra unor operanzi furnizati in formate corespunzatoare. Ca exemple se pot da: - Unitatea Aritmetica simpla; - Incrementatorul; - Dispozitivul pentru Transformata Fourier Rapida etc. Procesorul Aritmetic poate fi examinat atat din punctul de vedere al utilizatorului, cat si al proiectantului. 1. Din punctul de vedere al utilizatorului, procesorul aritmetic reprezinta o cutie neagra, cu un numar de intrari si iesiri, capabila sa efectueze o serie de operatii asupra unor operanzi cu formate specificate. Rezultatele se obtin intr-un timp care depinde de tipul operatiei si de formatul operanzilor si sunt insotite de indicatorii de conditii. Operanzi: X, Y Operatia: * Formate: φ Procesor Aritmetic Timp: T(*,φ) Rezultat: Z Conditii: C i Singularitai: S i Intrari: - una sau mai multe marimi numerice: X, Y; - un simbol al operatiei, operatorul: *; - un simbol de format: φ. Operanzii de la intrare sunt caracterizati prin trei proprieteti: - apartin unei multimi finite M de marimi numerice, caracterizate printr-o gama: X min X X max - sunt cunoscute cu o precizie data: X - X l X X + X h
207 - sunt reprezentate cu ajutorul unor simboluri/cifre, in cadrul unui sistem de numeratie, sub forma unor n-tupluri: x n-1 x n-2. x 1 x 0, care sunt interpretate ca marimi/valori numerice, pe baza unor reguli date. Operatorii sunt codificati cu ajutorul unor simboluri *, care corespund unui set redus sau extins de operatii aritmetice: {+, -,, : } Formatul. Atunci cand sunt posibile mai multe formate, pentru reprezentarea operanzilor, acest lucru poate fi specificat la intrarea format, printr-un simbol dat φ. Iesiri: - una sau mai multe marimi numerice Z, care reprezinta rezultatul; - unul sau mai multe simboluri C i, reprezentand conditiile in care apare rezultatul; - unul sau mai multe simboluri S i, reprezentand singularitati. Iesirile numerice poseda aceleasi proprietati ca si operanzii de la intrare: gama, precizie si reprezentare. Conditiile specifica caracteristici ale rezultatului: < 0, = 0, > 0 etc. Singularitatile sunt asociate cu situatiile in care rezultatul obtinut este invalid: - depasire: rezultatul depaseste posibilitatile hardware de reprezentare a numerelor, in sistemul numeric dat; - pierderea excesiva de precizie, la operatiile in virgula mobila; - erori datorate hardware-lui. In aceste situatii apare un pseudo-rezultat Z(S i ), impreuna cu singularitatea S i, care sunt tratate atat prin hardware, cat si cu ajutorul unor rutine specifice ale sistemului de operare. Timpul de operare T(*) este dat pentru fiecare operatie (*), efectuata de catre procesor. Timpul de operare, in unele cazuri, poate fi variabil: T(*) min T(*) T(*) max Observatii: - definitia data procesorului aritmetic cuprinde un spectru larg de cutii negre, de la un contor simplu (ADD-ONE), pana la un generator de functii trigonometrice sau un procesor FFT.
208 - structura interna este specificata in termenii timpului asociat cu executia diferitelor operatii, cat si cu formatul de reprezentare a datelor. 2. Din punctul de vedere al proiectantului intereseaza specificarea detaliata a structurii interne. Aceasta specificare trebuie sa considere: - algoritmii aritmetici (proiectarea aritmetica), - structura logica a procesorului (proiectarea logica). Proiectarea aritmetica pleaca de la specificatiile date de catre utilizator si le transforma in specificatii de operatii aritmetice detaliate la nivel de ranguri individuale/bit, in cadrul reprezentarii concrete a datelor. Aceste specificatii, la nivel de rang individual, reprezinta, in continuare, datele initiale (tabele de adevar, diagrame etc) pentru proiectarea logica. Proiectarea logica pleaca de la specificatiile furnizate de catre proiectarea aritmetica si, in cadrul unei tehnologii date, selecteaza tipurile de circuite logice, pe care le interconecteaza, in mod corespunzator, in vederea implementarii operatiilor aritmetice impuse de catre algoritmii aritmetici. In cazul in care algoritmii aritmetici nu se pot executa intr-un singur pas, se proiecteaza secvente, constand in pasi aritmetici elementari, efectuati sub controlul unor semnale de comanda. Astfel, proiectantul logic trebuie sa elaboreze atat proiectul unitatii de executie, cat si proiectul unitatii de comanda. Specificatiile de tip black box, pentru proiectarea unui procesor aritmetic, se obtin prin transformarea specificatiilor date de catre utilizator, astfel incat, ele sa corespunda posibilitatilor de implementare. In acest context trebuie sa se aibe in vedere ca: - datele se reprezinta sub forma unor vectori binari; - la baza circuitelor, care efectueaza operatiile aritmetice, se afla circuite logice, ce opereaza cu semnale binare. Avand in vedere cele de mai sus: - intrarile X si Y vor deveni: X x n-1 x n-2. x 1 x 0, Y y n-1 y n-2. y 1 y 0, - operatorul (*) va fi codificat printr-un cod de operatie: Ω ω n-1 ω n-2.. ω 1 ω 0, care va indica atat operatia, cat si formatul. - iesirile reprezinta vectori numerici:
209 Z z n-1 z n-2. z 1 z 0, rezultatul; C c p-1 c p-2. c 1 c 0, indicatorii de conditii S s q-1 s q-2. s 1 s 0, indicatorii de pseudorezultat. In continuare se vor examina operatiile aritmetice in virgula fixa si in virgula mobila. 2. Operatiile aritmetice in virgula fixa Adunarea si scaderea. Operatiile de adunare si scadere ale numerelor in virgula fixa se implementeaza, in majoritatea covarsitoare a cazurilor, cu numere reprezentate in complementul fata de doi. Astfel, operatiile de adunare si scadere se reduc la operatia de adunare a codurilor complementare ale celor doi operanzi. Adunarea se efectueaza rang cu rang, incepand cu rangurile mai putin semnificative, inclusiv rangurile de semn. Transportul, care apare la stanga rangului de semn, se neglijeaza. Fie operanzii: x = +/- x n-2. x 1 x 0, y = +/- y n-1 y n-2 y 1 y 0, in conditiile : -2 n-1 x 2 n n-1 y 2 n-1-1 La adunarea/scaderea celor doi operanzi, de mai sus, apar urmatoarele situatii: a) x > 0, y > 0, dar x + y 2 n-1 1 [x] c + [y] c = x + y = [x + y] c Exemplu: [+3] c + [+2] c = = 0101 = [0101] c b) x <0, y > 0, dar 0 < x + y 2 n-1 1 [x] c + [y] c = 2 n - x + y = [x + y] c transport, se neglijeaza > 0 Exemplu: [-6] c + [+7] c = = = = = 0001 transport, se neglijeaza
210 c) x <0, y > 0, dar x + y < 0 [x] c + [y] c = 2 n - x + y = [x + y] c < 0 Exemplu: [-7] c + [+6] c = = = = [1111] c d) x <0, y < 0, dar x + y 2 n-1 1 [x] c + [y] c = 2 n - x + 2 n - y = [x + y] c transport, se neglijeaza < 0 Exemplu: [-3] c + [- 2] c = = = = = [1011] c transport, se neglijeaza Schema unui sumator/scazator Schema se bazeaza pe utilizarea a doua circuite: XOR (7486) si ADD (7483) D 1 A[4] B[4] Operatia Descrierea Comanda D Ω ADD Z = C4,ADD(A,B) SUB Z = C4,SUB(A,B) 1 C C0 1 Codul de operatie specifica operatorul: D Ω 4 Z[4] care ia valorile 0 pentru + si 1 pentru -
211 Pozitionarea indicatorilor de conditii. Indicatorii de conditii specifica o serie de proprietati ale rezultatului, care apare in registrul acumulator al rezultatului AC. De regula, ei sunt stocati in bistabile notate cu mnemonice, care formeaza un registru, incorporat in cuvantul de stare al programului/procesului. Indicatorii de conditii specifica diverse situatii: - rezultat = 0 - mnemonica Z, ( Z / AC ); - semnul rezultatului > 0 sau < 0 - mnemonica S, ( S AC n-1 ); - aparitia transportului, la stanga rangului de semn, mnemonica C, (C n 1); - rezultatul verificarii paritatii - mnemonica P, ( P / AC ). Pozitionarea indicatorilor de pseudo-rezultat. Printre situatiile care conduc la un pseudo-rezultat, in cazul operarii in virgula fixa, este si aceea cand apare o depasire. Depasirea se manifesta in conditiile in care cei doi operanzi care se aduna au acelasi semn. Daca rezultatul obtinut are un semn diferit de semnul comun, al celor doi operanzi, s-a inregistrat o depasire. Depasirea poate constitui o cauza de intrerupere/suspendare a programului in cadrul careia a aprut. Aceasta situatie este semnalizata sistemului de operare, in vederea luarii unei decizii corespunzatoare. Situatia de depasire se semnaleaza prin generarea unui semnal D egal cu suma modulo doi intre transportul in rangul de semn si transportul in afara rangului de semn, in cadrul registrului acumulator, al rezultataului: D C n C n-1 Implementari. Operatia de adunare pe un singur rang se realizeaza prin generarea sumei si a transportului, folosind circuitele logice necesare realizarii fizice a expresiilor logice de mai jos: Cout i = (x i. Cin i ) (y i. Cin i ) (x i. y i ) Sum i = (x i. y i. Cin i ) (x i. y i. Cin i ) (x i. y i. Cin i ) (x i. y i. Cin i ), se concretizeaza intr-un circuit de tip schema bloc, denumit SUM, prezentat in continuare:
212 Ciin Xi Yi CI A0 SUM Z0 B0 CO 4 5 Rezi Ciout Cu ajutorul sumatorului la nivel de bit se poate realiza un sumator pe n biti: Cin 1 X0 2 Y0 3 CI A0 B0 Z0 CO 4 5 Rez0 X1 Y CI A0 B0 Z0 CO 4 5 Rez1 Xn-1 Yn CI A0 B0 Z0 CO 4 Rez(n-1) 5 Cout Sumatorul la nivel de bit poate fi extins si cu operatiile logice SI/AND, SAU/OR, ca in figura de mai jos, in cadrul careia iesiriele sumatorului, circuitului AND si circuitului OR sunt aplicate la intrarile unui multiplexor MUX. Codul de operatie, pentru selectarea operatorului, se forteaza la intrarea Sel, a multiplexorului.
213 Ciin Sel Xi Rez Yi MUX CI A0 SUM Z0 B0 CO 4 5 Ciout In conditiile in care se doreste si implementarea operatiei de scadere, este necesar sa se creeze posibilitatea inversarii intrarii y i, dupa cum se prezinta in continuare: InvY Ciin Sel Xi 1 Yi 2 Rez 1 2 MUX CI A0 SUM Z0 B0 CO MUX1 Less 4 Inversarea lui y se realizeaza sub controlul semnalului de selectie InvY, aplicat la intrarea de selectie a celui de-al doilea multiplexor Ciout
214 Operatiile ADD, SUB, AND si OR se regasesc in Unitatile Aritmetice Logice ale oricarui procesor. Exista unele procesoare care au implementata instructiunea set-on-less-than, ce se traduce prin forteaza in (1), bitul cel mai putin semnificativ al rezultatului, daca operandul x este mai mic decat operandul y, in conditiile in care toti ceilalti biti ai rezultatului vor fi 0. Astfel, in figura de mai sus a aparut o noua intrare la multiplexor less. Structura poate fi completata cu detalierea schemei UAL, pentru bitul cel mai semnificativ, in care se pune in evidenta depasirea aritmetica. InvY Ciin Sel Xi 1 Yi 2 Rez 1 2 MUX CI A0 SUM Z0 B0 CO MUX1 Less 4 InvY Detectie Depasire Set Depasire Ciout Implementarea operatiei set-on-less-than presupune efectuarea scaderii lui y din x. Daca x < y, se va pozitiona in unu semnul rezultatului, la iesirea sumatorului, adica Sum (n-1). Acest lucru trebuie sa se reflecte insa in fortarea in unu a bitului cel mai semnificativ al rezultatului Rez 0 si in zero a bitilor Rez (n-1).. Rez 1. Aceasta solutie este ilustrata in urmatoarea schema bloc.
215 InvY Cin0 Operatia X0 Y0 Rez0 LESS Cout0 X1 Y1 0 LESS Cout1 Rez Zero X(n-1) Rez(n-1) Y(n-1) 0 LESS Cout(n-1) Depasire Set In figura de mai sus a fost implementa si pozitionarea in 1, an indicatorului de conditii, care specifica aparitia unui rezultat egal cu 0, la iesirea unitatii arimetice logice. Bistabilul Z se pozitioneaza in 1. Sumatoare performante. Sumatorul cu transport succesiv. Tipul cel mai simplu de sumator paralel este sumatorul cu transport succesiv, obtinut prin interconectarea unor sumatoare complete. Ecuatiile pentru transport si suma, la nivelul unui etaj, sunt date mai jos: Cout i = (x i. Cin i ) (y i. Cin i ) (x i. y i ) Sum i = (x i. y i. Cin i ) (x i. y i. Cin i ) (x i. y i. Cin i ) (x i. y i. Cin i ), Se poate observa ca cele doua functii combinationale se implementeaza pe doua niveluri logice. In conditiile in care intarzierea pe un nivel logic este t, rezulta ca intarzierea minima pe rang va
216 fi 2. t. Intrucat, in cazul cel mai defavorabil, transportul se propaga de la rangul cel mai putin semnificativ pana la iesirea celui mai semnificativ rang, rezulta o intarziere egala cu 2.n. t, unde n este numarul de ranguri. Este evident ca o asemenea solutie nu este acceptabila. Sumatorul cu intarziere minima. Considerand ecuatia sumei, Sum 0, de la iesirea celui mai putin semnificativ rang, se incearca stabilirea unei expresii a acesteia ca functie de intrarile pentru rangul curent (n-1), cat si de intrarile pentru rangurile mai putin semnificative (n-2),,1,0. In acest mod se va obtine o expresie logica implementabila in doua trepte. Sum 0 = [x 0. y 0. Cin 0 ] [x 0. y 0. Cin 0 ] [x 0. y 0. Cin 0 ] [x 0. y 0. Cin 0 ] Pentru iesirea, care reprezinta transportul, din rangul 0 s-a inlocuit Cout 0 cu Cin 1, pentru a simplifica relatiile, care urmeaza a se obtine. Cin 1 = [x 0. Cin 0 ] [y 0. Cin 0 ] [x 0. y 0 ] Pentru rangul urmator 1, se obtine urmatoarea expresie a sumei: Sum 1 = [x 1. y 1. Cin 1 ] [x 1. y 1. Cin 1 ] [x 1. y 1. Cin 1 ] [x 1. y 1. Cin 1 ] In expresia lui Sum 1 se va inlocui Cin 1 cu componentele care-l alcatuiesc, conform formulei precedente. Calculul lui Cin 1 conduce la urmatoarea expresie: Cin 1 = [x 0. Cin 0 ] [y 0. Cin 0 ] [x 0. y 0 ], Astfel, pentru Sum 1 se va obtine o expresie formata prin adunarea logica a 12 produse logice de cate 4 variabile fiecare.aceasta presupune utilizarea unei porti OR cu 12 intrari si a 12 porti AND, cu cate 4 intrari. Extinzand procedeul la urmatoarele ranguri se vor obtine expresii cu numerosi termeni de tip produs, care, la randul lor, vor avea multe componente. Un calcul simplu arata ca, in cazul unui sumator pe 64 de biti, vor fi necesare circa porti, practic de nerealizat in prezent. Principiul anticiparii transportului. Intrucat sumatorul cu transport succesiv este lent, iar sumatorul cu intarziere minima este imposibil de realizat, se cauta o solutie intermediara. Aceasta grupeaza relatiile obtinute la sumatorul cu intarziere minima, astfel incat sa se obtina dimensiuni rezonabile.
217 Ideea de baza este aceea de a caracteriza comportarea unui rang al sumatorului din punctul de vedere al generarii/propagarii unui transport. Astfel, rangul j al unui sumator genereaza, G j, transport daca are loc relatia: G j = x j. y j De asemenea, rangul j al unui sumator propaga, P j, transport in situatia de mai jos: P j = x j y j = (x j. y j ) (x j. y j ). In aceste conditii se pot elabora noi expresii pentru transportul C (j+1) si pentru suma Sum j, la nivelul fiecarui rang al sumatorului:. C (j+1) = G j (P j. C j ) Sum j = (P j. C j ) (P j. C j ) Astfel, un sumator complet va consta in doua parti: partea P/G si partea Sum Partea P/G Partea Sum /Xj /Yj Sumj Xj 1 2 Yj 1 2 Gj Pj Cj Relatiile de mai sus se pot structura la nivelul a 4 sectiuni ale unui sumator, bazat pe ideea mentionata anterior. Incepand cu rangul cel mai putin semnificativ se obtin: - pentru sume: Sum 0 = (P 0. C 0 ) (P 0. C 0 ) Sum 1 = (P 1. C 1 ) (P 1. C 1 ) Sum 2 = (P 2. C 2 ) (P 2. C 2 ) Sum 3 = (P 3. C 3 ) (P 3. C 3 ), si:
218 - pentru transporturi: C 1 = G 0 (P 0. C 0 ) C 2 = G 1 (P 1. C 1 ) = G 1 (P 1. G 0 ) (P 1. P 0. C 0 ) C 3 = G 2 (P 2. C 2 ) = G 2 (P 2. G 1 ) (P 2. P 1. G 0 ) (P 2. P 1. P 0. C 0 ) C 4 = G 3 (P 3. C 3 ) = G 3 (P 3. G 2 ) (P 3. P 2. G 1 ) (P 3. P 2. P 1. G 0 ) (P 3. P 2. P 1. P 0. C 0 ) Aceste relatii sunt implementate in unitatea de anticipare a transportului UAT. Pentru o sectiune de 4 biti, sumatorul cu transport anticipat arata astfel: Sum 3 x 3 y 3 Sum 2 x 2 y 2 Sum 1 x 1 y 1 Sum 0 x 0 y 0 Sum3 P/G 3 Sum2 P/G 2 Sum1 P/G 1 Sum0 P/G 0 GP C 3 P 3 G 3 C 2 P 2 G 2 C 1 P 1 G 1 C 0 P 0 G 0 Logica de Anticipare a Transportului C 0 GG Efectuand un calcul al intarzierii, se obtine, pe 4 biti de sumator, o intarziere de 6. t, in comparatie cu intarzierea de 8. t, pentru sumatorul cu transport succesiv. Din schema bloc, de mai sus, rezulta ca Logica de Anticipare a Transportului mai genereaza doua semnale la nivel de grup. Grupul consta intr-un ansamblu de patru ranguri de sumator. Astfel, grupul poate genera transport (GG =1) sau poate propaga transport (GP = 1). Ideea anticiparii transportului se poate fi extinsa atat la nivel de grup, cat si la nivel de sectiune (ansamblu de patru grupuri), realizand o structura piramidala de UAT-uri. Unitatile de anticipare la nivel de grup si la nivel de sectiune sunt identice cu logica de anticipare a transportului la nivelul sumatorului cu patru biti. Analiza performantelor arata ca in cazul unui sumator pe 16 biti, cu transport de grup, se inregistreaza o intarziere de 8. t, fata de intarzierea de 32. t, pentru sumatorul cu transport succesiv. In cazul unui sumator pe 64 de biti, in situatia anticiparii transportului pe sectiuni, se obtine o intarziere maxima de 14. t, comparativ cu intarzierea de 128. t, pentru sumatorul cu transport succesiv.
219 Se poate aprecia ca numarul de terminale de intrare si iesire ale portilor poate reprezenta un criteriu de cost, intr-o implementare data. Comparatia cost/performanta pentru cele doua implementari, de mai sus, arata ca in cazul unui sumator pe 64 de biti, la o crestere a numarului de terminale cu 50%, pentru solutia cu transport anticipat, se obtine o viteza de 9 ori mai mare, decat in cazul transportului succesiv. Sumatorul cu salvare a transportului. In cazul adunarii mai multor vectori binari simultan se poate recurge la o schema mai rapida, constand in utilizarea mai multor sumatoare in cascada. Fie cazul adunarii a patru numere de cate 4 biti, notate cu a, b, e, f. Rangurile numerelor b, e, f se vor aduna intr-un sumator cu salvare a transportului, care va avea iesiri pentru suma si transport. Acestea, la randul lor, se vor aduna cu rangurile numarului a, intr-un alt sumator cu salvare a transportului. Iesirile reprezentand rangurile sumei si rangurile transportului se vor aduna intr-un sumator obisnuit. a b e f Sumator cu salvare a transportului Sumator cu salvare a transportului C S Sumator obisnuit Sum Detaliile de implementare sunt lasate pe seama cititorului. Comparatie intre cateva tipuri de sumatoare, pe n biti, in privinta intarzierii si a ariei ocupate: Tip sumator Intarziere Aria ocupata Transport succesiv 2.n. t 9.n Intarziere minima 2. t 2 (2n+1) /(2n+1) Transport anticipat 2.(log 2 n + 1). t 7.n + 22.log 2 n
220 Secvente de microinstructiuni pentru controlul operatiilor in Unitatea de Executie AMD M I 8 I 7 I 6 M I 2 I 1 I 0 C n I 5 I 4 I 3 A 3 A 2 A 1 A 0 B 3 B 2 B 1 B 0 D 3 D 2 D 1 D 0 U Selectie U Selectie Operatie Adresa A Adresa B Data D X destinatie X sursa UAL 1 2 Observatii Descrierea microinstructiunilor individuale la nivel de mnemonice LOAD R 0, 02H READ R LOAD R 1, 04H ROTUP R ROTDWN R CLR Q DBLROTUP R 1,Q DBLROTDWN R 1,Q NOP CLR R INCR R DCR R LOAD R 3, 05H ADD R 1, R 3
221 Secvente de microinstructiuni pentru controlul operatiilor in Microsecventiatorul AMD2909 Adresa de memorie, in memoria de control R 3 R 2 R 1 R 0 P 3 P 2 P 1 P 0 Adresa de Obtinerea µi salt urmatoare Observatii Descrierea microinstructiunilor individuale la nivel de mnemonice JR 09H JR 00H JR 0AH JR 06H A CONT B CONT C CONT D CONT E CONT F JR 03H Secventa: 0, 9, 6, A, B, C, D, E, F, 3, 0, 9, 6,.etc.
222 Secvente de microinstructiuni pentru controlul operatiilor in Microsecventiatorul AMD2909 Adresa de memorie, in memoria de control R 3 R 2 R 1 R 0 P 3 P 2 P 1 P 0 Adresa de Obtinerea µi salt urmatoare Observatii Descrierea microinstructiunilor individuale la nivel de mnemonice CONT CONT PUCONT CONT CONT CONT CONT CONT CONT CONT C CONT D CONT E JSTV Ciclare in microprogram. Secventa: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, 3, 4, 5,.etc.
223 Secvente de microinstructiuni pentru controlul operatiilor in Microsecventiatorul AMD2909 Adresa de memorie, in memoria de control R 3 R 2 R 1 R 0 P 3 P 2 P 1 P 0 Adresa de Obtinerea µi salt urmatoare Observatii Descrierea microinstructiunilor individuale la nivel de mnemonice CONT CONT CONT JSR 0CH CONT CONT JR 00H C CONT D CONT E RS Salt la subrutina Secventa: 0, 1, 2, 3, C, D, E, 4, 5, 6, 0, 1, 2, 3, C, D,.etc.
224 Microsubrutine imbricate µp Principal µsub 0 µsub 3 D CONT 0 JSR 0CH 3 JSR 0CH E JSR 00H 1 JSR 06H 4 JSR 09H F JR 0DH 2 RS 5 RS µsub 6 µsub 9 µsub C 6 JSR 0CH 9 JSR 0CH C RS 7 JSR 03H A RS 8 RS Spatiul de adresare in memoria de comanda este urmatorul: D, E, 0, 1, 6, D, 7, 3, D, 4, 9, A, 5, 8, 2, F, D etc Microprogramul corespunzator este dat mai jos
225 Secvente de microinstructiuni pentru controlul operatiilor in Microsecventiatorul AMD2909 Adresa de memorie, in memoria de control R 3 R 2 R 1 R 0 P 3 P 2 P 1 P 0 Adresa de Obtinerea µi salt urmatoare JSR 0CH JSR 06H RS JSR 0CH JSR 09H RS JSR 0CH JSR 03H RS CONT A RS C RS D CONT E JSR 00H F JSR 0DH Observatii Descrierea microinstructiunilor individuale la nivel de mnemonice Microsubrutine imbricate. Secventierea adreselor de microinstructiuni: D, E, 0, 1, 6, D, 7, 3, D, 4, 9, A, 5, 8, 2, F, D etc
226 Adr µi R3:0 P3:0 M I8:6 M I2:0 Cn I5:3 A B D 1 0 Observatii Descrierea microinstructiunilor CONT INC R JRC 15 NOP JR 0 NOP CONT NOP (INCREMENT & TEST) CONT LOAD R0, JR 14 LOAD R15, CONT READ R JR 14 READ R15 (INCARCARE & CITIRE/AFISARE)
227 Calculul numarului de unitati continute in cuvintele V0, V1, V2 stocate in trei registre R0, R1, R2, din RAM: 0 LOAD R0, V0 1 LOAD R1, V1 2 LOAD R2, V2 3 LOAD R4, V4 /V4 contine o valoare corespunzatoare numarului de biti explorati la nivel de cuvant 4 CLEAR R3 5 R0 D; D= R0 R0/2; JSRNZF 14 7 R1 D; D= R1 R1/2; JSRNZF 14 9 R2 D; D= R2 R2/2; JSRNZF DCR R4 12 JRZF 5 13 NOP; JR RS; INC R3 15 READ R3; JR 15
228 Adr µi R3:0 P3:0 M I8:6 M I2:0 Cn I5:3 A B D 1 0 Observatii Descrierea microinstructiunilor V0 CONT LOAD R0, V V1 CONT LOAD R1, V V2 CONT LOAD R2, V CONT LOAD R4, CONT LOAD R4, CONT R0 MSK (0001) JSNZF 14 R0 R0/ CONT R0 MSK (0001) JSNZF 14 R1 R1/ CONT R2 MSK (0001) JSNZF 14 R2 R2/ CONT DCR R JRNZF 5 NOP JR 15 NOP RS INC R JR 15 READ R15
229 Implementarea unui contor pe 16 biti. Contorul este realizat prin concatenarea registrelor de cate 4 biti: R3, R2, R1, R0. Se presupune ca microprogramul incepe de la adresa 7: 7 R0 R JRNZF 7 8 JRNZF 7 13 R3 R R1 R JRNZF 7 10 JRNZF 7 15 JR 7 11 R2 R2 + 1 Adr µi R3:0 P3:0 M I8:6 M I2:0 Cn I5:3 A B D 1 0 Observatii Descrierea microinstructiunilor CONT R0 R JRNZF 7 NOP CONT R1 R JRNZF 7 NOP CONT R2 R JRNZF 7 NOP CONT R3 R JR 7 NOP
230 Evaluarea perioadei ceasului. 6 7 Conditii M U X µ Secv. AMD Memorie de control 1 2 6, 4 R µi MUX LSB /G, /P A,B,I,Cn 2901 B CK Y MUX MSB Cn+4 OVR 2901 B F3 Cn YCK F=0 R C o n d Conditii 5 3 /G Cn AMD 2902 Cn+z /P 5 Ceas (CK) CK Registru dr Date
231 Evaluarea intarzierilor in propagarea semnalelor: Unitatea de executie 1. RµI Cesa Iesire 15 ns B A,B /G 0, /P 0 50 ns /G 0, /P 0 Cn+z 10 ns B Cn Cn+4, OVR,Y 29 ns 5. RCond,MUX Intr Ies 21 ns B RAM 3 setup 16 ns Total: 141 ns Unitatea de Comanda. 1. RµI Cesa Iesire 15 ns 6. MUX Selectie Iesire 20 ns Conditii Iesire 45 ns 8. PROM Timpul de Acces 55 ns 1. RµI Setup 5 ns 140 ns Total: 140 ns Ceas (CK)
232
233 Unitati de executie integrate Unitatile de executie se prezinta sub forma unor circuite integrate pe scara medie/larga. De regula ele sunt structurate transe de biti astfel incat, prin concatenare si prin utilizarea unor circuite aditionale, se pot construi sisteme de prelucrare pentru date organizate pe 4, 8, 16, 24, 32, 48 sau 64 de biti. Din punct de vedere structural unitatile de executie sunt constituite dintr-o unitate aritmeticalogica, logica de generare a indicatorilor de conditii, un ansamblu de registre generale, unul sau mai multe circuite de selectie, unn circuit de deplasare si din porturi de acces pentru intrarea/iesirrea datelor. Semnalele de comanda se aplica la intrarile special prevazute, fie codificate pe campuri, fie complet decodificate. Sistemul functioneaza sincron cu un ceas a carui frecventa de tact este conditionata de intarzierile semnalelor in unitatea de executie ( propagarea transportului, timpul de basculare a bistabilelor dintr-o stare in alta etc). Unitatile de executie integrate s-au comercializat in asociatie cu unitatile de comanda corespunzatoare si cu o serie de circuite aditionale, formand ceea ce se chiama microprocesoare pe transe de biti, microprocesoare "bit-slice", microprocesoare "multi-chip" etc. Printre celemai raspindite familii de microprocesoare"bit-slice" s-au aflat si cele produse de compania Advanced Micro Devices, sub numele de AMD In cele ce urmeaza va fi prezentata unitatea de executie AMD 2901 sub aspect structuralfunctional. De asemenea, se vor prezenta modalitatile de realizare a unor unitati de executie pentru prelucrarea datelor pe 16 biti, unitatile de comanda corespunzatoare, cat si elemente privind microprogramarea acestora. Unitatea de executie AMD Unitatea de executie AMD 2901 este organizata pe transe de 4 biti/circuit si este prevazuta cu elementele necesare cuplarii in cascada. Semnalele de comanda se aplica sub forma unor vectori binari la terminalele circuitului, fiind, de regula, preluate sub controlul unui circuit micro-secventiator integrat ( AMD 2909, 2911 ) de la o memorie cu continut permanent. Aceasta solutie se foloseste in cazul unitatilor de comanda microprogramate. Uneori, pentru a mari viteza de operare, in locul unitatii de comanda microprogramate se utilizeaza automate conventionale cu porti, bistabile si registre.
234 Unitatea de executie AMD 2901 dispune de urmatoarele resurse: - un ansamblu de 16 registre generale de cite 4 biti, organizate sub forma unei memorii (RAM) biport, cu doua intrari de adrese, o intrare de date si doua iesiri de date; - o unitate aritmetica-logica, cu transport anticipat, capabila sa efectueze 3 operatii aritmetice binare si 5 operatii logice si sa genereze, atit indicatorii de conditii: depasire, zero, semn, transport (Cn+4), cat si conditiile de propagare (P) si generare(g) ale transportului, la nivelul intregului circuit; - un selector de date (selector surse UAL) pentru cele doua intrari ale unitatii aritmeticelogice, care pot reprezenta combinatii intre iesirile memoriei biport (A,B), o intrare externa de date (D), constanta "zero" si iesirea unui registru su plimentar-extensie (Q); - un selector de iesire din circuit, care furnizeaza prin intermediul unor tampoane TS fie datele de la iesirea A, a memoriei biport, fie datele de la iesirea UAL; - un registru auxiliar-extensie (Q), care poate fi incarcat fie cu datele de la iesirea UAL, fie cu propriul sau continut deplasat stanga/dreapta prin intermediul unei retele logice de deplasare-multiplexor QSHIFT; - o retea de deplasare-multiplexor RAMSHIFT, plasata pe intrarea B a memoriei biport RAM. Indicatorii de conditii trebuie stocati intr-un registru dupa fiecare operatie efectuata de UAL. Circuitul afost realizat in diverse variante tehnologice: AMD 2901, 2901A, 2901B, 2901C, cu sporuri de viteza de 25%, 50% si - respectiv 75%, fata de In figura se prezinta schema bloc a circuitului AMD Continuturile celor 16 cuvinte din RAM pot fi citite la iesirile A si B, pe baza adreselor A si B, fiind stocate in doua circuite tampon/latch. Stocarea are loc pe frontul crescator al semnalului de ceas. Dupa tranzitia negativa a semnalului de ceas, in RAM, in locatia specificata de adresa B, se poate inscrie o noua valoare. Astfel, in cadrul unei perioade de ceas se efectueaza o operatie de citire si o operatie de scriere in RAM. Datele fortate in RAM sunt preluate direct sau deplasate dreapta/stinga, prin intermediul multiplexorului RAMSHIFT, de la iesirea F a UAL. Unitatea aritmetica-logica poate efectua, sub controlul semnalelor I 3:5, trei operatii aritmetice binare si cinci operatii logice, asupra operanzilor aplicati la intrarile R si S.
235 4 RAM 0 RAM 3 Q 0 Q 3 0 RAMSHIFT 3 0 QSHIFT 3 Ceas 4 4 Adrersa A B DATAIN Citire RAM 16 4 Citire/Scriere DATA OUT A B 4 4 CP I 6:8 Adresa B WE 4 Data D F QREG Q I 0:2 D A B 0 Q Selector sursa R S 4 4 C n G, P Cn R S UAL I 3:5 (C n+4, OVR, F=0, F 3 ) 4 4 OE I 6:8 A F Selector Iesire Y Intrarile R si S ale UAL sunt preluate de la iesirile unui circuit selector (Selector sursa UAL), care sub controlul semnalelor I 0:2, din intrarile D (Date externe), A, B, 0 si Q, poate furniza combinatiile AB;AD; AQ; A0; DQ; D0; Q0; BD; BQ; B0. In tabelul de mai jos se prezinta selectia surselor de operanzi pentru UAL.
236 Tab.1. Mnemonica Microcod Codul octal I2 I1 I0 Sursa R S AQ A Q AB A B ZQ Q ZB B ZA A DA D A DQ D Q DZ D Z Intrarea directa D este folosita pentru a introduce date in circuit, in RAM si in registrul Q. Registrul Q este utilizatin operatiilede inmultire si impartire, ca extensie sau ca acumulator/registru in unele aplicatii. Microcodul: I8:0 ( Structura vectorului de comanda ). 9biti I 8:6 I 5:3 I 2:0 Destinatie UAL Functie UAL Sursa UAL Operatiile efectuate de UAL sint prezentate in tabelul de mai jos:
237 Tab. 2. Mnemonica Microcod Cod Functia Simbol octal UAL I5 I4 I3 ADD R Plus S R+S SUBR S Minus R S-R SUBS R Minus S R-S OR R OR S R S AND R AND S R S NOTRS R AND S R & S EXOR R EXOR S R S EXNOR R EXNOR S R S Pe baza informatiilor din tabelele 1 si 2 se pot genera functiile aritmetice si logice realizate de unitatea de executie AMD 2901: AMD 2901 Functiile aritmetice. Tab.3. Microcod octal Cn=0 (Low) Cn=1(High) I5:3,I2:0 Grup Functie Grup Functie 0 0 ADD A+Q ADD Plus1 A+Q A+B A+B D+A D+A D+Q D+Q Pass Q Increment Q B B A A D D Decrement Q-1 Pass Q
238 1 3 B-1 B 1 4 A-1 A 2 7 D-1 D 2 2 Comple- -Q-1 Comple- -Q 2 3 mentul -B-1 mentul -B 2 4 fata de 1 -A-1 fata de 2 -A 1 7 -D-1 -D 1 0 Scadere Q-A-1 Scadere Q-A 1 1 in com- B-A-1 in com- B-A 1 5 plementul A-D-1 plemnetul A-D 1 6 ata de 1 Q-D-1 fata de 2 Q-D 2 0 A-Q-1 A-Q 2 1 A-B-1 A-B 2 5 D-A-1 D-A 2 6 D-A-1 D-Q AMD 2901 Functii logice. Tab.4. Microcod octal Grup I5:3,I2:0 Functie 4 0 AND A Q 4 1 A B 4 5 D A 4 6 D Q 3 0 OR A Q 3 1 A B 3 5 D A 3 6 D Q 6 0 EXOR A Q
239 6 1 A B 6 5 D A 6 6 D Q 7 0 EXNOR A Q 7 1 A B 7 5 D A 7 6 D Q 7 2 INVERT Q 7 3 B 7 4 A 7 7 D 6 2 PASS Q 6 3 B 6 4 A 6 7 D 3 2 PASS Q 3 3 B 3 4 A 3 7 D 4 2 "ZERO" MASK A Q 5 1 A B 5 5 D A 5 6 D Q Campul "Destinatie UAL" (I 8:6 ) din vectorul de comanda I 8:0 are o semnificatie complexa prin faptul ca specifica:
240 - operarea RAM (deplasare/incarcare/inactiv); - operarea registrului Q (deplasare/incarcare/inactiv); - conexiunile la RAMSHIFT (RAM 0 si RAM 3 ); - conexiunile la QSHIFT (Q 0 si Q 3 ); - iesirea Y. Terminalele RAM 0 /RAM 3 si Q 0 /Q 3, din punct de vedere electric, sunt terminale de intrare/iesire, controlul lor fiind asigurat de campul I 8:6, din microcod. In tabelul de mai jos se prezinta semnificatiile campului I 8:6, in conditiile in care: - B reprezinta locatia din RAM adresata pe baza adresei B; - UP inseamna deplasarea catre MSB; - DOWN specifica deplasarea catre LSB. Comanda destinatiei UAL Tab.5. Mnemo- M.cod Cod Functia RAM Functia Q Ies RAMSHIFT QSHIFT nica oct I 8 I 7 I 6 Depl Incarc. Depl Incarc. Y RAM 0 RAM 3 Q 0 Q 3 QREG * Nu * Q F F * * * * NOP * Nu * Nu F * * * * RAMA Nu B F * Nu A * * * * RAMF Nu B F * Nu F * * * * RAMQD DOWN B F/2 DOWN Q Q/2 F F 0 IN 3 Q0 IN 3 RAMD DOWN B F/2 * Nu F F 0 IN 3 Q0 * RAMQU UP B 2F UP Q 2Q F IN 0 F 3 IN0 Q 3 RAMU UP B 2F * Nu F IN 0 F 3 * Q 3 *)Din punct de vedere electric terminalul asigura o intrare TTL, conectata intern cu o iesire TS aflata in starea de mare impedanta. Intrarea B in RAM este furnizata de un multiplexor RAMSHIFT. Acesta, sub controlul microcodului I 8:6, selecteaza intrarea directa sau deplasata stanga/dreapta, cu insertia unor date
241 speciice prin terminalele RAM 3 /RAM 0. Dupa cum se va vedea ulterior (Fig. ), datele pentru terminalele RAM 3 /RAM 0 sunt selectate cu ajutorul altor biti (MUX 1, MUX 0 ) din microcodul de comanda si cu un hardware aditional,constituit din doua multiplexoare AMD 25LS-253, cu cate 8 intrari si 2 iesiri. Multiplexoarele AMD 25LS253, amintite mai sus, solutioneaza si problemele circuitului QSHIFT, care asigura una din intrarile registrului Q. Iesirea Y este realizata cu un circuit TS. Sub controlul semnalului OE, iesirea Y se conecteaza la o magistrala de date. Intrarea de ceas in circuitul AMD 2901 controleaza resursele RAM, Q si tampoanele-latch A si B, plasate pe iesirile RAM. Cand semnalul de ceas este pe nivel ridicat tampoanele A si B sunt activate, preluand datele din locatiile citite din RAM, pentru a le furniza la iesire, ca surse UAL. Pe durata nivelului coborat al semnalului de ceas tampoanele A si Bstocheaza datele incarcate anterior. In cazul in care se activeaza semnalul WE, pe nivelul coborat al semnalului de ceas se poate stoca in RAM noua data plasata la intrarea B, prin intermediul circuitului RAMSHIFT. I7 MUX 0 MUX 1 MUX 0 MUX 1 I7 H H 1G A B 2G 1C0 1C1 1C2 1Y 1C3 25LS-253 2C0 2C1 2Y 2C2 2C3 LSB MSB Q 0 Q 1 AMD 2901 RAM 1 RAM 3 MSB-Fn 1G A B 2G 1C0 1C1 1Y 1C2 25LS-253 1C3 2C0 2Y 2C1 2C2 2C3 H H
242 In continuare se va perzenta schema bloc partiala a unei unitati de executie pe 16 biti, constituita din patru circuite AMD 2901 si un circuit cu transport anticipat AMD 2902 Q 0 I/O RAM 0 I/O C in D 0:3 D 12:15 Q 0 Q 3 RAM 0 RAM 3 /G /P AMD 2901(1) C n+4 OVR F 3 C n F=0 Q 0 Q 3 RAM 0 RAM 3 /G /P AMD 2901(4) C n+4 OVR F 3 C n F=0 Q 15 I/O RAM 15 I/O /P0 /G0 /P1 /G1 /P2 /G2 /P3 /G3 Cn AMD 2902 /G Cn+x Cn+y Cn+z /P F=0(2) F=0(3) 470Ω +5V Observatie: Pentru marcarea unor semnale active pe nivel coborat, in cazul de fata, numele semnalului a fost precedat de simbolul /. Unitatea de executie poate utiliza si multiplexoare 4:1 obisnuite, in locul celor produse de catre AMD, 25LS-253. In schema de mai jos se arata modul in care sunt interconectate logic cele 4 multiplexoare. Plecand de la elementele prezentate anterior se poate construi formatul cuvantului de comanda, al microinstructiunii, pentru controlul unitatii de executie. In scop didactic se va considera data de prelucrat continuta in microinstructiune, intr-un camp D. In cazul unei unitati de prelucrare pe 4 biti, campul D va avea, de asemenea, 4 biti. Pe masura ce creste lungimea cuvantului prelucrat, va creste si dimensiunea campului D, din microinstructiune.
243 0 MUX MUX MUX MUX MUX 1,MUX 0 RAM SHIFT QSHIFT F3 In conditiile plasarii unor multiplexoare pe intrarile de deplasare ale circuitelor RAMSHIFT si QSHIFT registrele R si Q se pot concatena in vederea efectuarii unor deplasari sau rotiri duble, conform tabelului de mai jos (originea de indexare este la stanga): MUX 1 MUX 0 TIP DREAPTA (JOS) STANGA (SUS) 0 0 ZERO RAM 3 0; RAM 0 0; Q 3 0 Q ROTIRE RAM 3 RAM 0 ; RAM 0 RAM 3 ; Q 3 Q 0 Q 0 Q ROTIRE CU RAM 3 Q 0 ; RAM 0 Q 3 ; LUNGIME DUBLA Q 3 RAM 0 Q 0 RAM DEPLASARE RAM 3 F 3 ; RAM 0 Q 3 ; DUBLA Q 3 RAM 0 Q 0 0 ARITMETICA
244 Cuvantul (microinstructiunea) de comanda al unitatii de executie va avea structura urmatoare: M I 8 I 7 I 6 M I 2 I 1 I 0 C n I 5 I 4 I 3 A 3 A 2 A 1 A 0 B 3 B 2 B 1 B 0 D 3 D 2 D 1 D 0 U Selectie U Selectie Operatie Adresa A Adresa B Data D X destinatie X sursa UAL 1 2 Se poate observa ca, microinstructiunea care controleaza unitatea de executie poseda 24 de biti. Bitii 0,..,3 au aparut ca urmare a inglobarii datei in microinstructiune (microinstructiune cu operand imediat). Campul D se va extinde in incrementi de 4 biti odata cu extinderea lungimii cuvantului prelucrat de catre unitatea de executie. Campul C n este asociat cu transportul in rangul cel mai putin semnificativ al unitatii de executie, fiind la latitudinea celui care scrie microprogramul.
245 Unitati de comanda integrate. Secventiatorul de microprogram AMD Secventiatorul de microprogram AMD 2909 face parte din familia de circuite AMD2900 si constituie elementul de baza in jurul caruia este organmizata unitatea de comanda microprogramata. Dupa cum s-a aratat in paragraful anterior, atat unitatea de executie AMD 2901, cat si circuitele asociate acesteia sunt controlate cu ajutorul unui vector de comanda constituit din campuri de biti, cu functii bie precizate. Un asemenea vector controleaza operatii aritmetice elementare, care se pot efectua pe durata unei perioade de ceas. Vectorul semnalelor de comanda poate fi generat cu ajutorul unui circuit secvential, in cazul unitatilor de comanda conventionale, sau extras dintr-o memorie cu continut permanent, in cazul unitatilor de comanda microprogramate. Operatiile cu caracter complex, printre care se numara si instructiunile calculatoarelor conventionale, se implementeaza sub forma unor secvente de vectori de comanda. In sistemele microprogramate aceste secvente sunt stocate intr-o memorie de control sau memorie de microprograme. Un cuvant al memoriei de control reprezinta un vector de comanda sau o microinstructiune. Secventiatorul de microprogram, structurat pe transe de cate 4 biti, este destinat generarii adreselor de microinstructiuni si asigurarii inlantuirii acestora. Secventiatorul, prezentat mai jos, are ca resurse hardware: - Contorul de MicroProgram (CMP); - Registrul de Ramificare (RR); - Indicatorul de Stiva (IS); - STiVa (STV) cu capacitate de 4 cuvinte 4 biti; - INCrementatorul (INC); - MultipleXorul (MUX) 4 (4 : 1); - Tampon cu trei Stari (TS) si alte circuite logice combinationale auxiliare. Schema bloc a unitatii de comanda va contine, pe langa microsecventiator, si elementele necesare realizarii unei unitati de comanda: - Memoria de Microprogram (MM); - Registrul MicroInstrucriunii (RMI); - un Comutator de Adrese (CA); - o memorie de tip PROM.
246 R[3:0] FE PUP(PUSH/POP) RE RR[4] IS D 3:0 S 0 S 1 D RR STV CMP MUX X[4] STV 4 cuv. 4 biti CMP[4] OR i C n+4 Ceas ZERO SAU-NU INC SI C n TS OE Y[4] Prin conectarea in cascada a trei asemenea circuite se asigura o adresa de microinstructiune de 12 biti, ceea ce permite accesul la o memorie de comanda cu capacitatea de 4096 cuvinte. Secventiatorul furnizeaza o adresa Y[4] de microinstructiune, care reprezinta iesirea X[4] a multiplexorului prelucrata logic. Multiplexorul are ca intrari selectabile cu ajutorul semnalelor S 1,S 0 : - adresa externa D; - continutul Registrului de Ramificare (RR); - continutul varfului stivei (STV) - continutul Contorului de MicroProgram. Iesirea Y este furnizata prin intermediul unui circuit tampon TS, controlat de semnalul OE. Din punct de vedere logic, Y[4] se exprima astfel: Y[4] = ZERO (Y[4] OR[4]) unde OR[4] este un vector logic aplicat din exterior, adesea avand toti bitii egali cu 1. ZERO
247 este, de asemena, un vector logic, care paote face ca Y[4]a aibe toate rangurile egale cu 0. In acest mod se pot forta valori particulare pentru adresa microinstructiunii urmatoare sau se pot efectua transferuri relative la adresa curenta. Secventierea microinstructiunilor este realizata prin controlul circuitului 2909 cu ajutorul semnalelor preluate din campurile de control ale microinstructiunii si de la conditiile externe. Operarea microsecventiatorului este descrisa cu ajutorul urmatoarelor tabele: Selectie MUX: Controlul Iesirii: S1 S0 IESIRE OR i ZERO OE Y i 0 0 CMP * * 1 Z (TS) 0 1 RR * STV D IES MUX Operarea Stivei: FE PUP OPERATIE 1 * inactiva 0 1 IS INC(IS); PUSH(CMP) 0 0 POP(STV); DCR(IS) In functie de semnalele de control si de conditiile externe, microsecventiatorul poate realiza urmatoarele operatii de control, la nivelul microprogramului: - transfer neconditionat la adresa X mnemonica J X; - chemare de micro subrutina mnemonica CALL X; - revenire din microsubrutina mnemonica RETURN; - trecerea la microinstructiunea urmatoare din secventa mnemonica CONTINUE. Transferul neconditionat la adresa X se realizeaza prin aplicarea vectorului binar X la intrarea D a multiplexorului si a urmatorului vector binar la intrarile de control ale microsecventiatorului: S 1 S 2, FE, PUP, OR[4], ZERO = 1 1, 1, *, 0000, 1 Chemarea unei microsubrutine, de la adresa X, este asigurata prin fortarea adresei X in registrul RR si prin aplicarea urmatorului vector binar la intrarile de control ale microsecventiatorului:
248 S 1 S 2, FE, PUP, OR[4], ZERO = 0 1, 0, 1, 0000, 1 Revenirea dintr-o microsubrutina este implementata folosind un vector de control al microsecventiatorului cu urmatoarea structura: S 1 S 2, FE, PUP, OR[4], ZERO = 1 0, 0, 0, 0000, 1 Trecerea la urmatoarea microinstructiune din secventa impune ca adresa Y sa corespunda continutului Contorului de Microprogram, ceea ce se realizeaza cu ajytorul urmatorului vector de comanda: S 1 S 2, FE, PUP, OR[4], ZERO = 0 0, 1, *, 0000, 1 Conform celor aratate mai sus, microsecventiatorul efectueaza urmatoarele operatii privitoare la generarea adresei Y a microinstructiunii urmatoare si la modificarea continuturilor Contorului de MicroProgram si Stivei: Y = (((CMP! RR! STV! D) * DCD 0:3 (S 1,S 0 ) OR 0:3 )! 4 0)* (ZERO, ZERO) CMP ((INC(CMP! RR! STV! D) * DCD 0:3 (S 1,S 0 ) OR 0:3 )! 4 0)* (ZERO, ZERO) STV ((STV 1:3! STV 0 )! (CMP! CMP! STV 0:2 )! STV! STV) * DCD 0:3 (FE, PUP) Conectarea in cascada a circuitelor microsecventiatorului pemite explorarea unui spatiu mai mare in memoria de microprogram. Mai jos se prezinta interconectarea in cascada a trei microsecventioatoare AMD R D R D R D R D S 0:1 AMD2909 S 0:1 AMD2909 S 0:1 AMD2909 OR 0:3 C n C n+4 altele Y 0:3 OR 0:3 C n C n+4 altele Y 0:3 OR 0:3 C n C n+4 altele Y 0:3 S 0:1 OR 0:3 altele Y 0:11
249 Dupa cum s-a mai aratat, pentru realizarea unei unitati de comanda, microsecventiatorul trebuie prevazut cu o serie de circuite auxiliare, care sunt prezentate in figura de mai jos: CA RR[4] IS AMD29751 A 0 PROM A 4:1 D RR STV CMP MUX X[4] CS P 3:0 AMD2909 Y[4] STV 4 cuv. 4 biti CMP[4] INC C n+4 MM C n RMI AMD2918 MUX 0,MUX 1 ADRESA A ADRESA B DATA D SELECTIE SURSA (I 2:0 ) OPERATIE UAL (I 5:3 ) SELECTIE DESTINATIE (I 8:6 ) SELECTIE COD CONDITIE (P 3:0 ) CODUL CONDITIEI SELECTATE
250 Intre acestea un rol deosebit il joaca memoria PROM 29751, care furnizeaza semnalele de comanda pentru microsecventiator. Continutul acestei memorii PROM este citit pe baza unei adrese obtinute dintr-un camp P 0:3, al registrului microinstructiunii RMI. Bitii P 0:3 ai microinstructiunii se transforma in bitii de adresa A 1:4, ai memoriei PROM, in timp ce bitul A 0 este furnizat de iesirea unui multiplexor la intrarile caruia se aplica indicatorii de conditii, cat si alte semnale. Intrarile de date ale multiplexorului au fost stabilite pe durata executiei microinstructiunii precedente. Intrarile de selectie ale multiplexorului sunt asigurate tot de bitii P 0:3, furnizati de microinstructiunea curenta. In figura de mai jos se prezinta o schema bloc a unitatii de comanda, cu indicarea elementelor discutate anterior. Magistrala pentru date si instructiuni Registrul Instructiunii RI Cod operatie adresa, etc. PROM mapare adresa MUX O5 PROM O4 O3 A 0 O2 O1 O0 A 4 A 3 A 2 A 1 D[4] OR[4] R[4] ZERO PUP AMD 2909 FE S 1 C n+4 S 0 Y out C n Adresa Memoria de 4 4 microprogram R 3:0 P 3:0 RMI Semnale de comanda
251 Operarea unitatii de comnada microprogramata este stabilita prin continutul memoriei PROM, care furnizeaza la iesire semnalele O 5:0, care reprezinta vectorul de comanda al microsecventiatorului: OR[4], ZERO, PUP, FE, S 1, S 0. In locatiile memoriei PROM, adresate cu ajutorul campului P 3:0, sunt stocati vectori de comanda, care impun unitatii de comanda microprogramate efectuarea operatiilor prezentate in tabelul de mai jos: P 3:0 Operatie Mnemonica cod hexa 0 Ramificare la adresa R daca F 0 JRNZF 1 Ramificare neconditionata la adresa R JR 2 CONTINUA CONT 3 Ramificare la adresa D JD 4 Ramificare la subrutina cu adresa R daca F 0 JSRNZF 5 Ramificare la subrutina cu adresa R JSR 6 Revenire din subrutina RS 7 Ramificare la adresa continuta in varful stivei (fara POP) JSTV 8 Terminare de ciclu si POP daca F = 0 TCPOZF 9 PUSH si CONTINUA PUCONT A POP si CONTINUA POCONT B Terminare de ciclu si POP daca C n+4 = 1 TCPOC C Ramificare la adresa R daca F = 0 JRZF D Ramificare la adresa R daca F 3 = 1 JRF3 E Ramificare la adresa R daca OVR = 1 JROVR F Ramificare la adresa R daca C n+4 = 1 JRC Se poate observa, in ultima schema bloc, faptul ca intrarea R a microsecventiatorului este preluata direct de la iesirea memoriei de comanda, fara a mai fi stocat in prealabil in registrul microinstructiunii RMI. In acest mod adresa de ramificare se incarca direct in registrul R al microsecventiatorului. Din cele prezentate rezulta ca operarea microsecventiatorului este controlata de doua campuri ale microinstructiunii stocate in Memoria de comanda. Este vorba de campul P 3:0, care
252 stabileste operatia, conform tabelului de mai sus, si de campul R 3:0, al adresei de ramificare. Prin concatenarea mai multor microsecventiatoare campul P ramane constant ca lungime, in timp ce campul R se modifica, in incrementi de cate 4 biti, pentru a furniza spatii de adresare mai mari in memoria de microprogram. Structura unui cuvant microinstructiune, destinat controlului unui microsecventiator AMD 2909, este formata din doua campuri de cate patru biti: - campul P, care specifica modul de obtinere a microinstructiunii urmatoare, si - campul R, care defineste adresa de salt, daca este cazul R 3 R 2 R 1 R 0 P 3 P 2 P 1 P 0 Adresa de Obtinerea µi salt urmatoare Microprogramarea unui procesor bit-slice, constituit cu ajutorul circuitelor AMD 2901 si AMD 2909, in vederea prelucrarii datelor pe 4 biti. (Urmeaza mai multe exemple de microprograme)
253
254 Sinteza circuitelor combinationale Minimizarea folosind diagrama Karnaugh. (D-K) 1. Copiaza tabela de adevar in (D-K) 2. Identifica subcuburile: selecteaza la fiecare pas pe cel mai mare subcub, chiar daca se suprapune cu alte cuburi selectate anterior, pana la acoperirea tuturor unitatilor (Incearca: 4 4, 2 4 si 4 2, 1 4 si 4 1, 2 1 si 1 2, in final 1 1). 3. Genereaza realizarea minimala ca Suma de Produse (SP). Termenii incercuiti poarta numele de implicanti. Un implicant care nu estcontinut complet intr-un alt implicant poarta numele de implicant prim. Cazul SP nonminimale
255 Structuri utile de porti.
256 Logica pentru Sumatorul Complet (SC) Ecuatia transportului C 0 poate fi simplificata destul de usor: C 0 = BC + AB+ AC In schimb, suma, S, nu are o realizare simpla de SP, chiar daca ea poate fi implementata cu doua porti XOR, cu cate doua intrari. Sinteza logica folosind multiplexoare (MUX-uri)
257 Implementarea sistematica a logicii combinationale. Optimizari in cazul logicii cu MUX-uri Sinteza bazata pe Tabele de Cautare (Lookup Tables) Teoretic, se poate construi oricare bloc logic combinational, cu o iesire, folosind multiplexoare. Pentru o functie de N variabile este necesar un multiplexor cu 2 N intrari.
258 Structura unui Multiplexor Multiplexoarele pot fi partitionate in doua sectiuni cu functiile de decodificare si selectare. Decodificatorul identifica intrarea dorita, iar Selectorul transfera la iesire acea intrare. Prin partajarea sectiunii de decodificare, multiplexoarele pot fi utilizate la implementarea tabelelor de cautare cu un numar oarecare de iesiri. Decodificatorul Decodificatorul dispune de k intrari, denumite intrari de selectie si N=2 k iesiri de date. Se poate construi un tablou bidimensional format din decodificatoare si selectoare, dupa cum se arata in continuare. Partajarea logicii de decodificare. Astfel, se poate realiza un dispozitiv universal de tip tabela de cautare, denumit Memorie cu Continut Permanent (ROM Read Only Memory), cu ajutorul careia se poate implementa oricare tabela de adevar si, astfel, oricare dispozitiv logic combinational.
259 ROM - detalii de implementare Logica SI cablata, logica SAU programabila Avantaje: - proiect cu o structura regulata - proiectarea poate fi complet automatizata Dezavantaje: - Tranzistoarele trage sus sunt active, ceea ce implica cosum static de putere - Trasee lungi de metal, cu capacitati mari - Viteza de lucru relativ mica. Terminologie: - Intrarille circuitului ROM: adrese - Iesirile decodificatorului: linii de cuvint - Iesirile selectorului: linii de bit Cresterea vitezei in cazul ROM Cresterea vitezei in cazul ROM se poate realiza prin reducerea capacitatiilor traseelor lungi de metal, care strabat structura.
260 Cea mai buna metoda consta in realizarea unei structuri patrate. Intrebari: - De ce sau folosit circuite NOR? - Nu se puteau elimina unele inversoare in cazul folosirii circuitelor NAND? Observatii privind utilizarea circuitelor ROM pentru implementarea logicii combinationale - ROM nu tine seama de structura functiilor combinationale - Dimensiunea, planul (layout) si proiectul sunt independente de functie - Oricare tabela de adevar poate fi implementata/ programata prin reconfigurari minore: - stratul de metal (ROM cu masca) - fuzibile (PROM Field programmable ROM) - sarcini pe portile flotante (EPROM Erasable PROM) etc Model: valorile functiei in tabela de cautare se iau din tabela de adevar. Intrari: ADRESE corespunzatoare celor N intrari Dimensiunea ROM 2 N Nr.iesiri. Intrebari: - De ce dimensiunile ROM cresc cu un factor egal cu 4? - La iesirea unui circuit ROM se pot observa glitch-uri? Explicatie. Exemplu: Zar cu 7 fatete. Intrucat mecanic nu se poate realiza un zar cu 7 fatete, se va incerca o implementare electronica, pornind de la fatetele de zar de mai jos: Cu ajutorul unui tablou de LED-uri, marcate ca mai jos, se pot afisa fatetele zarului: Proiectare bazata pe ROM Proiectul consta in scrierea tabelei de adevar Optimizari: eliminarea iesirilor redundante si examinarea adresarii.
261 O implementare ROM simpla PLA (Programmable Logic Array -Tablou Logic Programabil) In cazul in care termenii AND ai decodificatorului din ROM ar putea fi programabili, ca si termenii SAU, s-ar putea folosi o serie de metode de minimizare in scopul reducerii dimensiunilor tabloului ROM. Se obtine un dispozitiv universal. Implementarea PLA a Zarului cu 7 fatete Ca si in cazul ROM, PLA asigura sinteza functiilor logice arbtrare utilizand implementari bazate pe SP.
262 Avantaje: - implementari minimizate si rapide - structuri regulate: - generare automata - proiectare facila - mai lenta decat implementarea optimala cu porti. Impachetarea PLA Adesea aceeasi linie de bit poate fi partajata de doua iesiri. I mod similar, este posibil, sa se aduca intrarile pe ambele laturi ale tabloului, ceea ce face ca desenul sa arate ca o pereche de PLAuri in oglinda. PAL (Programmable Array Logic Tablouri ProgramabileLogice) O alta abordare a proiectarii logice structurate o constituie PAL-urile. Aceste dispozitive au fost in voga in anii 80 intrucat au inlocuit cu succes portile TTL si au contribuit la lansarea microprocesoarelor. Actualmente sunt depasite.. PAL-urile au un decodificator programabil (planul AND) si o logica de slectie fixa. Aceste dispozitive au fost utile pentru implementarea expresiilor logice sub forma de SP, asigurand in acelasi timp, si posibilitati de comanda a sarcinilor mari. Ele se
263 procurau sub forma neprogramata. Programarea se putea face de catre utilizator cu echipamente ieftine. Concluzii: Multiplexoarele: - Un multiplexor cu N intrari poate implementa tabele de adevar cu N intrari si o iesire ROM-urile - Logica de decodificare partajata - Genereaza toate produsele - Pot implementa tabele de adevar cu un numar oarecare de iesiri - Usor de specificat - Plan (layout) regulat - Utilizare ineficienta a spatiului/timpului PLA-urile - Asigura realizari minimizate pentru SP - Genereaza numai produsele necesare - Pentru proiecte compacte este necesara minimizarea - Plan (layout) regulat PAL-urile - Usor de prefabricat si de impachetat Metode moderne: Celule Standard Se creaza, mai intai, o biblioteca de celule logice: porti, registre, multiplexoare, sumatoare, ploturi de I/E etc. O foaie de catalog, pentru fiecare celula, descrie functia, aria ocupata, puterea consumata, timpul de propagare, timpii de crestere si de cadere ca functii de sarcina etc Exemplu de celula standard Ca si in cazul proiectarii plachetelor la nivel de componente, cu doua decade in urma, uneltele CAD plaseaza si interconecteaza celulele, urmarindu-se: - minimizarea ariei ocupate - satisfacerea restrictiilor de timp.
264 Arii/Tablouri de Porti: Scurtarea timpului de realizare a proiectului Tablourile de porti utilizeaza tablouri fixe de tranzistoare, care sunt personalizate in etapa finala de procesare in care se adauga fire/trasee metalice si contacte. Cea mai populara arhitectura este Marea de Porti (Sea of Gates), in care nucleul circuitului integrat este un tablou continuu de tranzistoare MOS. Trasarea straturilor de metal se efectueaza peste partea superioara a tranzistoarelor nefolosite. Avantaje: - pot fi prefabricate - sunt personalizate numai ultimele masti.
265 Tablou de porti: Exemplu.
Metode iterative pentru probleme neliniare - contractii
Metode iterative pentru probleme neliniare - contractii Problemele neliniare sunt in general rezolvate prin metode iterative si analiza convergentei acestor metode este o problema importanta. 1 Contractii
5.4. MULTIPLEXOARE A 0 A 1 A 2
5.4. MULTIPLEXOARE Multiplexoarele (MUX) sunt circuite logice combinaţionale cu m intrări şi o singură ieşire, care permit transferul datelor de la una din intrări spre ieşirea unică. Selecţia intrării
4. CIRCUITE LOGICE ELEMENTRE 4.. CIRCUITE LOGICE CU COMPONENTE DISCRETE 4.. PORŢI LOGICE ELEMENTRE CU COMPONENTE PSIVE Componente electronice pasive sunt componente care nu au capacitatea de a amplifica
MARCAREA REZISTOARELOR
1.2. MARCAREA REZISTOARELOR 1.2.1 MARCARE DIRECTĂ PRIN COD ALFANUMERIC. Acest cod este format din una sau mai multe cifre şi o literă. Litera poate fi plasată după grupul de cifre (situaţie în care valoarea
III. Reprezentarea informaţiei în sistemele de calcul
Metode Numerice Curs 3 III. Reprezentarea informaţiei în sistemele de calcul III.1. Reprezentarea internă a numerelor întregi III. 1.1. Reprezentarea internă a numerelor întregi fără semn (pozitive) Reprezentarea
Curs 14 Funcţii implicite. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi"
Curs 14 Funcţii implicite Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi" Iaşi 2014 Fie F : D R 2 R o funcţie de două variabile şi fie ecuaţia F (x, y) = 0. (1) Problemă În ce condiţii ecuaţia
Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate.
Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi" Iaşi 2014 Fie p, q N. Fie funcţia f : D R p R q. Avem următoarele
(a) se numeşte derivata parţială a funcţiei f în raport cu variabila x i în punctul a.
Definiţie Spunem că: i) funcţia f are derivată parţială în punctul a în raport cu variabila i dacă funcţia de o variabilă ( ) are derivată în punctul a în sens obişnuit (ca funcţie reală de o variabilă
5. FUNCŢII IMPLICITE. EXTREME CONDIŢIONATE.
5 Eerciţii reolvate 5 UNCŢII IMPLICITE EXTREME CONDIŢIONATE Eerciţiul 5 Să se determine şi dacă () este o funcţie definită implicit de ecuaţia ( + ) ( + ) + Soluţie ie ( ) ( + ) ( + ) + ( )R Evident este
Curs 1 Şiruri de numere reale
Bibliografie G. Chiorescu, Analiză matematică. Teorie şi probleme. Calcul diferenţial, Editura PIM, Iaşi, 2006. R. Luca-Tudorache, Analiză matematică, Editura Tehnopress, Iaşi, 2005. M. Nicolescu, N. Roşculeţ,
Metode de interpolare bazate pe diferenţe divizate
Metode de interpolare bazate pe diferenţe divizate Radu Trîmbiţaş 4 octombrie 2005 1 Forma Newton a polinomului de interpolare Lagrange Algoritmul nostru se bazează pe forma Newton a polinomului de interpolare
Criptosisteme cu cheie publică III
Criptosisteme cu cheie publică III Anul II Aprilie 2017 Problema rucsacului ( knapsack problem ) Considerăm un număr natural V > 0 şi o mulţime finită de numere naturale pozitive {v 0, v 1,..., v k 1 }.
Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM 1 electronica.geniu.ro
Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM Seminar S ANALA ÎN CUENT CONTNUU A SCHEMELO ELECTONCE S. ntroducere Pentru a analiza în curent continuu o schemă electronică,
2. Circuite logice 2.4. Decodoare. Multiplexoare. Copyright Paul GASNER
2. Circuite logice 2.4. Decodoare. Multiplexoare Copyright Paul GASNER Definiţii Un decodor pe n bits are n intrări şi 2 n ieşiri; cele n intrări reprezintă un număr binar care determină în mod unic care
Curs 4 Serii de numere reale
Curs 4 Serii de numere reale Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi" Iaşi 2014 Criteriul rădăcinii sau Criteriul lui Cauchy Teoremă (Criteriul rădăcinii) Fie x n o serie cu termeni
Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1
Functii definitie proprietati grafic functii elementare A. Definitii proprietatile functiilor. Fiind date doua multimi X si Y spunem ca am definit o functie (aplicatie) pe X cu valori in Y daca fiecarui
Esalonul Redus pe Linii (ERL). Subspatii.
Seminarul 1 Esalonul Redus pe Linii (ERL). Subspatii. 1.1 Breviar teoretic 1.1.1 Esalonul Redus pe Linii (ERL) Definitia 1. O matrice A L R mxn este in forma de Esalon Redus pe Linii (ERL), daca indeplineste
Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor
Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor. Fiind date doua multimi si spunem ca am definit o functie (aplicatie) pe cu valori in daca fiecarui element
III. Serii absolut convergente. Serii semiconvergente. ii) semiconvergentă dacă este convergentă iar seria modulelor divergentă.
III. Serii absolut convergente. Serii semiconvergente. Definiţie. O serie a n se numeşte: i) absolut convergentă dacă seria modulelor a n este convergentă; ii) semiconvergentă dacă este convergentă iar
R R, f ( x) = x 7x+ 6. Determinați distanța dintre punctele de. B=, unde x și y sunt numere reale.
5p Determinați primul termen al progresiei geometrice ( b n ) n, știind că b 5 = 48 și b 8 = 84 5p Se consideră funcția f : intersecție a graficului funcției f cu aa O R R, f ( ) = 7+ 6 Determinați distanța
Integrala nedefinită (primitive)
nedefinita nedefinită (primitive) nedefinita 2 nedefinita februarie 20 nedefinita.tabelul primitivelor Definiţia Fie f : J R, J R un interval. Funcţia F : J R se numeşte primitivă sau antiderivată a funcţiei
5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE
5.5. A CIRCUITELOR CU TRANZISTOARE BIPOLARE PROBLEMA 1. În circuitul din figura 5.54 se cunosc valorile: μa a. Valoarea intensității curentului de colector I C. b. Valoarea tensiunii bază-emitor U BE.
Planul determinat de normală şi un punct Ecuaţia generală Plane paralele Unghi diedru Planul determinat de 3 puncte necoliniare
1 Planul în spaţiu Ecuaţia generală Plane paralele Unghi diedru 2 Ecuaţia generală Plane paralele Unghi diedru Fie reperul R(O, i, j, k ) în spaţiu. Numim normala a unui plan, un vector perpendicular pe
Subiecte Clasa a VIII-a
Subiecte lasa a VIII-a (40 de intrebari) Puteti folosi spatiile goale ca ciorna. Nu este de ajuns sa alegeti raspunsul corect pe brosura de subiecte, ele trebuie completate pe foaia de raspuns in dreptul
Aplicaţii ale principiului I al termodinamicii la gazul ideal
Aplicaţii ale principiului I al termodinamicii la gazul ideal Principiul I al termodinamicii exprimă legea conservării şi energiei dintr-o formă în alta şi se exprimă prin relaţia: ΔUQ-L, unde: ΔU-variaţia
Codificatorul SN74148 este un codificator zecimal-bcd de trei biţi (fig ). Figura Codificatorul integrat SN74148
5.2. CODIFICATOAE Codificatoarele (CD) sunt circuite logice combinaţionale cu n intrări şi m ieşiri care furnizează la ieşire un cod de m biţi atunci când numai una din cele n intrări este activă. De regulă
Laborator 1: INTRODUCERE ÎN ALGORITMI. Întocmit de: Claudia Pârloagă. Îndrumător: Asist. Drd. Gabriel Danciu
INTRODUCERE Laborator 1: ÎN ALGORITMI Întocmit de: Claudia Pârloagă Îndrumător: Asist. Drd. Gabriel Danciu I. NOŢIUNI TEORETICE A. Sortarea prin selecţie Date de intrare: un şir A, de date Date de ieşire:
Subiecte Clasa a VII-a
lasa a VII Lumina Math Intrebari Subiecte lasa a VII-a (40 de intrebari) Puteti folosi spatiile goale ca ciorna. Nu este de ajuns sa alegeti raspunsul corect pe brosura de subiecte, ele trebuie completate
Problema a II - a (10 puncte) Diferite circuite electrice
Olimpiada de Fizică - Etapa pe judeţ 15 ianuarie 211 XI Problema a II - a (1 puncte) Diferite circuite electrice A. Un elev utilizează o sursă de tensiune (1), o cutie cu rezistenţe (2), un întrerupător
V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile
Metode de Optimizare Curs V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile Propoziţie 7. (Fritz-John). Fie X o submulţime deschisă a lui R n, f:x R o funcţie de clasă C şi ϕ = (ϕ,ϕ
2. Circuite logice 2.5. Sumatoare şi multiplicatoare. Copyright Paul GASNER
2. Circuite logice 2.5. Sumatoare şi multiplicatoare Copyright Paul GASNER Adunarea în sistemul binar Adunarea se poate efectua în mod identic ca la adunarea obişnuită cu cifre arabe în sistemul zecimal
a. 11 % b. 12 % c. 13 % d. 14 %
1. Un motor termic funcţionează după ciclul termodinamic reprezentat în sistemul de coordonate V-T în figura alăturată. Motorul termic utilizează ca substanţă de lucru un mol de gaz ideal având exponentul
Seminar 5 Analiza stabilității sistemelor liniare
Seminar 5 Analiza stabilității sistemelor liniare Noțiuni teoretice Criteriul Hurwitz de analiză a stabilității sistemelor liniare În cazul sistemelor liniare, stabilitatea este o condiție de localizare
Proiectarea Algoritmilor 2. Scheme de algoritmi Divide & Impera
Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic Proiectarea Algoritmilor 2. Scheme de algoritmi Divide & Impera Cuprins Scheme de algoritmi Divide et impera Exemplificare
Examen AG. Student:... Grupa: ianuarie 2016
16-17 ianuarie 2016 Problema 1. Se consideră graful G = pk n (p, n N, p 2, n 3). Unul din vârfurile lui G se uneşte cu câte un vârf din fiecare graf complet care nu-l conţine, obţinându-se un graf conex
2. Sisteme de forţe concurente...1 Cuprins...1 Introducere Aspecte teoretice Aplicaţii rezolvate...3
SEMINAR 2 SISTEME DE FRŢE CNCURENTE CUPRINS 2. Sisteme de forţe concurente...1 Cuprins...1 Introducere...1 2.1. Aspecte teoretice...2 2.2. Aplicaţii rezolvate...3 2. Sisteme de forţe concurente În acest
riptografie şi Securitate
riptografie şi Securitate - Prelegerea 12 - Scheme de criptare CCA sigure Adela Georgescu, Ruxandra F. Olimid Facultatea de Matematică şi Informatică Universitatea din Bucureşti Cuprins 1. Schemă de criptare
CIRCUITE LOGICE CU TB
CIRCUITE LOGICE CU T I. OIECTIVE a) Determinarea experimentală a unor funcţii logice pentru circuite din familiile RTL, DTL. b) Determinarea dependenţei caracteristicilor statice de transfer în tensiune
a n (ζ z 0 ) n. n=1 se numeste partea principala iar seria a n (z z 0 ) n se numeste partea
Serii Laurent Definitie. Se numeste serie Laurent o serie de forma Seria n= (z z 0 ) n regulata (tayloriana) = (z z n= 0 ) + n se numeste partea principala iar seria se numeste partea Sa presupunem ca,
6.4. REGISTRE. Un registru care îndeplineşte două sau mai multe funcţii din cele 4 prezentate mai sus se numeşte registru universal.
.. REGISTRE Registrele sunt circuite logice secvenţiale care primesc, stochează şi transferă informaţii sub formă binară. Un registru este format din mai multe celule bistabile de tip RS, JK sau şi permite
SEMINAR 14. Funcţii de mai multe variabile (continuare) ( = 1 z(x,y) x = 0. x = f. x + f. y = f. = x. = 1 y. y = x ( y = = 0
Facultatea de Hidrotehnică, Geodezie şi Ingineria Mediului Matematici Superioare, Semestrul I, Lector dr. Lucian MATICIUC SEMINAR 4 Funcţii de mai multe variabile continuare). Să se arate că funcţia z,
10. STABILIZATOAE DE TENSIUNE 10.1 STABILIZATOAE DE TENSIUNE CU TANZISTOAE BIPOLAE Stabilizatorul de tensiune cu tranzistor compară în permanenţă valoare tensiunii de ieşire (stabilizate) cu tensiunea
ANEXA 4. OPERAŢII ARITMETICE IMPLEMENTĂRI
ANEXA 4. OPERAŢII ARITMETICE IMPLEMENTĂRI ADUNAREA ÎN BINAR: A + B Adunarea a două numere de câte N biţi va furniza un rezultat pe N+1 biţi. Figura1. Anexa4. Sumator binar complet Schema bloc a unui sumator
Câmp de probabilitate II
1 Sistem complet de evenimente 2 Schema lui Poisson Schema lui Bernoulli (a bilei revenite) Schema hipergeometrică (a bilei neîntoarsă) 3 4 Sistem complet de evenimente Definiţia 1.1 O familie de evenimente
DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE
DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE ABSTRACT. Materialul prezintă o modalitate de a afla distanţa dintre două drepte necoplanare folosind volumul tetraedrului. Lecţia se adresează clasei a VIII-a Data:
Limbaje de Programare Curs 3 Iteraţia. Reprezentare internă. Operatori pe biţi
Limbaje de Programare Curs 3 Iteraţia. Reprezentare internă. Operatori pe biţi Dr. Casandra Holotescu Universitatea Politehnica Timişoara Ce discutăm azi... 1 Iteraţia 2 Reprezentare internă 3 Operaţii
SERII NUMERICE. Definiţia 3.1. Fie (a n ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0
SERII NUMERICE Definiţia 3.1. Fie ( ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0 şirul definit prin: s n0 = 0, s n0 +1 = 0 + 0 +1, s n0 +2 = 0 + 0 +1 + 0 +2,.......................................
Erori si incertitudini de măsurare. Modele matematice Instrument: proiectare, fabricaţie, Interacţiune măsurand instrument:
Erori i incertitudini de măurare Sure: Modele matematice Intrument: proiectare, fabricaţie, Interacţiune măurandintrument: (tranfer informaţie tranfer energie) Influente externe: temperatura, preiune,
Valori limită privind SO2, NOx şi emisiile de praf rezultate din operarea LPC în funcţie de diferite tipuri de combustibili
Anexa 2.6.2-1 SO2, NOx şi de praf rezultate din operarea LPC în funcţie de diferite tipuri de combustibili de bioxid de sulf combustibil solid (mg/nm 3 ), conţinut de O 2 de 6% în gazele de ardere, pentru
prin egalizarea histogramei
Lucrarea 4 Îmbunătăţirea imaginilor prin egalizarea histogramei BREVIAR TEORETIC Tehnicile de îmbunătăţire a imaginilor bazate pe calculul histogramei modifică histograma astfel încât aceasta să aibă o
Sisteme diferenţiale liniare de ordinul 1
1 Metoda eliminării 2 Cazul valorilor proprii reale Cazul valorilor proprii nereale 3 Catedra de Matematică 2011 Forma generală a unui sistem liniar Considerăm sistemul y 1 (x) = a 11y 1 (x) + a 12 y 2
CIRCUITE COMBINAŢIONALE UZUALE
Arhitectura calculatoarelor Lucrarea de laborator Nr. 3. 1 CIRCUITE COMBINAŢIONALE UZUALE 1. Scopul lucrării Lucrarea prezintă unele circuite combinaţionale uzuale şi utilizarea acestor circuite la implementarea
COLEGIUL NATIONAL CONSTANTIN CARABELLA TARGOVISTE. CONCURSUL JUDETEAN DE MATEMATICA CEZAR IVANESCU Editia a VI-a 26 februarie 2005.
SUBIECTUL Editia a VI-a 6 februarie 005 CLASA a V-a Fie A = x N 005 x 007 si B = y N y 003 005 3 3 a) Specificati cel mai mic element al multimii A si cel mai mare element al multimii B. b)stabiliti care
Componente şi Circuite Electronice Pasive. Laborator 4. Măsurarea parametrilor mărimilor electrice
Laborator 4 Măsurarea parametrilor mărimilor electrice Obiective: o Semnalul sinusoidal, o Semnalul dreptunghiular, o Semnalul triunghiular, o Generarea diferitelor semnale folosind placa multifuncţională
Componente şi Circuite Electronice Pasive. Laborator 3. Divizorul de tensiune. Divizorul de curent
Laborator 3 Divizorul de tensiune. Divizorul de curent Obiective: o Conexiuni serie şi paralel, o Legea lui Ohm, o Divizorul de tensiune, o Divizorul de curent, o Implementarea experimentală a divizorului
FLUXURI MAXIME ÎN REŢELE DE TRANSPORT. x 4
FLUXURI MAXIME ÎN REŢELE DE TRANSPORT Se numeşte reţea de transport un graf în care fiecărui arc îi este asociat capacitatea arcului şi în care eistă un singur punct de intrare şi un singur punct de ieşire.
Examen AG. Student:... Grupa:... ianuarie 2011
Problema 1. Pentru ce valori ale lui n,m N (n,m 1) graful K n,m este eulerian? Problema 2. Să se construiască o funcţie care să recunoască un graf P 3 -free. La intrare aceasta va primi un graf G = ({1,...,n},E)
1.7. AMPLIFICATOARE DE PUTERE ÎN CLASA A ŞI AB
1.7. AMLFCATOARE DE UTERE ÎN CLASA A Ş AB 1.7.1 Amplificatoare în clasa A La amplificatoarele din clasa A, forma de undă a tensiunii de ieşire este aceeaşi ca a tensiunii de intrare, deci întreg semnalul
Arhitectura Calculatoarelor
Universitatea din Craiova Facultatea de Automatică, Calculatoare și Electronică Catedra de Ingineria Calculatoarelor și Comunicații Arhitectura Calculatoarelor Concepte fundamentale Structura unui calculator
Circuite logice programabile
82 Tabelul 3.12. Tabelul de funcţionare al circuitului 74155. Selecţie Strobare Date Ieşiri B A 1G 1C 1Y 1 01Y 1Y 21Y 3 x x 1 x 1 1 1 1 0 0 0 1 0 1 1 1 0 1 0 1 1 0 1 1 1 0 0 1 1 1 0 1 1 1 0 1 1 1 1 0 x
Ecuatii exponentiale. Ecuatia ce contine variabila necunoscuta la exponentul puterii se numeste ecuatie exponentiala. a x = b, (1)
Ecuatii exponentiale Ecuatia ce contine variabila necunoscuta la exponentul puterii se numeste ecuatie exponentiala. Cea mai simpla ecuatie exponentiala este de forma a x = b, () unde a >, a. Afirmatia.
Arhitectura Calculatoarelor. Fizică - Informatică an II. 2. Circuite logice. Copyright Paul GASNER 1
Arhitectura Calculatoarelor Fizică - Informatică an II gasner@uaic.ro 2. Circuite logice Copyright Paul GASNER 1 Funcţii booleene Porţi logice Circuite combinaţionale codoare şi decodoare Cuprins multiplexoare
Aparate de măsurat. Măsurări electronice Rezumatul cursului 2. MEE - prof. dr. ing. Ioan D. Oltean 1
Aparate de măsurat Măsurări electronice Rezumatul cursului 2 MEE - prof. dr. ing. Ioan D. Oltean 1 1. Aparate cu instrument magnetoelectric 2. Ampermetre şi voltmetre 3. Ohmetre cu instrument magnetoelectric
4.2. CIRCUITE LOGICE ÎN TEHNOLOGIE INTEGRATĂ
4.2. CIRCUITE LOGICE ÎN TEHNOLOGIE INTEGRTĂ În prezent, circuitele logice se realizează în exclusivitate prin tehnica integrării monolitice. În funcţie de tehnologia utilizată, circuitele logice integrate
Subiecte Clasa a V-a
(40 de intrebari) Puteti folosi spatiile goale ca ciorna. Nu este de ajuns sa alegeti raspunsul corect pe brosura de subiecte, ele trebuie completate pe foaia de raspuns in dreptul numarului intrebarii
V O. = v I v stabilizator
Stabilizatoare de tensiune continuă Un stabilizator de tensiune este un circuit electronic care păstrează (aproape) constantă tensiunea de ieșire la variaţia între anumite limite a tensiunii de intrare,
Laborator 11. Mulţimi Julia. Temă
Laborator 11 Mulţimi Julia. Temă 1. Clasa JuliaGreen. Să considerăm clasa JuliaGreen dată de exemplu la curs pentru metoda locului final şi să schimbăm numărul de iteraţii nriter = 100 în nriter = 101.
Seminariile Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reziduurilor
Facultatea de Matematică Calcul Integral şi Elemente de Analiă Complexă, Semestrul I Lector dr. Lucian MATICIUC Seminariile 9 20 Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reiduurilor.
RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii transversale, scrisă faţă de una dintre axele de inerţie principale:,
REZISTENTA MATERIALELOR 1. Ce este modulul de rezistenţă? Exemplificaţi pentru o secţiune dreptunghiulară, respectiv dublu T. RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii
Curs 2 Şiruri de numere reale
Curs 2 Şiruri de numere reale Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi" Iaşi 2014 Convergenţă şi mărginire Teoremă Orice şir convergent este mărginit. Demonstraţie Fie (x n ) n 0 un
Lectia VI Structura de spatiu an E 3. Dreapta si planul ca subspatii ane
Subspatii ane Lectia VI Structura de spatiu an E 3. Dreapta si planul ca subspatii ane Oana Constantinescu Oana Constantinescu Lectia VI Subspatii ane Table of Contents 1 Structura de spatiu an E 3 2 Subspatii
Circuite cu tranzistoare. 1. Inversorul CMOS
Circuite cu tranzistoare 1. Inversorul CMOS MOSFET-urile cu canal indus N si P sunt folosite la familia CMOS de circuite integrate numerice datorită următoarelor avantaje: asigură o creştere a densităţii
10 REPREZENTAREA DIGITALĂ
10 REPREZENTAREA DIGITALĂ 10.1 Niveluri logice În reprezentarea digitală pentru exprimarea cantitativă a informaţiei se folosesc semnale electrice care pot avea doar două niveluri de tensiune: un nivel
Curs 2 DIODE. CIRCUITE DR
Curs 2 OE. CRCUTE R E CUPRN tructură. imbol Relația curent-tensiune Regimuri de funcționare Punct static de funcționare Parametrii diodei Modelul cu cădere de tensiune constantă Analiza circuitelor cu
Asupra unei inegalităţi date la barajul OBMJ 2006
Asupra unei inegalităţi date la barajul OBMJ 006 Mircea Lascu şi Cezar Lupu La cel de-al cincilea baraj de Juniori din data de 0 mai 006 a fost dată următoarea inegalitate: Fie x, y, z trei numere reale
Conice. Lect. dr. Constantin-Cosmin Todea. U.T. Cluj-Napoca
Conice Lect. dr. Constantin-Cosmin Todea U.T. Cluj-Napoca Definiţie: Se numeşte curbă algebrică plană mulţimea punctelor din plan de ecuaţie implicită de forma (C) : F (x, y) = 0 în care funcţia F este
riptografie şi Securitate
riptografie şi Securitate - Prelegerea 21.2 - Sistemul de criptare ElGamal Adela Georgescu, Ruxandra F. Olimid Facultatea de Matematică şi Informatică Universitatea din Bucureşti Cuprins 1. Scurt istoric
2. Circuite logice 2.2. Diagrame Karnaugh. Copyright Paul GASNER 1
2. Circuite logice 2.2. Diagrame Karnaugh Copyright Paul GASNER Diagrame Karnaugh Tehnică de simplificare a unei expresii în sumă minimă de produse (minimal sum of products MSP): Există un număr minim
CIRCUITE INTEGRATE MONOLITICE DE MICROUNDE. MMIC Monolithic Microwave Integrated Circuit
CIRCUITE INTEGRATE MONOLITICE DE MICROUNDE MMIC Monolithic Microwave Integrated Circuit CUPRINS 1. Avantajele si limitarile MMIC 2. Modelarea dispozitivelor active 3. Calculul timpului de viata al MMIC
11.3 CIRCUITE PENTRU GENERAREA IMPULSURILOR CIRCUITE BASCULANTE Circuitele basculante sunt circuite electronice prevăzute cu o buclă de reacţie pozitivă, folosite la generarea impulsurilor. Aceste circuite
UTILIZAREA CIRCUITELOR BASCULANTE IN NUMARATOARE ELECTRONICE
COLEGIUL UCECOM SPIRU HARET BUCURESTI UTILIZAREA CIRCUITELOR BASCULANTE IN NUMARATOARE ELECTRONICE Elev : Popa Maria Clasa :a-xi-a A Indrumator:prof.Chirescu Emil APLICATII PRACTICE CE POT FI REALIZATE
EDITURA PARALELA 45 MATEMATICĂ DE EXCELENŢĂ. Clasa a X-a Ediţia a II-a, revizuită. pentru concursuri, olimpiade şi centre de excelenţă
Coordonatori DANA HEUBERGER NICOLAE MUŞUROIA Nicolae Muşuroia Gheorghe Boroica Vasile Pop Dana Heuberger Florin Bojor MATEMATICĂ DE EXCELENŢĂ pentru concursuri, olimpiade şi centre de excelenţă Clasa a
I3: PROBABILITǍŢI - notiţe de curs
I3: PROBABILITǍŢI - notiţe de curs Ştefan Balint, Eva Kaslik, Simina Mariş Cuprins Experienţǎ şi evenimente aleatoare 3 2 Eveniment sigur. Eveniment imposibil 3 3 Evenimente contrare 4 4 Evenimente compatibile.
Definiţia 1.1 Fiind date mulţimile A (alfabetul sursă) şi B (alfabetul cod), o codificare
Prelegerea 1 Codificare şi decodificare 1.1 Codificare Definiţia 1.1 Fiind date mulţimile A (alfabetul sursă) şi B (alfabetul cod), o codificare este o aplicaţie injectivă K : A B. Elementele mulţimii
Platformă de e learning și curriculă e content pentru învățământul superior tehnic
Platformă de e learning și curriculă e content pentru învățământul superior tehnic Proiectarea Logică 24. Echivalenta starilor STARILE ECHIVALENTE DIN CIRCUITELE SECVENTIALE Realizarea unui circuit secvenţial
Noţiuni introductive
Metode Numerice Noţiuni introductive Erori. Condiţionare numerică. Stabilitatea algoritmilor. Complexitatea algoritmilor. Metodele numerice reprezintă tehnici prin care problemele matematice sunt reformulate
Fig Impedanţa condensatoarelor electrolitice SMD cu Al cu electrolit semiuscat în funcţie de frecvenţă [36].
Componente şi circuite pasive Fig.3.85. Impedanţa condensatoarelor electrolitice SMD cu Al cu electrolit semiuscat în funcţie de frecvenţă [36]. Fig.3.86. Rezistenţa serie echivalentă pierderilor în funcţie
Capitolul 4 PROPRIETĂŢI TOPOLOGICE ŞI DE NUMĂRARE ALE LUI R. 4.1 Proprietăţi topologice ale lui R Puncte de acumulare
Capitolul 4 PROPRIETĂŢI TOPOLOGICE ŞI DE NUMĂRARE ALE LUI R În cele ce urmează, vom studia unele proprietăţi ale mulţimilor din R. Astfel, vom caracteriza locul" unui punct în cadrul unei mulţimi (în limba
Exemple de probleme rezolvate pentru cursurile DEEA Tranzistoare bipolare cu joncţiuni
Problema 1. Se dă circuitul de mai jos pentru care se cunosc: VCC10[V], 470[kΩ], RC2,7[kΩ]. Tranzistorul bipolar cu joncţiuni (TBJ) este de tipul BC170 şi are parametrii β100 şi VBE0,6[V]. 1. să se determine
Laborator 6. Integrarea ecuaţiilor diferenţiale
Laborator 6 Integrarea ecuaţiilor diferenţiale Responsabili: 1. Surdu Cristina(anacristinasurdu@gmail.com) 2. Ştirbăţ Bogdan(bogdanstirbat@yahoo.com) Obiective În urma parcurgerii acestui laborator elevul
Cursul nr. 6. C6.1 Multiplexorul / Selectorul de date
C61 Multiplexorul / Selectorul de date Cursul nr 6 Multiplexorul (MUX) este un circuit logic combinańional care selectează una din intrările sale pentru a o transmite la ieşirea unică Schema de principiu
Să se arate că n este număr par. Dan Nedeianu
Primul test de selecție pentru juniori I. Să se determine numerele prime p, q, r cu proprietatea că 1 p + 1 q + 1 r 1. Fie ABCD un patrulater convex cu m( BCD) = 10, m( CBA) = 45, m( CBD) = 15 și m( CAB)
I3: PROBABILITǍŢI - notiţe de curs
I3: PROBABILITǍŢI - notiţe de curs Ştefan Balint, Eva Kaslik, Simina Mariş Cuprins Experienţǎ şi evenimente aleatoare 3 2 Eveniment sigur. Eveniment imposibil 3 3 Evenimente contrare 4 4 Evenimente compatibile.
3. Momentul forţei în raport cu un punct...1 Cuprins...1 Introducere Aspecte teoretice Aplicaţii rezolvate...4
SEMINAR 3 MMENTUL FRŢEI ÎN RAPRT CU UN PUNCT CUPRINS 3. Momentul forţei în raport cu un punct...1 Cuprins...1 Introducere...1 3.1. Aspecte teoretice...2 3.2. Aplicaţii rezolvate...4 3. Momentul forţei
Laborator 4 suport teoretic Tipuri de date utilizate în limbajul de programare C.
Laborator 4 suport teoretic Tipuri de date utilizate în limbajul de programare C. Toate valorile parametrilor unei probleme, adică datele cu care operează un program, sunt reprezentate în MO sub formă
3.4. Minimizarea funcţiilor booleene
56 3.4. Minimizarea funcţiilor booleene Minimizarea constă în obţinerea formei celei mai simple de exprimare a funcţiilor booleene în scopul reducerii numărului de circuite şi a numărului de intrări ale
GENERATOR DE SECVENŢE BINARE PSEUDOALEATOARE
GENERATOR DE SECVENŢE BINARE PSEUDOALEATOARE 1. Consideraţii teoretice Zgomotul alb este un proces aleator cu densitate spectrală de putere constantă într-o bandă infinită de frecvenţe. Zgomotul cvasialb
3.4. Minimizarea funcţiilor booleene
56 sau: F = ABC + ABC + ABC Complementând din nou, se obţine funcţia iniţială: F = ABC + ABC + ABC = ABC ABC ABC = ( A + B + C)( A + B + C)( A + B + C) sau F = S 4 S5 S6 3.4. Minimizarea funcţiilor booleene
1. Reprezentarea numerelor şi operaţii aritmetice în sisteme de calcul.
1. Reprezentarea numerelor şi operaţii aritmetice în sisteme de calcul. 1.1. Sisteme de reprezentare ale numerelor: a) Sistemul zecimal: baza sistemului este 10 simbolii (digiţi) sistemului sunt cifrele
10. Unitati de executie integrate
10. Unitati de executie integrate Unitatile de executie se prezinta sub forma unor circuite integrate pe scara medie/larga. In unele cazuri ele sunt structuratein in transe de biti astfel incat, prin concatenare