Curs Complet (265 Pag)

265
1.INTRODUCERE. 1.1. 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. ) 1642. B. Pascal realizeaza o masina de adunat. 1694. von Leibniz construieste o masina de adunat si inmultit. 1823. 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 ). 1872 E. Barbour realizeaza prima masina de calcul cu imprimanta. 1892. W. Burroughs construieste o masina de calcul de birou perfectionata. 1912. 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

description

Verilog Veriwell Logic Gates

Transcript of Curs Complet (265 Pag)

Page 1: Curs Complet (265 Pag)

1.INTRODUCERE.

1.1. 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. )

• 1642. B. Pascal realizeaza o masina de adunat.

• 1694. von Leibniz construieste o masina de adunat si inmultit.

• 1823. 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 ).

• 1872 E. Barbour realizeaza prima masina de calcul cu imprimanta.

• 1892. W. Burroughs construieste o masina de calcul de birou perfectionata.

• 1912. 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

Page 2: Curs Complet (265 Pag)

electric ).

• 1930. Productia de masa a masinilor electromecanice de calculat prevazute cu operatiile:

adunare, scadere, inmultire, impartire, radacina patrata, subtotal etc.

• 1937 - 1945. 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: 20 - 1000 de tranzistori pe pastila de Si), larga

(LSI: 1000 – 50.000 de tranzistori pe pastila de SI), foarte larga (VLSI: 50.000 – 100.0000

de tranzistori pe pastila de Si) si ultra larga (ULSI: peste 1.000.000 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;

Page 3: Curs Complet (265 Pag)

- 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 ( 1946-1956 ).

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-41,

CIFA 101-102, MARICCA, MECIPT-1 .

4. Tehnologia telecomunicatiilor: teletype, telefon.

5. Performantele calculatoarelor: capacitate memorie 2 Koct, viteza de operare 10.000

instr/s.

1 Denumirile calculatoarelor produse in Romania sunt prezentate cu litere cursive

Page 4: Curs Complet (265 Pag)

Generatia a II-a ( 1957 - 1963 ).

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-200.

4. Tehnologia telecomunicatiilor: transmisiuni numerice, modulatie in coduri de impulsuri.

5. Performantele calculatoarelor: capacitatea memoriei 32 Koct,viteza de operare

2.000.000 instr/s.

Generatia a III-a ( 1964 -1981 )

1. Hardware calculatoare: circuite integrate, memorii semiconductoare, cablaj imprimat

multistrat, microprocesoare, discuri magnetice, minicalcula-

toare.

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 360-370, 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/4030.

4. 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 ( 1982 - 1989 ).

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 8730.

4. Tehnologia telecomunicatiilor: retele integrate de comunicatii numerice ( digitale ).

5. Performantele calculatoarelor: capacitatea memoriei 8 Moct, viteza de operare 30

mil.instr/s

Page 5: Curs Complet (265 Pag)

Generatia a V-a ( 1990 - ).

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:

Page 6: Curs Complet (265 Pag)

• 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 mm2 . 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.

Page 7: Curs Complet (265 Pag)
Page 8: Curs Complet (265 Pag)
Page 9: Curs Complet (265 Pag)
Page 10: Curs Complet (265 Pag)
Page 11: Curs Complet (265 Pag)

Reprezentarea sistemelor de calcul pe niveluri ierarhice. Nivelul PMS Structuri: retele, sisteme de procesoare multiple, (Processor, calculatoare. Memory Componente: procesoare, memorii, comutatoare, Switches ) traductoare, operatori asupra datelor, legaturi, controlere. Nivelul Subnivelul Aplicatii Structuri: pachete statis tice, ecuatii cu derivate Progra- Limbajelor partiale, simulatoare de sisteme melor. evoluate. energetice. Componente: biblioteci matemetice, rutine, rutine de formatare. Rutine Structuri: functii matematice, pachete pentru

aplicative aplicatii grafice. Componente: subrutine, alocatoare de memorie. Pachete de Structuri: alocatoare de memorie, rutine de I/E, asistenta in sisteme de fisiere. in timpul Componente: apeluri ale sistemului de operare. executiei. Sisteme Structuri: planificatoare, alocatoare, comunicatii. Operare Componente: subrutine, corutine, programe. Subnivelul Structuri: set de instructiuni. ISP Componente: stare memorie, stare procesor, calcul (Instruction adresa efectiva, decodificare Set Processor) 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

Page 12: Curs Complet (265 Pag)

Circuite combina- Structuri: codificatoare, decodificatoare,

tionale. operatori asupra datelor. Componente: porti logice. Nivelul circuitelor. Structuri: amplificatoare,elemente de intirziere, orologiu /ceas, porti. Componente: tranzistoare, relee, rezistente, capaci-

tati. Bibliografie: 1. A.Petrescu. Calculatoare numerice. Note de curs.1999- 2000-2001, ( site-ul: www.csit-

sun.pub.ro si pe suport magnetic). 2. A.Petrescu. I. Francisc, Z. Racovita. Initiere in Structura Calculatoarelor Electronice.

Editura Teora. 1996. 3. A.S. Tanenbaum. Organizarea Structurata a Calculatoarelor. Editura AGORA, 1999. 4. L.N. Vintan. Arhitecturi de Procesoare cu Paralelism la Nivelul Instructiunilor. Editura

Academiei Romane. 2000. 5. D. Grigoras. Calcul Paralel. De la sisteme la programarea aplicatiilor. AGORA. 2000. 6. J. Hennessy, D. Paterson. Computer Architecture. A Quantitative Approach. 2nded.

1996. Morgan Kaufmann Publishers, Inc. 7. Z.F. Baruch. Sisteme de intrare/iesire ale calculatoarelor. Editura Albastra. 2000 8. S.G. Shiva. Computer Design and Architecture. 3rd Ed. Marcel Dekker Publishing

House. 2000. 9. J. Hennessy, D. Paterson. Computer Organization and Design. The Hardware/Software

Interface. 2nded.. 1998. Morgan Kaufmann Publishers, Inc. 10. R. Baron, L. Higbie. Computer Architecture. 1992. Addison Wesley Publishing

Company. 11. M. Morris Mano, Ch. R. Kime. Logic and Computer Design Fundamentals 2nd ed.

Prentice Hall International. Inc. 12. David Van den Bout. The Practical XILINX Designer Lab Book.Version 1.5, 1999.

Prentice Hall. 13. V..P. Heuring, H. F. Jordan. Computer Systems Design and Architecture. Addison

Wesley Longman, Inc. 1997.

Page 13: Curs Complet (265 Pag)

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 - 1928,

Kolmogorov - 1942, Wiener - 1948, Shannon - 1949 ).

Se considera un sistem reprezentand o multime formata din n obiecte, avand proprietatea

ca fiecare obiect poseda o probabilitate independenta pi de aparitie.

Incertitudinea H asociata acestui sistem este definita ca:

n H = - ∑ pi log2 (pi), 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. log2 (1/8) = - log2 (1/8) = log2 (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: log2(2/1) =

1 bit.

Page 14: Curs Complet (265 Pag)

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:

n<4? Da 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 1 111 2 110 3 101 4 100 5 011 6 010 7 001 8 000 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.

Page 15: Curs Complet (265 Pag)

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:

N

entropia = ∑ (Mi/N).log2(N/Mi), i=1

unde:

- (Mi/N) reprezinta probabilitatea mesajului i, iar

- log2(N/Mi) 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:

Page 16: Curs Complet (265 Pag)

10

∑ (1/10).log2(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).log2(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 = ∑ 2i.bi i=0

unde bi constituie rangul i (bitul i) al reprezentarii.

Pentru numarul binar:

211 210 29 28 27 26 25 24 23 22 21 20

0 1 1 0 1 1 1 0 1 0 1 0

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

Page 17: Curs Complet (265 Pag)

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. 000 - 0 0000 - 0 1000 - 8 001 - 1 0001 - 1 1001 - 9 010 - 2 0010 - 2 1010 - a 011 - 3 0011 - 3 1011 - b 100 - 4 0100 - 4 1100 - c 101 - 5 0101 - 5 1101 - d 110 - 6 0110 - 6 1110 - e 111 - 7 0111 - 7 1111 - f Astfel, numarul binar: 011010111001(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

20 21 22 23 …. …. …. 2n-2 -2n-1 bit de semn Gama de reprezentare:[ -2n-1 , 2n-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) 00101111(2)

-47(10) 11010001(2)

Page 18: Curs Complet (265 Pag)

Reprezentarea numerelor intregi cu semn, in complementul fata de 2, permite utilizarea

aceleiasi proceduri mod 2n, 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 = -23 + 22 + 20 + 2-4 = -8 + 4 + 1 + 0,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 (pi) 1/2 1/4 1/8 1/8 Codificare 0 11 100 101 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 0 1 0 1 B C D

Page 19: Curs Complet (265 Pag)

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: 12 12

imed = ∑ (Mj/N).log2(N/Mj) = ∑ (pj).log2(1/pj) = 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

Page 20: Curs Complet (265 Pag)

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:

dmed = (1/36).5 + (2/36).4 + (3/36).3 + (4/36).3 + (5/36).3 + (6/36).3 +

+ (5/36).3 + (4/36).3 + (3/36).4 + (2/36).4 + (1/36).5 = 3,306

Rezultatul obtinut: dmed = 3,306 se apropie destul de mult de imed = 3,275.

In continuare se pune problema gasirii unor metode si mai eficiente de codificare.

Page 21: Curs Complet (265 Pag)

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.

Page 22: Curs Complet (265 Pag)

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?

Page 23: Curs Complet (265 Pag)

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.

Page 24: Curs Complet (265 Pag)

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):

Page 25: Curs Complet (265 Pag)

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.

Page 26: Curs Complet (265 Pag)

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;

Page 27: Curs Complet (265 Pag)

- 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:

x0, x1, x2,..,xk,...., dupa cum urmeaza:

x0 = x si x(k+1) = f(xk), pentru k > 0.

Se poate spune ca secventa de calcul se termina in k pasi, daca k este cel mai mic intreg

pentru care xk este in E. In acest caz se spune ca intrarea x produce iesirea xk.

Se observa ca daca xk ⊂ E, la fel si x(k+1) ⊂ E, intrucat, conform definitiei date mai sus,

x(k+1) = xk.

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.

Page 28: Curs Complet (265 Pag)

Se vor folosi doua variabile de stare pentru calcul: xc ( x-curent ), xm (x-maxim ).

ALGORITM: MAX.

intrari: A(i) , 1 ≤ i ≤ n,

iesiri: MAX,

var.de stare: xc, xm .

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. xm A(1); xc A(2);

4. if xm < xc then xm xc

5. xc A(i)

6. i i+1

7. if i > n then MAX xm 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.

Page 29: Curs Complet (265 Pag)

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 1

10. 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.

Page 30: Curs Complet (265 Pag)

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]

MAX

n

RESET Ceas RD … … .. Comenzi

Unitatea de Comanda

start … …

RESET

RC SUM/DIF N

RM RD UNU

MAX CNT

CEAS

AUTOMAT DE COMANDA

START

Page 31: Curs Complet (265 Pag)

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 START=0

start START=1

N = 0

N ≠ 0

RD < 0

RD ≥ 0

1.

2.

3.

4.

5.

7.

8.

9.

6.

10

Page 32: Curs Complet (265 Pag)

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: a0, a1, a2,....,ai, 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: F0, F1, F2,....,Fp.

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 Fi.

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:

Page 33: Curs Complet (265 Pag)

Informatia de prelucrat Instructiunea curenta

aI ai Fi

Cap citire/

scriere

.

. aj d Fj

. Informatia prelucrata Instructiunea urmatoare

. Banda infinita/Memoria

.

. -

0 Comanda deplasarii

+

Functionare. Incepand cu o informatie ai, de pe banda, masina intra in functiune. Daca

operarea are loc in timp finit, adica se va intalni simbolul A, masina va prelucra

informatia ai. 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 < ai, Fi > si tripletii de iesire < aj, Fj, d >. In fiecare ciclu de lucru operatorul Ωefectueaza transformarea:

< ai, Fi > < aj, Fj, d >,

simbolul ai fiind inlocuit cu simbolul aj.

Banda este deplasata conform codului simbolului d, iar Fj este stocat in memoria M, pana

in ciclul urmator.

In vederea executiei, un algoritm trebuie descris sub forma urmatorului tablou:

Operatorul Ω M

d

Page 34: Curs Complet (265 Pag)

Fi

ai aj Fj 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 Fi contine functia F, care asigura incrementarea si functia A

care comanda oprirea.

Tabelul de functionare este urmatorul

Informatia ai Instructiunea Fi

0 1 A 0 1 2 A 0 2 3 A 0 3 4 A 0 4 5 A 0 5 6 A 0 6 7 A 0 7 8 A 0

8 9 A 0 9 0 F - V 1 A 0

Page 35: Curs Complet (265 Pag)

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.

Page 36: Curs Complet (265 Pag)

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 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.

Nivelul aplicatiilor/functiilor primitive masina de baza ( realizata in hardware ) capabila sa execute operatii elementare.

Page 37: Curs Complet (265 Pag)

La nivelul masinii conventionale se defineste notiunea de arhitectura a unui calculator numericprin 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 8080.

7 0 7 0

7 0

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

PI0

……..

PI255

PE0

…….

PE255

F

A

B

D

C

E

H L

SP

PC

Page 38: Curs Complet (265 Pag)

( 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:

7 6 5 4 3 2 1 0

7 6 5 4 3 2 1 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:

15 8 7 0

AX: Acumulator

BX: Registru - baza

CX: Registru - contor

DX: Registru - date

Indicator - stiva

Indicator - baza

Indicator - sursa

Indicator - destinatie

Indicatorii de conditii

15 12 11 10 9 8 7 6 5 4 3 2 1 0

S Z * AC * P * CY

BH BL

CH CL

DH DL

AH AL

SP

BP

SI

DI

* * O D I T S Z * A * P * C

Page 39: Curs Complet (265 Pag)

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.

15 0

Registrul segmentului de cod

Registrul segmentului de date Registrul segmentului stivei

Registrul segmentului suplimentar

15 0 Indicator de instructiune

(Contorul Programului)

Microprocesorul 8086 mai poseda cate doua tablouri de porturi de intrare/iesire, a cate 65536

octeti fiecare:

65536 Porturi de Intrare organizate pe octe

65536 Porturi de Iesire organizate pe octeti

Nota: Porturile de I/E pot fi organizate si pe cuvinte de 16 biti, la dimensiunea de 32768 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:

CS

DS

SS

ES

IP

PI0, ……………,.PI65536

PE0, ……………,.PE65536

Page 40: Curs Complet (265 Pag)

0 31

Registrele Generale

Cuvantul de stare program ( PSW ): 0 ……………………………….8 9 ……………………………………………….31

32 33 34 35 36 37 38 39 40 41

42 43 44 ………….47 48 …………………..54 55 56 57 …63

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;

RG0

…………………………………………………..

RG15

DI DS DD DB Z S D C IS IE

CE NP CA NIT PM MR ………………………..

PC

Page 41: Curs Complet (265 Pag)

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.

Page 42: Curs Complet (265 Pag)

Aceste caracteristici prezintaimportantapentru studiul sistemelor de calcul cu ajutorul metodelor

cercetarii operationale, in numeroase aplicatii ( multiprogramare, multiprelucrare, timp di-

vizat, 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 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 furni-

zeaza 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 reprezen-

tare etc ).

UI UCe UE

Page 43: Curs Complet (265 Pag)

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/

Instr. Instr. Date

Date Rez. Comenzi

Cond Cond

Com

Comenzi

Conditii

Comenzi

date /adrese

instructiuni

comenzi,

conditii/indicatori de stare/stari.

SE SIEPI EPE UM

UE UC

Page 44: Curs Complet (265 Pag)

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

(m-1) 0

m

Registrul de adrese

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 locala-

proprie (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.

Celula 0

Celula 1

Celula i

Celula 2(m -1)

Adresa i

Page 45: Curs Complet (265 Pag)

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

Page 46: Curs Complet (265 Pag)

- sistem de calcul in care unele terminale ( echipamentele de I/E ) transfera date cu memoriadirect ( T1 ) sau prin intermediul procesorului ( T2, T3 ):

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:

M S1 P S2 K2 T2

K3 T3

T1 K1

COP ADRESA

Page 47: Curs Complet (265 Pag)

Instructiunea cu doua adrese:

Instructiunea cu trei adrese:

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

COP ADRESA1 ADRESA2

COP ADRESA1 ADRESA2 ADRESA3

Page 48: Curs Complet (265 Pag)

( 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 efec-

tive. 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:

0 1 3 4 7 8 9 15 16 31

unde:

- I poate lua valoarea 0 in cazul adresarii directe si 1, in cazul adresarii indirecte;

I B Q X F D

Page 49: Curs Complet (265 Pag)

- 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.

Page 50: Curs Complet (265 Pag)
Page 51: Curs Complet (265 Pag)

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 Iesire: Date/Rezultate

Semnale de Conditii

comanda

Intrare: Conditii 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 dupacum urmeaza:

Registre si Logica aferenta(Sectiunea /Unitatea de Date/Executie)

Circuit secvential de comanda (Sectiunea/Unitatea de Comanda)

Page 52: Curs Complet (265 Pag)

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.

In continuare se vor considera elemente bistabile de tip master-slave, atat pentru sectiunea de

date, cat si pentru sectiunea de comanda.

7476

2

4

1

16

15

14

PR

E

J

CLK

K

CLR

Q

Q

Data

Data

Ceas Data (J/K)

Ceas (CLK)Iesire

Iesire (Q)

7474

3

2

4

5

6CLK

CLR

D PR

E

Q

QCeas

Ceas (CLK)

Iesire (Q)

IesireData

Data (D)

Page 53: Curs Complet (265 Pag)

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.

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 ( RA0:1 ),in registrul

destinatie RB[2] ( RB0:1 ):

i. RB0:1 RA0: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:

7408

1

23

Circuit Secvential (Unitate e Comanda)

Conditii

Ceas

SCN(i-1) SCNiSCIi

Ceas

Ceas

SCN(i-1)

SCNi

SCIiSCIi

SCI(i-1)

Page 54: Curs Complet (265 Pag)

Diagrama de timp care arata modul in care noua informatie se transfera in RB este data mai jos:

74762

4

1

16

3

15

14

PR

E

J

CLK

K

CLR

Q

Q

7476

2

4

1

16

3

15

14

PR

E

J

CLK

K

CLR

Q

Q

7476

2

4

1

16

3

15

14

PR

E

J

CLK

K

CLR

Q

Q

7476

2

4

1

16

3

15

14

PR

E

J

CLK

K

CLR

Q

Q

7408

1

23

RA0

RA1 RB1

RB0

SCN1

Ceas

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7408

1

23

RA0

RA1 RB1

RB0

SCN1

Ceas

Ceas

SCNi

SCIi

Vechea Valoare din RB \\

Noua Valoare din RB

Page 55: Curs Complet (265 Pag)

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.

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:

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7408

1

23

7408

1

23

7408

1

23

7408

1

23

U9A

7432

1

23

U10A

7432

1

23

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7408

1

23

7432

1

23

RA0

RA1

RB0

RB1

SCN1

SCN2

SCN2

SCN1

CLK

Page 56: Curs Complet (265 Pag)

SCN1, SCN2 00 01 11 10 SCN3 Functia de excitatie Di este data de expresia:

0 Di = SCN1 ∪ RBi .SCN3

1

Aceasta va duce la urmatoarea implementare:

In cazul in care se urmareste implementarea operatiei elementare:

j. RAi RBi.RCi

se poate folosi schema de mai jos:

RBi

* *

*

* 1

* *

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7408

1

23

U41A

7408

1

23

RAi

RBi

RCi

SCNj

SCIjCeas

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

31

2

4

5

6CLK

CLR

D PR

E

Q

Q

7432

1

23

7432

1

23

7408

1

23

7408

1

23

U7A

7408

1

231

28

9

RA0

RA1

RB0

RB1

SCN1

SCN1

SCN2

SCN3

SCN3

CLK

Page 57: Curs Complet (265 Pag)

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 Functia C(p-1) ………C0

C[p] F0 Z = F0(X) 0 …………0 0

n Z[n] F1 Z = F1(X) 0 …………0 1 ….. ………… ……………… F(2^p-1) Z = F(2^p-1)(X) 0 …………0 0

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 2p 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 ------

4 Z[4] ¼ din pastila 7408

CLC

7408

7408

1

23

Page 58: Curs Complet (265 Pag)

Circuitul de mai sus poate fi reprezentat in conditiile in care intrarile A[4] sunt controlate decatre acelasi semnal si devin, astfel, intrari de comanda:

A[1] 1 B[4] Operatia Descrierea Comanda

4 A[4] 4 A[1]

ZERO Z = 0000 0

TRUE Z = B 1

4 Z[4]

Circuitul sumator 7483.

Modelul Componenta din Tabelul de descriere

biblioteca

A[4] B[4] C0[1] Operatia Descrierea Comanda

4 4 1 ADD C4,S = ADD(A,B,C0) -----

C4[1] 1 4 S[4]

Circuitul XOR (7486).

Modelul Componenta din Tabelul de descriere

biblioteca

A[4] B[4] Operatia Descrierea Comanda

4 4 XOR Z = A ⊕ B ------

4 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.

7408

7483

7483A

138

101647

1113

14

15

2

6

9

A4A3A2A1B4B3B2B1C0

C4

SUM4

SUM3

SUM2

SUM1

7486

7486

1

23

Page 59: Curs Complet (265 Pag)

A[1] 1 B[4] Operatia Descrierea Comanda

4 A[4] 4 A[1]

TRUE Z = B 0

NEG Z = B 1

4 Z[4]

Multiplexorul 74157

Modelul Componenta din Tabelul de descriere

biblioteca

A[4] B[4] Operatia Descrierea Comanda

S=A/B 4 4 G S=A/B SELA Z = A 0 0

G SELB Z = B 0 1

4 Z[4] STROB Z = 0000 1 *

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 Functia C(p-1) ………C0

CLK F0 Q F0(X) 0 ………..0 0

n Q[n] F1 Q F1(X) 0 ………..0 1 ….. ………… ……………… F(2^p-1) Q F(2^p-1)(X) 0 ………..0 0

7486

74157

74157

4

7

9

12

2356

11101413

151

1Y

2Y

3Y

4Y

1A1B2A2B3A3B4A4B

STROBEGSELECTAB

CLS

Page 60: Curs Complet (265 Pag)

Circuit bistabil JK (7473).

Modelul Componenta din Tabelul de descriere

biblioteca

Operatia Descrierea Comanda

J J K K NOP Q Q 0 0

CLK CLEAR Q 0 0 1

4 Q[4] PRESET Q 1 1 0

COMPL Q Q 1 1

Contor binar 74163

Modelul Componenta din Tabelul de descriere

biblioteca

ENT A[4] Operatia Descrierea Comanda

CLR CLR LOAD ENP ENP NOP Q Q 1 1 0

LOAD INC Q ADD(Q,T) 1 1 1

CLK LOAD Q A 1 0 *

RC0 Q[4] CLEAR Q 0 0 * *

Registru de deplasare 74178

SER A[4] Operatia Descrierea Comanda

SH 1 4 SH LOAD

LOAD NOP Q Q 0 0

CLK LOAD Q A 0 1

4 Q[4] SHIFT Q Q2:0, SER 1 *

Bistab.JK

7473

14

1

3

12

13

J

CLK

KC

LR

Q

Q

74163

3456

21079

1413121115

CLR

ABCD

CLKENTENPLOAD

QAQBQCQD

RCO

74163

74178

Page 61: Curs Complet (265 Pag)

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

SER SER SH LOAD SH NOP Q Q * 0 0

LOAD LOAD Q A * 0 1

CLK SHIFT0 Q Q2:0, 0 0 1 0

Q[4] SHIFT1 Q Q2:0, 1 1 1 0

Registru cu doua intrari multiplexate 74298

Modelul Componenta din Tabelul de descriere

biblioteca

A[4] B[4] Operatia Descrierea Comanda

WS 4 4 WS

CKL LOADA Q A 0

LOADB Q B 1

4 Q[4]

74178

74178

39

11

21

1312

4

6

8

10

5

SERIALLOADSHIFT

ABCD

QA

QB

QC

QD

CLK

74298

74298

10

32419576

11

15

14

13

12

WS

A1A2B1B2C1C2D1D2CLK

QA

QB

QC

QD

Page 62: Curs Complet (265 Pag)

Scheme combinate.

Schema unui sumator/scazator

Schema se bazeaza pe utilizarea a doua circuite: XOR (7486) si ADD (7483)

Operatia Descrierea Comanda

D

ADD Z = C4,ADD(A,B) 0

SUB Z = C4,SUB(A,B) 1

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

4 4

44

4

1

1

DA[4] B[4]

7486

7483C4

Z[4]

C0 1

Page 63: Curs Complet (265 Pag)

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.

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)

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7432

1

23

7432

1

23

7408

1

23

7408

1

23

7408

1

23

7432

1

23

7432

1

23

7408

1

23

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7432

1

23

7432

1

23

7408

1

23

7408

1

23

23

45

1

23

45

1

CLK

CLK

SCN1

SCN1

SCN2

SCN2

SCN4

SCN5

SCN5

SCN5

SCN6

SCN6

SCN6

RA

RB

RC

RD

SCN3

SCN3

SCN4

SCN6

SCN5

Page 64: Curs Complet (265 Pag)

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.

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.

1

23

1

23

1

23

1

23

R

RA

RB

RC

RD

CLK

CLK

D

D

Q

Q

CLK

CLK

MAG/BUS

MAG/BUS = RA

MAG/BUS = RB

RC <- MAG/BUS

RD <- MAG/BUS

+5V

OC

OC

Page 65: Curs Complet (265 Pag)

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 “Tri-

state”, care inlocuiesc circuitele de tip “OC”.

1

23

1

23

1

23

1

23

7474

3

12

45

6CLK

CLR

D PR

EQ

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7474

3

1

2

4

5

6CLK

CLR

D PR

E

Q

Q

7432

1

23

RA

Q

CLK

CLKMAG/BUS

MAG/BUS = RA

MAG/BUS = RB

RC <- MAG/BUS

RD <- MAG/BUS

Page 66: Curs Complet (265 Pag)
Page 67: Curs Complet (265 Pag)
Page 68: Curs Complet (265 Pag)

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 imple-

mentarii 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.

Page 69: Curs Complet (265 Pag)

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

Page 70: Curs Complet (265 Pag)

vor face mentiuni speciale, pozitiile bitilor individuali vor fi specificate prin indici cu originea 0,

plasata in extrema stanga: AC0 ,AC1 ,......,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.

M00 M

01 …….....….......M0

ρ1M-1

...................……..…..……....

.......….……. Mij.......……….

Mρ2M-10 M

ρ2M-11........……. Mρ2M-1

ρ1M-1

Linia i a matricii M se specifica prin notatia Mi sau M<i>, iar coloana j - prin notatia Mj sau

M[j]. Liniile succesive i...k, ale matricii M se noteaza prin Mi:k sau M<i:k>, iar coloanele

succesive j...l - prin Mj: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.

Page 71: Curs Complet (265 Pag)

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 ℜ y ) unde ℜ ∈ <, ≤, =, ≥, > ( 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.

Page 72: Curs Complet (265 Pag)

Notatie Denumire Semnificatie Observatii

X,Y Inlantuire/ X0 ,...,XρX-1 ,Y0 ,....,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 doi.

@/X Reducere X0 @X1 @X2 @............@XρX-1 APL si AHPL

X ← @/M Reducere X i ← @/Mi AHPL si APL linie

X ← @//M Reducere Xj ← @/Mj AHPL si APL coloana

X ← U/Y Comprimare Vectorul X este obtinut APL si AHPL din vectorul Y prin su- in descrierea primarea rangurilor Xi unitatilor logice pentu care Ui =0 combinationale U este vector binar.

A ← U/M Comprimare Ai ← U/Mi Idem linii.

A ← U//M Comprimare Aj← U/Mj Idem coloane coloane Nota1: @ este un operator logic sau aritmetic. Nota2: A si M sunt matrici, iar U este un vector binar.

Page 73: Curs Complet (265 Pag)

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 = ( A0 ,A1 ,A2 ,......,AρA-1)

Deplasare logica - dreapta (cu inserta unui zero in bitul 0).

A ← 0, A0 ,A1 ,A2 ,......,AρA-2

Deplasare logica - stanga (cu insertia unui zero in bitul de rang ρA-1).

A ← A1 ,A2 ,......,AρA-1,0

Deplasare aritmetica dreapta (cu extinderea bitului de rang 0 in bitul de rang 1).

A ← A0, A0 ,A1 ,A2 ,......,AρA-2

Deplasarea aritmetica stanga este identica cu deplasarea logica stanga.

Rotire -dreapta.

A ← AρA-1, A0 ,A1 ,A2 ,......,AρA-2

Rotire - stanga.

A ← A1 ,A2 ,......,AρA-1, A0

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: 1 0 0 M = 1 1 0 0 1 1 Deplasare circulara in sus.

1 1 0 Daca N ← M1:2 ! M0, atunci rezulta: N = 0 1 1 1 0 0

Page 74: Curs Complet (265 Pag)

Deplasre circulara in jos.

0 1 1 Daca N ← M2 ! M0:1 , atunci rezulta: N = 1 0 0 1 1 0 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 ← X0:3 ( extragere ) si respectiv Y← X4: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.

Fie @ un operator binar care se aplica unui vector binar X,rezultatul operatiei va fi de forma:

x ← ( ....(( X0@X1 )@X2 )@.....XρX-1 )

Expresia:

x ← +/X este echivalenta cu :

ρX-1

x ← Σ Xi

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.

Page 75: Curs Complet (265 Pag)

Fie matricea M:

1 0 0 1 M ← 0 1 0 0 , atunci: +/M = ( 2,1,3 ); +//M = ( 2,1,1,2,) si +/(+//(M)) = 6. 1 0 1 1 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 ← 0 0 1 1

Comprimarea coloanelor va fi exemplificata cu un vector logic V, de forma: V = ( 1,1,0 ).

N <-- V//M va avea aspectul urmator:

1 0 0 1 N ← 0 1 0 0

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. → ( Mi0^ Mi

1 ^ Mi2 ^ Mi

3 ) = 0 )/(5) /* se testeaza conditia

4. Ui ← 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

Page 76: Curs Complet (265 Pag)

Se poate observa ca vectorul U se pute genera simplu prin opeatia:

U ← (M0 ∩ M1 ∩ M2 ∩ M3)

Deci, tot programul secvential de mai sus se poate inlocui cuexpresia:

N ← (M0 ∩ M1 ∩ M2 ∩ M3) // 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 ← ( A0 ∩ B0 , A1 ∩ B1 ,A2 ∩ B2 , A3 ∩ B3)

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.

Page 77: Curs Complet (265 Pag)
Page 78: Curs Complet (265 Pag)

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)>

Page 79: Curs Complet (265 Pag)

< 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 >:= 1|2|.......|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 >:= 1|2|......|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,

Page 80: Curs Complet (265 Pag)

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)/(Sj) >|< → (Sj) >|< 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:

Aj - elementul j din vectorul

A m:n - elementele m, pina la n, din vectorul A

, - inlantuire ( concatenare )

A ! B - inlantuire pe linii

Mj - linia j din matricea M

Page 81: Curs Complet (265 Pag)

Mm: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,

3. ∩

4. ∪ 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 = ( f1 ( x1 ,...,xn ),.....,fm (x1 ,...,xn),

unde: ( fi ∩ f j =0 ) si ( ∪ /F ) = 1; i,j = 1,...,n; i = j; xI ∈ 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 ← Am:n , Bp: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 ).

Page 82: Curs Complet (265 Pag)

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 (Ei) sunt numere/etichete de pasi AHPL, din secventa data, la care

poate avea loc ramificarea ( transferul comenzii ).

De exemplu, ramificarea:

→ ( x, x )/( Ei, Ej)

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 >

Page 83: Curs Complet (265 Pag)

< 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:

Modul Nume modul Declaratii Pas secv. Procedura Modul Secventa de comanda Pas secv. Sfarsit secventa Pas secv. Transferuri si conexiuni Modul Sfarsit

Sistem Numeric

Unitate Nume unitate Declaratii Pas secv.* )

Functie Unitate Secventa de conexiuni Pas secv. Sfarsit Pas secv

Unitate

*) Specifica o conexiune

Page 84: Curs Complet (265 Pag)

Sintaxa unui pas de comanda din secventa:

NUL Instructiune de conectare Actiune Transfer sincron Transferuri si conexiuni Pas din secventa de comanda → (F)/(E) → (Ej) Ramificatie 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:

BUS = VLCS Instructiune de conectare BUS = MLCS*F z = VLCS z = MLCS * F

Exemple de descrieri AHPL ale unor UNITATI (Circuite Logice Combinationale) si aleunor 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 cin

sum

FULLADD

Page 85: Curs Complet (265 Pag)

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. FULLADD0 = cout

7. FULLADD1 = 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.

Page 86: Curs Complet (265 Pag)

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: FULLADD0 si FULLADD1. 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. C16 = 0

2. i ⇐ 15

3. Ci = FULLADD0 ( Xi; Yi; Ci+1)

4. Si = FULLADD1 ( Xi; Yi; Ci+1)

5. i ⇐ i – 1

6. ⇒ ( i ≥ 0)/(3)

7. ADD = C0, S0: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.

Page 87: Curs Complet (265 Pag)

X15 Y15

1. C15 C16

S15

2. X14 Y14 X15 Y15

C14 C15 C16

S14 S15

3. X0 Y0 X14 Y14 X15 Y15

C0 C14 C15 C16

C0 S0 S14 S15

ADD0 ADD1 ADD14 ADD15

2. Decodificatorul DCD.

Decodificatorul DCD(A), unde A este un vector binar de n biti, este un circuit combinational cu

n intrari si 2n iesiri. Pentru oricare vector binar, aplicat la intrare, numai o singura iesirea

decodificatorului va fi activa.

A0 DCD0

A1 DCD1

An DCD2n -1

Descrierea DCD(A) in AHPL este urmatoarea:

UNIT: DCD(A) INPUTS: A[n] OUTPUTS: DCD( 2n )

1. i ⇐ 02. DCDi = ∩ /(( n Τ i ) / A), ( n Τ i ) / A)3. i ⇐ i + 14. i ⇒ ( i < 2n )/(2)

END

FADD

FADDFADD

FADDFADDFADD

DCD

Page 88: Curs Complet (265 Pag)

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.

DCD5 = ∩ /(( 4 Τ 5 ) / A), ( 4 Τ 5 ) / A )

= ∩ /((0,1,0,1) / A), (0,1,0,1) / A)

= ∩ /(( A1, A3 ), (A0, A2)) = A0 ,A1, A2, A3

In cazul in care A = A0 ,A1, A2, A3 = (0, 1, 0, 1) se obtine DCD5 =1. Celelalte iesiri DCDj, pentru

care j ∈ 0, 1, 2,….., 2 n-1 ∩ j ≠ 5, vor lua valoarea 0.

3. Circuitul, BUSFN, de citire a unui cuvant dintr-o memorie M.

Se considera o memorie M, alcatuita din mai multe registre M0, M1, ……, M2↑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

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

M0

M1

…..

M2↑↑m -1

Comnada( DCD),(BUSFN)

RD

RA

Page 89: Curs Complet (265 Pag)

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 2m

componente, pe de alta parte, unde ρ2M = 2m.

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. N0 = M0 ∩ R0

2. i ⇐ 1

3. Ni = ( Mi ∩ Ri ) ∪ Ni-1

4. i ⇐ i + 1

5. i ⇒ ( i < r )/(3)

6. BUSFN = Nr-1

END

O schita a implementarii unitatii BUSFN, in contextul operatiei de citirere, este data mai jos.

M0 M1 Mp2M-1

DCDp2M-1DCD0 DCD1

SCNi

BUSFN(M;DCD(RA))

citeste

MAG/BUS

N N0 1

Page 90: Curs Complet (265 Pag)

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 Q1 = 1 si, respectiv, Q2 =0, Q3 =0, Q4 =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).

D Q

CLRC

D Q

CLRC

D Q

CLRC

PRED Q

C

Ceas

PRESET

SYN(start)

1 2 3 4

SCN2 SCN3 SCN4

SCN3

SCN2

SCN1

Ceas

start

SYN(start)

Page 91: Curs Complet (265 Pag)

In continuare, operarea automatului cu stari complet decodificate, la nivelul primului bistabil,

este prezentata sub forma diagramei de tranzitii:

SYN(start) PRESET(1)

SYN(start)

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.

1

2

PRED Q

C

PRED Q

C

start

SYN(start)

ceas

SNP(SYN(start))

ceas

start

SYN(start)

SNP(SYN(start))

SYNI(start)

SYNI(start)

Page 92: Curs Complet (265 Pag)

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

DATIES MAG

citeste

scrie ocupat

Modelul logic al modulului memoriei principale.

MRA

RD

Comanda

Page 93: Curs Complet (265 Pag)

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

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.

D Q

CLRC

D Q

CLRC2 3

(1)

citeste

ceas

ADR <- CP SYN(ocupat)MAG = DATEIESRI <- MAG

ceas

SCN2citeste

ocupat

SYN(ocupat)

SCN3

SCN4

Page 94: Curs Complet (265 Pag)

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 1981.

7.1.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 IESRP

stop

ROMRA

RSECV

ss

RP

Page 95: Curs Complet (265 Pag)

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 ← RSECV0, RSECV1, 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

Page 96: Curs Complet (265 Pag)

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]

data y

accept

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 MRD15, in timp ce cuvantul, inregistrat de cel mai mult

timp, care se afla in MRD0, 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

RIN[8]

MRD[16:8] Y[1]

CNT[4]

Page 97: Curs Complet (265 Pag)

3. Y * ∪ /(RIN ⊕ MRD0) ← 1

CNT ← INC(CNT)

MRD ← (MRD1:15 ! MRD0)

→ ( ∩ /CNT, ∩ /CNT )/(4,3)

4. MRD ← (MRD1:15 ! RIN)

→ (1)

ENDSEQUENCE

y =Y

END

Page 98: Curs Complet (265 Pag)
Page 99: Curs Complet (265 Pag)

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 simulareinitial begin: stop_at#300; $stop;end

//bucla principala

always begin:bucla_principalaif (!reset) begin #10; fetch; #10; execute; endelse #10;end

// mijloace de depanare

task apply_reset; begin reset = 1; #10;

Page 100: Curs Complet (265 Pag)

reset = 0; cp = 0; ac = 0; endendtask

// Task-urile principale: fetch, execute

task fetch; begin rd = m[cp]; cp = cp + 1; endendtask

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];

Page 101: Curs Complet (265 Pag)

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

Page 102: Curs Complet (265 Pag)

//prog2.v00001100010011010000110001011101000011000110111011000000000000000000000000000000000000000000000010100101010110101010101000000000

Veriwell -k C:\Program Files\VeriWell\exe\VeriWell.key -l C:\ProgramFiles\VeriWell\exe\VeriWell.log calculator2.VVeriWell for Win32 HDL <Version 2.1.1> Tue Nov 21 08:19:37 2000

This is a free version of the VeriWell for Win32 Simulator Distribute this freely; call 1-800-VERIWELL for ordering information See the file "!readme.1st" for more information

Copyright (c) 1993-96 Wellspring Solutions, Inc. All rights reserved

Memory Available: 0Entering Phase I...Compiling source file : calculator2.VThe size of this model is [7%, 7%] of the capacity of the free version

Entering Phase II...Entering Phase III...No errors in compilationTop-level modules: calculator

timp cp ra rd ri ac z s reset 0 x x xx xx xx x x 1 10 0 x xx xx 00 x x 0 20 1 x 0c xx 00 x x 0 30 1 c a5 0c a5 x x 0

Page 103: Curs Complet (265 Pag)

40 2 c 4d 0c a5 x x 0 50 2 d 5a 4d 00 x x 0 60 3 d 0c 4d 00 x x 0 70 3 c a5 0c a5 x x 0 80 4 c 5d 0c a5 x x 0 90 4 d 5a 5d ff x x 0 100 5 d 0c 5d ff x x 0 110 5 c a5 0c a5 x x 0 120 6 c 6e 0c a5 x x 0 130 6 e aa 6e 0f x x 0 140 7 e c0 6e 0f x x 0haltStop at simulation time 150C1>

Page 104: Curs Complet (265 Pag)

CSCI 320 Computer Architecture Handbook on Verilog HDL By Dr. Daniel C. Hyde Computer Science Department Bucknell University Lewisburg, PA 17837 Copyright 1995 By Daniel C. Hyde August 25, 1995 Updated August 23, 1997

Page 105: Curs Complet (265 Pag)

1. Tabla de materii1. Introducere …….............................................................……………................. 1.1 Ce este Verilog?...................................................................…..………..... 1.2 Ce este VeriWell?...............................................................…........……… 1.3 De ce se utilizeaza Verilog HDL? ....................................…..........……...2. Limbajul Verilog…….. ……...........................................................…………… 2.1 Primul Program Verilog....................................................…..........……… 2.2 Conventii Lexicale.....................................................…....…..........……… 2.3 Structura unui Program .....................................................…..........……… 2.4 Tipuri de Date……...............................................................….......………. 2.4.1 Tipuri de Date Fizice.........................................................….…...... 2.4.2 Tipuri de Date Abstracte................................................….……...... 2.5 Operatori…................................................................................…..……….. 2.5.1 Operatori Arithmetici. Binari...................................................…….. 2.5.2 Operatori Arithmetici. Unari......................................................…… 2.5.3 Operatori Relationali.....................................................................…. 2.5.4 Operatori Logici ............................................................................... 2.5.5 Operatori la Nivel de Bit................................................................... 2.5.6 Operatori Unari de Reducere............................................................ 2.5.7 Alti Operatori.................................................................................... 2.5.8 Operator de Precedenta..................................................................... 2.6 Constructii de Control................................................................………........ 2.6.1 Selectia: Instructiunile - if si case.......................…........................... 2.6.2 Repetarea: Instructiunile - for, while si repeat................................... 2.7 Alte Instructiuni......................................................................……………... 2.7.1 Instructiunea - parameter ................................................................. 2.7.2 Atribuirea Continua ......................................................................... 2.7.3 Atribuiri Procedurale Blocante si Non – blocante............................ 2.8 Task-uri si Functii ...........................................................….....………....... 2.9 Controlul Sincronizarii (Timing)................................................………...... 2.9.1 Controlul Intarzierii (#) ................................................................... 2.9.2 Evenimente........................................................................................ 2.9.3 Instructiunea wait....................................................................…...... 2.9.4 Instructiunile fork and join............................................................... 2.10 Examplu: Semafor de Trafic......................................................……........3.Utilizarea simulatorului Veriwell.....................................…………….……….... 3.1Crearea Fisierului Model ...........................................................………...... 3.2 Pornirea simulatorului..........................................................……..……...... 3.3 Cum se iese din Simulator? . ........................................................………... 3.4 Optiunile Simulatorului..................................................................……...... 3.5 Depanarea ...............................................................................…………....4. Functiile si Task-urile de Sistem........................................…………………….. 4.1 $cleartrace................................................................……………................. 4.2 $display ..............................................................................……………...... 4.3 $finish........................................................................……………............... 4.4 $monitor .......................................................................……………............

Page 106: Curs Complet (265 Pag)

4.5 $scope ..............................................................................……………........ 4.6 $settrace........................................................................……………............ 4.7 $showscopes.............................................................................………….... 4.8 $showvars................................................................................…………..... 4.9 $stop......................................................................................…………….... 4.10 $time ....................................................................................……………..Bibliografie..............................................................................………………….…

1. 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.

1.1. 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 1995. 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.

Page 107: Curs Complet (265 Pag)

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.

1.2. 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 10.000 de utilizatori/proiectanti

la companii de renume cum sunt: Sun Microsystems, Apple Computer, Motorola s.a.

Page 108: Curs Complet (265 Pag)

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.

Page 109: Curs Complet (265 Pag)

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);

Page 110: Curs Complet (265 Pag)

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

0 00000000 xxxxxxxx x

1 00000001 xxxxxxxx x

2 00000001 1110xxxx x

3 00000001 1110xxxx 0

4 00000010 1110xxxx 0

5 00000010 1101xxxx 0

Page 111: Curs Complet (265 Pag)

7 00000011 1101xxxx 0

8 00000011 1100xxxx 0

9 00000011 1100xxxx 1

10 00000100 1100xxxx 1

11 00000100 1011xxxx 1

12 00000100 1011xxxx 0

13 00000101 1011xxxx 0

14 00000101 1010xxxx 0

16 00000110 1010xxxx 0

17 00000110 1001xxxx 0

19 00000111 1001xxxx 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,

Page 112: Curs Complet (265 Pag)

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 0011

3'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>);

Page 113: Curs Complet (265 Pag)

<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.

Page 114: Curs Complet (265 Pag)

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);

Page 115: Curs Complet (265 Pag)

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.

Page 116: Curs Complet (265 Pag)

2.4 Tipuri de Date

2.4.1 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'b01011010;

B = A[0:3] | A[4:7], 4'b0000;

end

Page 117: Curs Complet (265 Pag)

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 0000. B are acum valoarea 11110000. 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_repetitiiexp1, exp2, ... , expn

Iata cateva exemple:

C = 24’b1011; //lui C I se asigneaza vectorul de biti: 8’b10111011

C = 4A[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.

2.4.2 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.

Page 118: Curs Complet (265 Pag)

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

2.5.1 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

2.5.2 Operatori Aritmetici Unari.

Operator Nume Comentarii

- Minus Unar Modifica semnul operandului sau

2.5.3 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

Page 119: Curs Complet (265 Pag)

!= Inegalitae logica

2.5.4 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

0100.

Operator Nume Comentarii

! Negatia logica

&& AND logic

|| OR logic

2.5.5 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

2.5.6 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

Page 120: Curs Complet (265 Pag)

~| reducere NOR

~^ reducere XNOR

2.5.7 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-2.

2.5.8 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.

Page 121: Curs Complet (265 Pag)

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.

2.6.1 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

Page 122: Curs Complet (265 Pag)

<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

2.6.2 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);

Page 123: Curs Complet (265 Pag)

i = i + 1;

end

2.7 Alte Instructiuni.

2.7.1 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;

2.7.2 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);

2.7.3 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 );

Page 124: Curs Complet (265 Pag)

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= 00000100 B= 00000101

Nonblocanta: A= 00000100 B= 00000100

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, task-

urile 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>);

Page 125: Curs Complet (265 Pag)

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.

Page 126: Curs Complet (265 Pag)

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

Page 127: Curs Complet (265 Pag)

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 simbolul @;

4. instructiunea wait.

Ordinea executiei evenimentelor in acelasi interval de timp/ceas este impredictibila.

2.9.1 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.

2.9.2 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.:

Page 128: Curs Complet (265 Pag)

@r begin // controlat printr-o modificare a valorii in registrul r

A = B&C;

end

@(posedge clock2) A = B&C; // controlat de frontul pozitiva al lui clock2

@(negedge clock3) A = B&C; // controlat de frontul negativ al lui clock3

forever @(negedge 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 simbolul @, dupa cum se arata mai jos:

@(event6) 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.

2.9.3 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

Page 129: Curs Complet (265 Pag)

Diferenta intre comportamentul unei instructiuni wait si un eveniment este aceea ca

instructiunea wait este sesizeaza nivelul, in timp ce un @(posedge clock); este amorsat de catre

o tranzitie a semnalului sau sesizeaza frontul.

2.9.4 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.

2.10 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

Page 130: Curs Complet (265 Pag)

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 ceasului

@(posedge 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);

Page 131: Curs Complet (265 Pag)

end

endmodule

Iesirea simulatorului de semafor de trafic este urmatoarea:

Time green amber red 0 0 0 1 70 1 0 0 110 0 1 0 116 0 0 1 186 1 0 0 226 0 1 0 232 0 0 1 302 1 0 0 342 0 1 0 348 0 0 1 418 1 0 0 458 0 1 0 464 0 0 1 534 1 0 0 574 0 1 0 580 0 0 1 650 1 0 0 690 0 1 0 696 0 0 1 766 1 0 0 806 0 1 0 812 0 0 1 882 1 0 0 922 0 1 0 928 0 0 1 998 1 0 0Stop at simulation time 1000

3. 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:

Page 132: Curs Complet (265 Pag)

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]

Page 133: Curs Complet (265 Pag)

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

Page 134: Curs Complet (265 Pag)

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=00001111 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 linie-

noua, la sfarsitul iesirii. A se vedea $write, in “Verilog Language Reference Manual” , daca nu

se doreste o linie noua.

Page 135: Curs Complet (265 Pag)

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;

Page 136: Curs Complet (265 Pag)

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), 15466

Los Gatos Boulevard, Suite 109-071, Los Gatos, CA 95032; Tel: (408)353-8899, Fax: (408)

353-8869, Email: [email protected], $100.

3. 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 0-9627488-2-X, $65.

4. Thomas, Donald E., and Philip R. Moorby, The Verilog Hardware Description Language,

second edition, published by Kluwer Academic Publishers, Norwell MA, 1994, ISBN 0-7923-

9523-9, $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 0-9656277-4-8, $60.

Page 137: Curs Complet (265 Pag)

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 - http://www.comit.com/~rajesh/verilog/faq/alt_FAQ.html

comp.lang.verilog archives - http://www.siliconlogic.com/Verilog/

Cadence Design Systems, Inc. - http://www.cadence.com/

Wellspring Solutions - ftp://iii.net/pub/pub-site/wellspring

Verilog research at Cambridge, England - http://www.cl.cam.uk/users/mjcg/Verilog/

Page 138: Curs Complet (265 Pag)

9. Bazele Aritmetice ale Calculatoarelor Numerice.9.1. 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 00002 -10012 (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.

Page 139: Curs Complet (265 Pag)

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.

9.2. Sisteme de numeratie.

9.2.1. 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 xi,

Nb = xn-1 xn-2 xn-3 … xi… x1 x0

unde xi reprezinta o cifra a sistemului de numeratie.

O cifra xi poate lua valori intregi cuprinse intre 0 si b-1, baza b reprezentand numarul valorilor

posibile pe care le poate lua o cifra oarecare xi.

In general, un numar, constituit dintr-o parte intreaga si o parte subunitara are umatoarea

reprezentare in baza b:

Nb = xn-1 xn-2 xn-3 … xi… x1 x0 , x-1 x-2 x-3 … x-i… x-m , (o ≤ xi ≤ b-1).

Valoarea N a numarului Nb se calculaeza cu ajutorul urmatoarei expresii:

n-1

N = ΣΣ xi. bi

i=-m

Fie numarul (435,25)10, in baza 10 (n=3, m=2 si b=10).

4 x 102 + 3 x 101 + 5 x 100 + 2 x 10-1 + 5 x 10-2 =

(400)10 + (30)10 + (5)10 (1) + (2/10)10 + (5/100)10 = (435,25)10

Page 140: Curs Complet (265 Pag)

In continuare se considera numarul (1011,01)2, pentru care: n = 4, m = 2 si b = 2:

1 x 23 + 0 x 22 + 1 x 21 + 1 x 20 + 0 x 2-1 + 1 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 10.

9.2.2. 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 Ni si o parte subunitara Nf :

N = Ni + Nf

Astfel:

Ni = xn-1 xn-2 xn-3 … xi… x1 x0 si

Nb = 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 Ni , 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:

(Ni)b = (Ni)q

(Ni)q se poate scrie ca un p-tuplu astfel:

Ni = yp-1 yp-2 yp-3 … yi… y1 y0

Page 141: Curs Complet (265 Pag)

Pentru a obtine coeficientii yi, ai dezvoltarii in baza q, se va recurge la urmatoarea secventa de

operatii:

(Ni)b : q = (Ni)b1

+ y0 /q , cifra curenta a noului numar este y0

(Ni)b1: q = (Ni)b

2 + y1 /q , cifra curenta a noului numar este y1

………………………………………………………………..

(Ni)bp-2: q = (Ni)b

p-1 + yp-2 /q , cifra curenta a noului numar este yp-2

unde 0 ≤ (Ni)bp-1 ≤ q reprezinta cifra cea mai semnificativa a noii reprezentari

Exemplu:

(17)10 = ( ? )2

17 : 2 = 8 +1/2 , y0 = 1;

8 : 2 = 4 +0/2 , y1 = 0;

4 : 2 = 2 +0/2 , y2 = 0;

2 : 2 = 1 + 0/2 , y3 = 0;

y4 = 1

( 17 )10 = 100012

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 Nf , 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:

(Nf)b = (Nf)q

(Nf)q se poate scrie ca un m-tuplu astfel:

Nf = 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:

(Nf)b × q = (Nf)b-1

+ y0-1 , cifra curenta a noului numar este y-1

(Nf)b-2 × q = (Nf)b

-2 + y-2 , cifra curenta a noului numar este y-2

………………………………………………………………..

Page 142: Curs Complet (265 Pag)

(Nf)b-m+1× q = 0 + y-m , cifra curenta a noului numar este y-m

In cazul in care (Nf)b-i = 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,00011000110.... )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.

Page 143: Curs Complet (265 Pag)

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)16

9.2.3. 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:

Ni = xn-1 xn-2 xn-3 … xi… x1 x0

semnul este codificat prin bitul xn-1.

Un numar real Nr se reprezinta prin doua campuri: mantisa/fractia f, cu semn, si exponent e:

Nr = 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.

Page 144: Curs Complet (265 Pag)

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 xn-2 xn-3 … xi… x1 x0 , pentru x > 0;

[x]d = 1 xn-2 xn-3 … xi… x1 x0 , pentru x < 0

Se poate observa ca, in acest cod, 0 are doua reprezentari, daca este afectat de semn:

[+0]d = 0 0000..000 si

[-0]d = 11111..111

Astfel, un numar x in cod direct, reprezentat pe n ranguri, poate lua valori in gama:

-2n-1 + 1 ≤ x ≤ 2n-1 - 1,

ceea ce face ca pentru:

- n = 8 valorile minime/maxime sa fie –127 / +127, iar

- n = 16 valorile minime/maxime sa fie –32767 / +32767.

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 2n – 1.

[x]i = 0 xn-2 xn-3 … xi… x0 , pentru x > 0;

[x]i = 1 xn-2 xn-3 … xi… x0 , pentru x < 0

unde: xi reprezinta inversul lui xi

Se poate observa ca, in acest cod, 0 are doua reprezentari, daca este afectat de semn:

Page 145: Curs Complet (265 Pag)

[+0]i = 0 0000..000 si

[-0]i = 11111..111

Astfel, un numar x in cod invers, reprezentat pe n ranguri, poate lua valori in gama:

-2n-1 + 1 ≤ x ≤ 2n-1 - 1,

ceea ce face ca pentru:

- n = 8 valorile minime/maxime sa fie –127 / +127, iar

- n =16 valorile minime/maxime sa fie –32767 / +32767.

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 2n.

[x]c = 0 xn-2 xn-3 … xi… x0 , pentru x ≥ 0;

~ ~ ~ ~ [x]c = 1 xn-2 xn-3 … xi… x0 , pentru x < 0

unde: ~ ~ ~ ~ 1 xn-2 xn-3 … xi… x0 se obtine ca urmare a operatiei: 2n - |x|

Se poate observa ca, in acest cod, 0 are o singura reprezentare:

[0]c = 0 0000..000

Astfel, un numar x in cod complementar , reprezentat pe n ranguri, poate lua valori in gama:

-2n-1 ≤ x ≤ 2n-1 - 1,

ceea ce face ca pentru:

- n = 8 valorile minime/maxime sa fie –128 / +127, iar

- n = 16 valorile minime/maxime sa fie –32768 / +32767.

Pentru: x > 0 [x]d = [x]i = [x]c

Pentru: x < 0 [x]c = [x]i + 1 = 2n - |x| .

Page 146: Curs Complet (265 Pag)

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 (128 + 14 = 142)10

si (128 + - 14 = 114)10. Astfel, codul binar in exces 128 pentru (-14)10 este (01110010)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 (00000000)2, in timp ce celui mai mare numar pozitiv (127)10 ii va corespunde

(11111111)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.

9.4. 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” .

Page 147: Curs Complet (265 Pag)

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:

0000 0100 0000 0010 (+402)10

a) (0)10 (4)10 (0)10 (2)10

1001 0101 1001 0111 (-402)10 complementul fata de 9

b) (9)10 (5)10 (9)10 (7)10

1001 0101 1001 1000 (-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 0 – 4999, iar numerele

negative in gama 5000 – 9999.

9.5. 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 (1012) sunt necesare 40 de ranguri binare ,

intrucat 1012 ≈ 240. 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,36542 × 104

Page 148: Curs Complet (265 Pag)

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:

+ 4 . 3 6 5 4 2

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,2 × 100 = 36,542 × 102 = 0,36542 × 104

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 intr-

un 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-

Page 149: Curs Complet (265 Pag)

marului natural 6 in binar, pe 4 biti. Reprezentarea exacta, fara nici o eroare va fi 0110. Daca se

ia numarul binar fractionar 0,10101010101,care trebuie reprezentat pe 8 biti se va obtine:

0,1010101. 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,141592654 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,000002654.

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 ulti-

mei 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

Page 150: Curs Complet (265 Pag)

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 intal-

neste 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, indife-

rent 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 = xn-1 xn-2 … xi… x1 x0 , 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).

Page 151: Curs Complet (265 Pag)

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 ek-1ek-2 ….e0 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.

Page 152: Curs Complet (265 Pag)

Formatul scurt ( simplu - de baza ).

0 1 8 9 31

- bitul 0: s = semnul mantisei ( s = 1 - mantisa negativa );

- bitii 1-8: e = exponentul deplasat ( deplasarea este 27 - 1 );

- 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: -2-126 .(1,0) pana la 2127 .( 2 – 2-23 ),

ceea ce reprezinta aproximativ –1,8 × 10-38 pana la 3,40 × 1038

Formatul lung ( dublu - de baza ).

0 1 1112 63

- bitul 0: s = semnul mantisei ( s = 1 - mantisa negativa );

- bitii 1-11: e = exponentul deplasat ( deplasarea este 210 - 1 );

- 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)

s e f

s e f

Page 153: Curs Complet (265 Pag)

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 2.

3. 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 21-(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.

Page 154: Curs Complet (265 Pag)

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.2e-127.(1,f);

- daca e = 0 si f ≠0, atunci V = (-1)s.2-126.(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.2e-1023.(1,f);

- daca e = 0 si f ≠0, atunci V = (-1)s.2-1022.(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 = -1022 si maximum M = 1023.

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.2e.(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.2e*.(j,f);

unde e* este egal cu m sau m + 1, selectat la implementare.

Page 155: Curs Complet (265 Pag)

Formatul dublu extins.

Acest format are caracteristici identice cu formatul simplu extins, cu exceptia ca exponentul ia

valori intre m = -16382 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 ) < +∞

Page 156: Curs Complet (265 Pag)

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 utili-

zare 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 mo-

bila, 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;

Page 157: Curs Complet (265 Pag)

- 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.

Page 158: Curs Complet (265 Pag)

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 3.

3. 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 ve-

derea obtinerii rezultatului final.

Pentru exemplificare se va considera un acumulator cu urmatoarea structura, pentru efectuarea

operatiilor aritmetice cu numere avand mantisa de patru biti:

cu urmatoarele notatii:

- D: bitul de depasire,

- F1 - F4: cei 4 biti ai mantisei,

- G: Bitul de garda,

- R: bitul de rotunjire,

D F1 F2 F3 F4 G R ST

Page 159: Curs Complet (265 Pag)

- 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 F4 ← 0.

1.5.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, aban-

donadu-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 );

Page 160: Curs Complet (265 Pag)

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.

Page 161: Curs Complet (265 Pag)

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 2k (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: bf-1;

- zero.

Astfel, se obtine urmatoarea expresie:

2 × ((M – m) + 1) × (b-1) × bf-1 + 1

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.

Page 162: Curs Complet (265 Pag)

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 bm si cea mai mica

fractie normalizata (diferita de zero), care va fi egala cu b-1. Astfel, numarul cel mai mic va fi:

bm-1. In mod similar numarul cel mai mare va avea cel mai mare exponent bMsi cea mai mare

fractie (1 - b-f), ceea ce conduce la valoarea bM . (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 bm si cand se modifica cel mai putin bit semnificativ al fractiei, b-f. Aceasta conduce la o

valoare minima a distantei egala cu bm-f. Cea mai mare distanta apare atunci cand exponentul are

cea mai mare valoare bM si cand se modifica cel mai putin bit semnificativ al fractiei,b- f.

Aceasta conduce la o valoare minima a distantei egala cu bM-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 000000. 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 21, 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;

Page 163: Curs Complet (265 Pag)

- 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) × bf-1 + 1 = 2 × ((1 – (- 2) + 1) × (2-1) × 23-1 + 1= 33.

- 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:

( bm-f) / (b × (1 - b-f))= 1/( bf-1), pentru numerele mici

distanta valoarea maxima pentru numarul cu exponent minim

( bM-f) / (bM × (1 - b-f))= 1/( bf-1), pentru numerele mari

distanta 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,1 × 2-4 .

Studiu de caz privind pierderea de precizie la conversia de la intregi la virgula mobila.

In timpul razboiului din Golf, 1991-1992, 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”.

Page 164: Curs Complet (265 Pag)

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.

Page 165: Curs Complet (265 Pag)

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 27 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.

Page 166: Curs Complet (265 Pag)

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.

Page 167: Curs Complet (265 Pag)

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 26 25 24 23 22 21 20 Caracterul

1 1 1 0 0 1 0 0 d

0 1 1 0 0 1 0 1 e

0 1 1 0 0 1 1 0 f

1 1 1 0 0 1 1 1 g

0 1 0 0 0 1 0 0 D

Bit de paritate Codul ASCII

Page 168: Curs Complet (265 Pag)

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:

11001100 cod valid pentru d

01001100

10001100

11101100

11011100 coduri invalide pentru d

11000100

11001010

11001101

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 2k 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 2k 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:

2k × (k + r + 1) ≤ 2k+ r sau

(k + r + 1) ≤ 2r

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 7 + 4 = 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 C8 C4 C2 C1.

Page 169: Curs Complet (265 Pag)

Combinatiile sunt calculate, in figura de mai jos, ca reprezentari binare ale pozitiilor bitilor care

sunt verificati, incepand cu pozitia 1. C1 este in pozitia de bit1, C2 in pozitia de bit 2, C4 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)

C8 C4 C2 C1 Bit verificat

0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 10 1 0 1 0 11

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 C1= 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 C1, din tabela de mai sus. Bitul de verificare C2 = 0

furnizeaza paritatea para pentru grupul de biti 2, 3, 6, 7, 10, 11. In mod similar bitul de

verificare C4 = 0 asigura paritatea para pentru grupul de biti 4, 5, 6, 7. In final C8 = 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

Page 170: Curs Complet (265 Pag)

pozitiile 1,….,i a caror suma este egala cu n. De exemplu bitul 7 este verificat de bitii din

pozitiile 1, 2, 4, deoarece 1+ 2 + 4 = 7.

Se considera ca receptorul primeste sirul de biti 10010111001, in conditiile CCES pentru

ASCII. Ce caracter a fost transmis?

Se vor calcula paritatile pentru fiecare din bitii de verificare

Bit eronat

Paritate

C1 verifica biti bitii1, 3, 5, 7, 9, 11 para

C2 verifica biti bitii2, 3, 6, 7, 10, 11 impara

C4 verifica biti bitii4, 5, 6, 7 para

C8 verifica biti bitii8, 9, 10, 11 impara

Pentru a localiza eroarea, se vor aduna pozitiile bitilor de verificare cu paritate impara:

1 + 4 = 5. Astfel cuvantul care a fost transmis este: 10010101001. 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).

Page 171: Curs Complet (265 Pag)

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 2k 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:

2k x (k+ r) + [(k+ r)( k+ r-1)]/2 +1 ≤ 2(k+ r)

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.

Page 172: Curs Complet (265 Pag)

Probleme.

x

Page 173: Curs Complet (265 Pag)

x

Page 174: Curs Complet (265 Pag)

x) SEC inseamna Single Error Correcting

Page 175: Curs Complet (265 Pag)
Page 176: Curs Complet (265 Pag)
Page 177: Curs Complet (265 Pag)

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.

1.2.1 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 ≡ xn-1 xn-2… … … … … … … . x1 x0,

Y ≡ yn-1 yn-2… … … … … … … . y1 y0,

care urmeaza sa fie inmultite, pentru a furniza produsul Z:

Z ≡ z2n-2 z2n-3… … … … … … z1 z0.

Semnul produsului z2n-1 va fi obtinut astfel:

z2n-2 = xn-1 ⊕ yn-1.

Produsele partiale: P0,… … .,Pn-3, Pn-2 se obtin dupa cum urmeaza:

P0 = |x| . y0. 20

P1 = |x| . y1. 21

… … … … … … … .

Pn-2 = |x| . yn-2. 2n-2

iar suma lor va conduce la produsul modulelor:

z2n-3… … … … … … z1 z0

Fie cazul a doua numere reprezentate in cod direct pe 5 biti:

- deinmultitul x = 11000 si

- inmultitorul y = 01000

Pentru semn rezulta: z8 = 1 ⊕ 0 = 1,

in timp ce modulul produsului se va obtine dupa cum se arata mai jos:

Page 178: Curs Complet (265 Pag)

1000 × 1001 1000 0000 0000 1000

01001000

z7… … … z1 z0 = 01001000.

Astfel, produsul celor doua numere va avea 9 biti:

z8 z7… … … z1 z0 = 101001000.

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:

a) Sumator modificat b) Schema bloc a sumatorului modificat

x3 0 x2 0 x1 0 x0 0 y0

0

x3 x2 SP0,3 x1 SP0,2 x0 SP0,1 SP0,0 y1

0

SP1,4 SP1,3 SP1,2 SP1,1 SP1,0

z4 z3 z2 z1 z0

sumatormodificat

sumatormodificat

sumatormodificat

sumatormodificat

sumatormodificat

sumatormodificat

sumatormodificat

sumatormodificat

CI

B0A0

COZ0

1

2

3

4

5

1

23

Xi

XiYj

Yj

Cj Cj

Ci+1 Ci+1

Sumatormodificat

SPi,j-1

SPi,j-1

SPi,j SPi,j

Page 179: Curs Complet (265 Pag)

S-a notat cu SPi,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 ppj, atunci un pas de inmultire va avea urmatoarea forma:

ppj = ppj-1 + x . yj. 2j

O schema bloc, pentru solutia mentionata mai sus, este prezentata in continuare:

x3 x2 x1 x0

yj

… … … …

… … … …

0

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 . yj.

4. aduna produsul partial la jumatatea superioara a registrului sumei produselor partiale;

Generator de produse partiale

Sumator pe n biti

… … … . … … … … … …

Page 180: Curs Complet (265 Pag)

5. efectueaza j = j + 1 si daca j = n treci la 8.

6. 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 xn-2… … … … … … … . x1 x0,

Deplasarea la stanga:

[2.x]c = xn-2… … … … … … … . x1 x00,

Deplasarea la dreapta:

[2-1.x]c = 00xn-2… … … … … … … . x1,

2. x < 0. ~ ~ ~ [x]c = 1xn-2… … … … … … … . x1 x0,

Deplasarea la stanga:

~ ~ [2.x]c = xn-2… … … … … … … . x1 0,

Deplasarea la dreapta:

~ ~ [2-1.x]c = 11xn-2… … … … … … … . x1.

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.

Page 181: Curs Complet (265 Pag)

- 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 = 2n - |x|; [y]c = |y|;

[x]c . [y]c = 2n.|y| - |x| . |y|; rezultat incorect

[x]c . [y]c = 22n - |x| . |y|; rezultat corect

Rezulta necesitatea unei corectii egala cu: 22n - 2n.|y|, care se va aduna la rezultatul incorect.

3. x > 0, y < 0; [x]c = |x|; [y]c = 2n - |y|;

[x]c . [y]c = 2n.|x| - |x| . |y|; rezultat incorect

[x]c . [y]c = 22n - |x| . |y|; rezultat corect

Rezulta necesitatea unei corectii egala cu: 22n - 2n.|x|, care se va aduna la rezultatul incorect.

4. x < 0, y < 0; [x]c = 2n - |x|; [y]c = 2n - |y|;

[x]c . [y]c = 22n - 2n.|y| - 2n.|x| + |x| . |y|; rezultat incorect

[x]c . [y]c = |x| . |y|; rezultat corect

Rezulta necesitatea unei corectii egala cu: -22n + 2n.|y| + 2n.|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 = - yn-1 . 2n-1 + yn-2 . 2n-2 + yn-3 . 2n-3 +… … … + y1 . 21 + y0. 20 = n-1

= Σ (yi-1 - yi) .2i

i=0

unde:

- yn-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:

Page 182: Curs Complet (265 Pag)

n-1X.Y = Σ x. (yi-1 - yi) .2i

i=0

Pe baza formulei de mai sus se poate calcula produsul partial de rang i :

yi-1 yi produsul partial.

0 0 0

0 1 - x .2i

1 0 x .2i

1 1 0

Pentru implementarea hardware se considera resursele corespunzatoare unei structuri orientate

pe un singur acumulator:

Deinmultit (X) Inmultitor (Y)

RD RD activare

selectare

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 = log2n );

n-1 .. RD.. 0 n-1 .. AC.. 0 n-1 .. MQ.. 0 MQq

SL

0 1 0/1 MUX 0/1

Sumator 0/1 CNT

Page 183: Curs Complet (265 Pag)

- 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:

0,1 0,0; 1,1

DA

NU

MQ ← AC; AC ← n T 0

MQ0,MQq

AC← ADD(AC,RD)

AC← SUB(AC,RD)

CNT← DEC(CNT)

CNT = 0 ?

AC,MQ,MQq← AC0, AC,MQ

Z = AC,MQ(n-1:1)

Stop

RD ← DeinmultitAC ← InmultitorCNT ← log2n T nMQ ← n T 0MQq ← 0

Start

Page 184: Curs Complet (265 Pag)

Programul AHPL:

MODULE: Dispozitiv_de_inmultire

MEMORY: RD[n]; AC[n]; MQ[n]; MQq; CNT[log2n] INPUTS: X[n]; Y[n]

OUTPUTS: Z[2n-1]

// se considera operanzii X si Y adusi in RD si AC

1. MQ ← AC; MQq ← 0; CNT ← log2n T n

2. AC ← n T 0

3. → (MQ0 MQq , MQ0 MQq , MQ0 MQq , MQ0 MQq)/(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,MQq← AC0, 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");

Page 185: Curs Complet (265 Pag)

$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

Page 186: Curs Complet (265 Pag)

#1;CNT=CNT-1;

end

end

endmodule

Veriwell -k C:\Program Files\VeriWell\exe\VeriWell.key -l C:\ProgramFiles\VeriWell\exe\VeriWell.log inmultitorb.VVeriWell for Win32 HDL <Version 2.1.1> Tue Dec 19 16:26:21 2000

This is a free version of the VeriWell for Win32 Simulator Distribute this freely; call 1-800-VERIWELL for ordering information See the file "!readme.1st" for more information.

Copyright (c) 1993-96 Wellspring Solutions, Inc. All rights reserved

Memory Available: 0Entering Phase I...Compiling source file : inmultitorb.VThe size of this model is [3%, 2%] of the capacity of the free version

Entering Phase II...Entering Phase III...No errors in compilationTop-level modules: inmultitorb

//Cazul: RD = 5; AC = 7;

timp RD AC MQ MQq CNT0 000101 00000111 00000000 0 1111 00000101 00000111 00000111 0 1112 00000101 00000000 00000111 0 1113 00000101 11111011 00000111 0 1114 00000101 11111101 10000011 1 1115 00000101 11111101 10000011 1 1106 00000101 11111110 11000001 1 1107 00000101 11111110 11000001 1 1018 00000101 11111111 01100000 1 1019 00000101 11111111 01100000 1 10010 00000101 00000100 01100000 1 10011 00000101 00000010 00110000 0 10012 00000101 00000010 00110000 0 01113 00000101 00000001 00011000 0 01114 00000101 00000001 00011000 0 01015 00000101 00000000 10001100 0 010

Page 187: Curs Complet (265 Pag)

16 00000101 00000000 10001100 0 00117 00000101 00000000 01000110 0 001Produs= 0000000000100011Stop at simulation time 19C1> $finish;

Top-level modules: inmultitorb// Cazul: RD = 5; AC = -7;

timp RD AC MQ MQq CNT0 00000101 11111001 00000000 0 1111 00000101 11111001 11111001 0 1112 00000101 00000000 11111001 0 1113 00000101 11111011 11111001 0 1114 00000101 11111101 11111100 1 1115 00000101 11111101 11111100 1 1106 00000101 00000010 11111100 1 1107 00000101 00000001 01111110 0 1108 00000101 00000001 01111110 0 1019 00000101 00000000 10111111 0 10110 00000101 00000000 10111111 0 10011 00000101 11111011 10111111 0 10012 00000101 11111101 11011111 1 10013 00000101 11111101 11011111 1 01114 00000101 11111110 11101111 1 01115 00000101 11111110 11101111 1 01016 00000101 11111111 01110111 1 01017 00000101 11111111 01110111 1 00118 00000101 11111111 10111011 1 001Produs= 1111111111011101Stop at simulation time 20C1> $finish;

// Cazul: RD = -5; AC = -7;

timp RD AC MQ MQq CNT0 11111011 11111001 00000000 0 1111 11111011 11111001 11111001 0 1112 11111011 00000000 11111001 0 1113 11111011 00000101 11111001 0 1114 11111011 00000010 11111100 1 1115 11111011 00000010 11111100 1 1106 11111011 11111101 11111100 1 1107 11111011 11111110 11111110 0 1108 11111011 11111110 11111110 0 1019 11111011 11111111 01111111 0 101

Page 188: Curs Complet (265 Pag)

10 11111011 11111111 01111111 0 10011 11111011 00000100 01111111 0 10012 11111011 00000010 00111111 1 10013 11111011 00000010 00111111 1 01114 11111011 00000001 00011111 1 01115 11111011 00000001 00011111 1 01016 11111011 00000000 10001111 1 01017 11111011 00000000 10001111 1 00118 11111011 00000000 01000111 1 001Produs= 0000000000100011Stop at simulation time 20C1>

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 = q0, q-1q-2

22 40 40

- 9 - 9 - 9

13 31 31

- 9 - 9 - 9

4 22 22

- 9 - 9 - 9

- 5 13 13

q0 = 2 - 9 - 9

4 4

- 9 - 9

- 5 - 5

q-1 = 4 q-2 = 4

22 : 9 = 2,44…

Page 189: Curs Complet (265 Pag)

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 = q0, q-1q-2

22 -50 40

- 9 + 9 - 9

13 - 41 31

- 9 + 9 - 9

4 - 32 22

- 9 + 9 - 9

- 5 - 23 13

q0 = 3 + 9 - 9

- 14 4

+ 9 - 9

- 5 - 5

+ 9

4

q-1 = 6 q-2 =

Catul va avea forma: 3, 6 5 6 5 6… … , 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;

Page 190: Curs Complet (265 Pag)

- CNT – registru incrementator, contor de cicluri.

Impartitorul Y va fi incarcat in RD, iar deimpartitul X in AC. In MQ se va acumula catul.

Descrierea algoritmului:

1. Se deplaseaza continutul lui RD cu p ranguri spre stanga, in conditiile in care 2p 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;

n-1| RD |0 n-1| AC |0 n-1| MQ |0 CNT

Page 191: Curs Complet (265 Pag)

S = RDn-1 .RDn-2 . RDn-3 ∪ RDn-1 .RDn-2

- F- unitate logica combinationala, care calculeaza identitatea/neidentitatea semnelor

operanzilor;

F = ACn-1 ⊕ RDn-1

- V – unitate logica combinationala, care verifica semnele operanzilor din acumulator

(deimpartit) si din registrul restului curent R;

V = ACn-1 ⊕ Rn-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

RD RD

Deplasare stanga

n-1| AC |0 n-1| n-2| n-3| RD |0

MUX

S

F

z

n-1| ADD |0

n-1| R |0 CNT

V U

n-1| MQ |0

e

Page 192: Curs Complet (265 Pag)

Programul AHPL pentru dispozitivul de impartire.

MODULE: Dispozitiv_de_impartire

MEMORY: RD[n]; AC[n]; MQ[n]; R[n]; CNT[ log2n ]; 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 ← log2n T 0; Z ← 0; e ← 0

→ ( ∪ /RD)/(12) // eroare

2. → (S)/(4)

3. RD ← RDn-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 ← MQn-2:0, 0

→ (9)

8. MQ ← MQn-2:0, 1

9. → ( ∪ /CNT)/(11)

10. RD ← RDn-1,RDn-1:1 ; CNT← DCR(CNT)

→ (5)

11. MQ← (MQ ! ADD(MQ,1)) * ( z, z )

12. e ← ( 0 ! 1) * (∪ /RD, ∪ /RD)

ENDSEQ

Z = MQ

END

Page 193: Curs Complet (265 Pag)

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).

ees Prelucrare

exponenti

Conditii

es

… ..

Conditii

Prelucrari mantise/fractii

Partea care prelucreaza exponentii contine urmatoarele resurse:

RE2 RE1

UALE

RD AC MQ

DEP. LOGICA DEP. LOGICA

UAL

Page 194: Curs Complet (265 Pag)

- 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.

Page 195: Curs Complet (265 Pag)

3.2 Organigrama adunarii/scaderii in virgula mobila.

> <

=

Da Da

Nu Nu

Iesire Iesire

Da Da

Nu

Da

Iesire

Nu

Da

Nu

Nu

Da

Iesire Iesire

⊥ ZE← ⊥ XE-⊥ YE

⊥ ZE: 0 ZE← ⊥ XE-⊥ YE

Dif exp> dim FDif exp> dim F

Deplaseaza YE

Z← X

Deplaseaza XE

Z← Y

ZE← XE ZE← YE

Adunafractiile

Depasiresuperioara?

Exponentmaxim?

Pozitioneaza eof

Pozitioneaza semn, deplaseazafractia, incrementeazaexponent

Suma zero?

Pozitioneaza zero curat

Normalizat?

Exponentminim?

Deplaseaza fractia,decrementeaza exponent

Pozitioneaza euf

Page 196: Curs Complet (265 Pag)

3.3. Organigrama inmultirii in virgula mobila.

Da

Da

Nu iesire cu

Da eroare

Da

Da

Nu

Nu Da

Nu

Iesire

Operandzero?

Pozitioneazazero curat

Aduna exponentii

Exp eof?

Exp euf?

Pozitioneaza eof

Pozitioneaza euf

Restaureaza expo-nentul deplasat

Valoarea absolutaa fractieilor

Inmulteste fractiile

Pozitioneazasemnul produsului

Prod <0? Complementeazaprodus

Normali-zat?

Exp euf?

Decrementeazaexponent.

Deplaseaza fractie

Page 197: Curs Complet (265 Pag)

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

Page 198: Curs Complet (265 Pag)

• 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.

Page 199: Curs Complet (265 Pag)

• 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.

Page 200: Curs Complet (265 Pag)

• 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: THL (A,O) = Intarzierea interna fixa + Intarzierea dependenta de sarcina × sarcina - Modelul liniar

Page 201: Curs Complet (265 Pag)

• 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 + 122 fF*0,0020 ns/fF + 0,5 ns = 0,844 ns

Page 202: Curs Complet (265 Pag)

• 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 + 122 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.

Page 203: Curs Complet (265 Pag)

- 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

Page 204: Curs Complet (265 Pag)

• 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.

Page 205: Curs Complet (265 Pag)

• 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

Page 206: Curs Complet (265 Pag)

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 Rezultat: Z

Operatia: * Conditii: Ci

Formate: φ Singularitai: Si

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:

Xmin ≤ X ≤ Xmax

- sunt cunoscute cu o precizie data:

X - ∆ Xl ≤ X ≤ X + ∆ Xh

Procesor Aritmetic

Timp: T(*,φ)

Page 207: Curs Complet (265 Pag)

- sunt reprezentate cu ajutorul unor simboluri/cifre, in cadrul unui sistem de numeratie, sub

forma unor n-tupluri:

xn-1 xn-2…………………. x1 x0,

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 Ci, reprezentand conditiile in care apare rezultatul;

- unul sau mai multe simboluri Si, 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(Si), impreuna cu singularitatea Si, 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.

Page 208: Curs Complet (265 Pag)

- 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 ≡ xn-1 xn-2…………………. x1 x0,

Y ≡ yn-1 yn-2…………………. y1 y0,

- 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:

Page 209: Curs Complet (265 Pag)

Z ≡ zn-1 zn-2…………………. z1 z0, rezultatul;

C ≡ cp-1 cp-2…………………. c1 c0, indicatorii de conditii

S ≡ sq-1 sq-2…………………. s1 s0, indicatorii de pseudorezultat.

In continuare se vor examina operatiile aritmetice in virgula fixa si in virgula mobila.

2. Operatiile aritmetice in virgula fixa.

2.1. 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 = +/- xn-2…………………. x1 x0,

y = +/- yn-1 yn-2…………… y1 y0,

in conditiile :

-2n-1 ≤ x ≤ 2n-1 -1

-2n-1 ≤ y ≤ 2n-1 -1

La adunarea/scaderea celor doi operanzi, de mai sus, apar urmatoarele situatii:

a) x > 0, y > 0, dar x + y ≤ 2n-1 –1

[x]c + [y]c = |x| + |y| = [x + y]c

Exemplu:

[+3]c + [+2]c = |0011| + |0010| = |0101| = [0101]c

b) x <0, y > 0, dar 0 < x + y ≤ 2n-1 –1

[x]c + [y]c = 2n - |x| + |y| = [x + y]c

transport,

se neglijeaza > 0

Exemplu:

[-6]c + [+7]c = 24 - |0110| + |0111| =

10000 - |0110| + |0111| =

1010 + 0111 = 1 0001 = 0001

transport, se neglijeaza

Page 210: Curs Complet (265 Pag)

c) x <0, y > 0, dar x + y < 0

[x]c + [y]c = 2n - |x| + |y| = [x + y]c

< 0

Exemplu:

[-7]c + [+6]c = 24 - |0111| + |0110| =

10000 - |0111| + |0110| =

1001+ 0110 = [1111]c

d) x <0, y < 0, dar |x| +| y| ≤ 2n-1 –1

[x]c + [y]c = 2n - |x| + 2n - |y| = [x + y]c

transport,

se neglijeaza < 0

Exemplu:

[-3]c + [- 2]c = 24 - |0011| + 24 - |0010| =

10000 - |0011| + 10000 - |0010| =

1101+ 1110 = 1 1011 = [1011]c

transport, se neglijeaza

Schema unui sumator/scazator

Schema se bazeaza pe utilizarea a doua circuite: XOR (7486) si ADD (7483)

Operatia Descrierea Comanda

D ≡ Ω ADD Z = C4,ADD(A,B) 0

SUB Z = C4,SUB(A,B) 1

Codul de operatie specifica operatorul: D ≡ Ω

care ia valorile “0” pentru “+” si “1” pentru ”-“

4 4

44

4

1

1

DA[4] B[4]

7486

7483C4

Z[4]

C0 1

Page 211: Curs Complet (265 Pag)

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 ← ACn-1);

- aparitia transportului, la stanga rangului de semn, mnemonica C, (Cn ← 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 ← Cn ⊕ Cn-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:

Couti = (xi . Cini) ∪ (yi . Cini) ∪ (xi . yi)

Sumi = (xi . yi . Cini) ∪ (xi . yi . Cini) ∪ (xi . yi . Cini) ∪ (xi . yi . Cini),

se concretizeaza intr-un circuit de tip “schema bloc”, denumit SUM, prezentat in continuare:

Page 212: Curs Complet (265 Pag)

Cu ajutorul sumatorului la nivel de bit se poate realiza un sumator pe n biti:

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.

CI

B0

A0

CO

Z0

1

2

3

4

5Yi

Xi

Ciin

Ciout

ReziSUM

CI

B0

A0

CO

Z0

1

2

3

4

5

CI

B0

A0

CO

Z0

1

2

3

4

5

CI

B0

A0

CO

Z0

1

2

3

4

5

Cin

X0

X1

Xn-1

Yn-1

Y1

Y0

Rez0

Rez1

Rez(n-1)

Cout

Page 213: Curs Complet (265 Pag)

In conditiile in care se doreste si implementarea operatiei de scadere, este necesar sa se creeze

posibilitatea inversarii intrarii yi, dupa cum se prezinta in continuare:

Inversarea lui y se realizeaza sub controlul semnalului de selectie InvY, aplicat la intrarea de

selectie a celui de-al doilea multiplexor

CI

B0

A0

CO

Z0

1

2

3

4

5

Rez

SUM

Ciin

MUX

Sel

Ciout

Yi

Xi

1 2

CI

B0

A0

CO

Z0

1

2

3

4

5

Less 4

Rez

Ciin Sel

Yi

3SUM

Xi1

2

Ciout

InvY

MUX1

MUX2

Page 214: Curs Complet (265 Pag)

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.

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 Rez0 si in zero a bitilor Rez(n-1)….. Rez1. Aceasta solutie este ilustrata in urmatoarea

schema bloc.

1 2

CI

B0

A0

CO

Z0

1

2

3

4

5

Less 4

Rez

Ciin Sel

Yi

3SUM

Xi1

2

Ciout

InvY

MUX1

MUX2

Detectie Depasire

Set

DepasireInvY

Page 215: Curs Complet (265 Pag)

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:

Couti = (xi . Cini) ∪ (yi . Cini) ∪ (xi . yi)

Sumi = (xi . yi . Cini) ∪ (xi . yi . Cini) ∪ (xi . yi . Cini) ∪ (xi . yi . Cini),

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

1

2

3

4

5

InvY Cin0 Operatia

X0

Y0

LESSCout0

Rez0

LESS

LESS

Rez1

Rez(n-1)

Cout1

Cout(n-1)

X1

Y1

Y(n-1)

X(n-1)

0

0

Depasire

Set

Zero

Page 216: Curs Complet (265 Pag)

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 , Sum0 , 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.

Sum0 = [x0. y0 . Cin0] ∪ [x0 . y0 . Cin0] ∪

[x0 . y0 . Cin0] ∪ [x0 . y0 . Cin0]

Pentru iesirea, care reprezinta transportul, din rangul 0 s-a inlocuit Cout0 cu Cin1, pentru a

simplifica relatiile, care urmeaza a se obtine.

Cin1= [x0 . Cin0] ∪ [y0 . Cin0] ∪ [x0 . y0]

Pentru rangul urmator 1, se obtine urmatoarea expresie a sumei:

Sum1 = [x1. y1 . Cin1] ∪ [x1 . y1 . Cin1] ∪

[x1 . y1 . Cin1] ∪ [x1 . y1 . Cin1]

In expresia lui Sum1 se va inlocui Cin1 cu componentele care-l alcatuiesc, conform formulei

precedente. Calculul lui Cin1 conduce la urmatoarea expresie:

Cin1= [x0 . Cin0] ∪ [y0 . Cin0] ∪ [x0 . y0],

Astfel, pentru Sum1 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 1012 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.

Page 217: Curs Complet (265 Pag)

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, Gj ,

transport daca are loc relatia:

Gj = xj . yj

De asemenea, rangul j al unui sumator propaga, Pj , transport in situatia de mai jos:

Pj = xj ⊕ yj = (xj . yj) ∪ (xj . yj).

In aceste conditii se pot elabora noi expresii pentru transportul C(j+1) si pentru suma Sumj , la

nivelul fiecarui rang al sumatorului:.

C(j+1) = Gj ∪ (Pj . Cj)

Sumj = (Pj . Cj) ∪ (Pj . Cj)

Astfel, un sumator complet va consta in doua parti: partea P/G si partea Sum

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:

Sum0 = (P0 . C0) ∪ (P0 . C0)

Sum1 = (P1 . C1) ∪ (P1 . C1)

Sum2 = (P2 . C2) ∪ (P2 . C2)

Sum3 = (P3 . C3) ∪ (P3 . C3),

si:

1 2

1 2

/Xj

/Yj

Yj

Xj

Gj Cj

Sumj

Partea P/G Partea Sum

Pj

Page 218: Curs Complet (265 Pag)

- pentru transporturi:

C1 = G0 ∪ (P0 . C0)

C2 = G1 ∪ (P1 . C1) = G1 ∪ (P1 . G0 ) ∪ (P1 . P0 . C0)

C3 = G2 ∪ (P2 . C2) = G2 ∪ (P2 . G1) ∪ (P2 . P1 . G0 ) ∪ (P2 . P1 . P0 . C0)

C4 = G3 ∪ (P3 . C3) = G3 ∪ (P3 . G2) ∪ (P3 . P2 . G1) ∪

∪ (P3 . P2 . P1 . G0 ) ∪ (P3 . P2 . P1 . P0 . C0)

Aceste relatii sunt implementate in unitatea de anticipare a transportului UAT.

Pentru o sectiune de 4 biti, sumatorul cu transport anticipat arata astfel:

Sum3 x3 y3 Sum2 x2 y2 Sum1 x1 y1 Sum0 x0 y0

GP C3 P3 G3 C2 P2 G2 C1 P1 G1 C0 P0 G0

C0

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.

Sum3 P/G 3 Sum2 P/G 2 Sum1 P/G 1 Sum0 P/G 0

Logica de Anticipare a Transportului

Page 219: Curs Complet (265 Pag)

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

C’ S’

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.(log2n + 1).∆t 7.n + 22.log2n

Sumator cu salvare atransportului

Sumator cu salvare atransportului

Sumator obisnuit

Page 220: Curs Complet (265 Pag)

Secvente de microinstructiuni pentru controlul operatiilor in Unitatea de Executie AMD2901

0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 0 LOAD R0, 02H

0 0 1 0 1 1 0 1 1 0 0 0 0 READ R0

0 1 1 1 1 1 0 1 1 0 0 0 1 0 1 0 0 LOAD R1, 04H

0 1 1 1 1 0 1 1 0 1 1 0 0 0 1 ROTUP R1

0 1 0 1 1 0 1 1 0 1 1 0 0 0 1 ROTDWN R1

0 0 0 0 1 0 1 0 0 CLR Q

1 1 1 0 0 0 1 1 0 1 1 0 0 0 1 DBLROTUP R1,Q

1 1 0 0 0 0 1 1 0 1 1 0 0 0 1 DBLROTDWN R1,Q

0 0 1 0 1 1 0 1 1 NOP

0 1 1 0 1 1 1 0 0 0 0 0 1 CLR R1

0 1 1 0 1 1 1 0 0 0 0 0 0 1 INCR R1

0 1 1 0 1 1 0 0 0 1 0 0 0 1 DCR R1

0 1 1 1 1 1 0 1 1 0 0 1 1 0 1 0 1 LOAD R3, 05H

0 1 1 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 ADD R1, R3

23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

M I8 I7 I6 M I2 I1 I0 Cn I5 I4 I3 A3 A2 A1 A0 B3 B2 B1 B0 D3 D2 D1 D0

U Selectie U Selectie Operatie Adresa “A” Adresa “B” Data “D”

X destinatie X sursa UAL

1 2

Observatii

Descrierea microinstructiunilorindividuale la nivel de mnemonice

Page 221: Curs Complet (265 Pag)

Secvente de microinstructiuni pentru controlul operatiilor in Microsecventiatorul AMD2909

Observatii

Descrierea microinstructiunilor

individuale la nivel de mnemonice

0 1 0 0 1 0 0 0 1 JR 09H

. . . . . . . . . ……….

3 0 0 0 0 0 0 0 1 JR 00H

. . . . . . . . . ……….

6 1 0 1 0 0 0 0 1 JR 0AH

. . . . . . . . . ……….

9 0 1 1 0 0 0 0 1 JR 06H

A 0 0 1 0 CONT

B 0 0 1 0 CONT

C 0 0 1 0 CONT

D 0 0 1 0 CONT

E 0 0 1 0 CONT

F 0 0 1 1 0 0 0 1 JR 03H

Secventa: 0, 9, 6, A, B, C, D, E, F, 3, 0, 9, 6,….etc.

31 30 29 28 27 26 25 24

R3 R2 R1 R0 P3 P2 P1 P0

Adresa de Obtinerea µI salt urmatoare

Adresa dememorie, inmemoria decontrol

Page 222: Curs Complet (265 Pag)

Secvente de microinstructiuni pentru controlul operatiilor in Microsecventiatorul AMD2909

Observatii

Descrierea microinstructiunilor

individuale la nivel de mnemonice

0 0 0 1 0 CONT

1 0 0 1 0 CONT

2 1 0 0 1 PUCONT

3 0 0 1 0 CONT

4 0 0 1 0 CONT

5 0 0 1 0 CONT

6 0 0 1 0 CONT

7 0 0 1 0 CONT

8 0 0 1 0 CONT

9 0 0 1 0 CONT

C 0 0 1 0 CONT

D 0 0 1 0 CONT

E 0 1 1 0 JSTV

Ciclare in microprogram. Secventa: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, 3, 4, 5,….etc.

31 30 29 28 27 26 25 24

R3 R2 R1 R0 P3 P2 P1 P0

Adresa de Obtinerea µI salt urmatoare

Adresa dememorie, inmemoria decontrol

Page 223: Curs Complet (265 Pag)

Secvente de microinstructiuni pentru controlul operatiilor in Microsecventiatorul AMD2909

Observatii

Descrierea microinstructiunilor

individuale la nivel de mnemonice

0 0 0 1 0 CONT

1 0 0 1 0 CONT

2 0 0 1 0 CONT

3 1 1 0 0 0 1 0 1 JSR 0CH

4 0 0 1 0 CONT

5 0 0 1 0 CONT

6 0 0 0 0 0 0 0 1 JR 00H

7 . . . . . . . . ……….

8 . . . . . . . . ……….

9 . . . . . . . . ……….

C 0 0 1 0 CONT

D 0 0 1 0 CONT

E 0 1 1 0 RS

Salt la subrutina Secventa: 0, 1, 2, 3, C, D, E, 4, 5, 6, 0, 1, 2, 3, C, D,….etc.

31 30 29 28 27 26 25 24

R3 R2 R1 R0 P3 P2 P1 P0

Adresa de Obtinerea µI salt urmatoare

Adresa dememorie, inmemoria decontrol

Page 224: Curs Complet (265 Pag)

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

Page 225: Curs Complet (265 Pag)

Secvente de microinstructiuni pentru controlul operatiilor in Microsecventiatorul AMD2909

Observatii

Descrierea microinstructiunilor

individuale la nivel de mnemonice

0 1 1 0 0 0 1 0 1 JSR 0CH

1 0 1 1 0 0 1 0 1 JSR 06H

2 0 1 1 0 RS

3 1 1 0 0 0 1 0 1 JSR 0CH

4 1 0 0 1 0 1 0 1 JSR 09H

5 0 1 1 0 RS

6 1 1 0 0 0 1 0 1 JSR 0CH

7 0 0 1 1 0 1 0 1 JSR 03H

8 0 1 1 0 RS

9 0 0 1 0 CONT

A 0 1 1 0 RS

C 0 1 1 0 RS

D 0 0 1 0 CONT

E 0 0 0 0 0 1 0 1 JSR 00H

F 1 1 0 1 0 1 0 1 JSR 0DH

Microsubrutine imbricate. Secventierea adreselor de microinstructiuni: D, E, 0, 1, 6, D, 7, 3, D, 4, 9, A, 5, 8, 2, F, D etc

31 30 29 28 27 26 25 24

R3 R2 R1 R0 P3 P2 P1 P0

Adresa de Obtinerea µI salt urmatoare

Adresa dememorie, inmemoria decontrol

Page 226: Curs Complet (265 Pag)

Adr Observatii

µµI

Descrierea microinstructiunilor

0 2 3 3 1 0 0 CONT INC R0

1 15 15 1 JRC 15 NOP

2 0 1 1 JR 0 NOP

15 2 1 CONT NOP

(INCREMENT & TEST)

0 2 3 7 3 0 0 CONT LOAD R0, 0

1 14 1 3 7 3 15 15 JR 14 LOAD R15,15

14 2 3 3 3 0 CONT READ R0

15 14 1 3 3 3 15 JR 14 READ R15

(INCARCARE & CITIRE/AFISARE)

31302928 27 26 25 24 23 22 2120 19 18 1716 15 1413 12 11 10 9 8 7 65 4 3 2 1 0

R3:0 P3:0 M I8:6 M I2:0 Cn I5:3 “A” “B” “D” 1 0

Page 227: Curs Complet (265 Pag)

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=0001

6 R0 ←← R0/2; JSRNZF 14

7 R1 ∩∩ D; D=0001

8 R1 ←← R1/2; JSRNZF 14

9 R2 ∩∩ D; D=0001

10 R2 ←← R2/2; JSRNZF 14

11 DCR R4

12 JRZF 5

13 NOP; JR 15

14 RS; INC R3

15 READ R3; JR 15

Page 228: Curs Complet (265 Pag)

Adr Observatii

µµI

Descrierea microinstructiunilor

0 2 3 7 3 0 V0 CONT LOAD R0, V0

1 2 3 7 3 1 V1 CONT LOAD R1, V1

2 2 3 7 3 2 V2 CONT LOAD R2, V2

3 2 3 7 3 4 4 CONT LOAD R4, 4

4 2 3 3 4 3 CONT LOAD R4, 0

5 2 1 5 4 0 0 1 CONT R0 ∩∩ MSK (0001)

6 14 4 5 3 3 0 JSNZF 14 R0←← R0/2

7 2 1 5 4 1 1 1 CONT R0 ∩∩ MSK (0001)

8 14 4 5 3 3 1 JSNZF 14 R1←← R1/2

9 2 1 5 4 2 2 1 CONT R2 ∩∩ MSK (0001)

10 14 4 5 3 3 2 JSNZF 14 R2←← R2/2

11 2 3 3 0 1 4 CONT DCR R4

12 5 0 1 JRNZF 5 NOP

13 15 1 1 JR 15 NOP

14 6 3 3 1 0 RS INC R3

15 15 1 1 3 3 JR 15 READ R15

31302928 27 26 25 24 23 22 2120 19 18 1716 15 1413 12 11 10 9 8 7 65 4 3 2 1 0

R3:0 P3:0 M I8:6 M I2:0 Cn I5:3 “A” “B” “D” 1 0

Page 229: Curs Complet (265 Pag)

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←← R0 + 1 12 JRNZF 7

8 JRNZF 7 13 R3←← R3 + 1

9 R1←← R1 + 1 14 JRNZF 7

10 JRNZF 7 15 JR 7

11 R2←← R2 + 1

Adr Observatii

µµI

Descrierea microinstructiunilor

7 2 3 3 1 0 CONT R0←← R0 + 1

8 7 0 1 JRNZF 7 NOP

9 2 3 3 1 1 CONT R1←← R1+ 1

10 7 0 1 JRNZF 7 NOP

11 2 3 3 1 2 CONT R2←← R2 + 1

12 7 0 1 JRNZF 7 NOP

13 2 3 3 1 3 CONT R3←← R3 + 1

14 7 0 1 JR 7 NOP

31302928 27 26 25 24 23 22 2120 19 18 1716 15 1413 12 11 10 9 8 7 65 4 3 2 1 0

R3:0 P3:0 M I8:6 M I2:0 Cn I5:3 “A” “B” “D” 1 0

Page 230: Curs Complet (265 Pag)

Evaluarea perioadei ceasului.

6 7

Conditii

8

1 2 6, 4

Conditii

5

3

5

Ceas (CK)

MUX

µµ Secv.AMD2910

Memorie de control

RµµI

LSB /G, /P

A,B,I,Cn 2901 BCK Y

MSB Cn+4 OVR 2901 B F3Cn YCK F=0

MUXMUX

RCond

/GCn AMD 2902 Cn+z /P

CK Registru dr Date

Page 231: Curs Complet (265 Pag)

Evaluarea intarzierilor in propagarea semnalelor:

Unitatea de executie

1. RµµI Cesa → Iesire 15 ns

2. 2901 B A,B → /G0, /P0 50 ns

3. 2902 /G0, /P0 → Cn+z 10 ns

4. 2901 B Cn → Cn+4, OVR,Y 29 ns

5. RCond,MUX Intr→ Ies 21 ns

6. 2901B RAM3 setup 16 ns

Total: 141 ns

Unitatea de Comanda.

1. RµµI Cesa → Iesire 15 ns 6. MUX Selectie → Iesire 20 ns 7. 2910 Conditii → Iesire 45 ns 8. PROM Timpul de Acces 55 ns 1. RµµI Setup 5 ns

Total: 140 ns 140 ns

Ceas (CK)

Page 232: Curs Complet (265 Pag)
Page 233: Curs Complet (265 Pag)

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 aritmetica-

logica, 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 2900.

In cele ce urmeaza va fi prezentata unitatea de executie AMD 2901 sub aspect structural-

functional. 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 2901.

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.

Page 234: Curs Complet (265 Pag)

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 aritmetice-

logice, 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 2901.

In figura se prezinta schema bloc a circuitului AMD 2901.

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 I3:5, trei operatii aritmetice

binare si cinci operatii logice, asupra operanzilor aplicati la intrarile R si S.

Page 235: Curs Complet (265 Pag)

4

RAM0 RAM3 Q0 Q3

Ceas

4 4

Adrersa “A”

4 4 CP I6:8

Adresa “B” WE 4

Data D 4

4 4 0

I0:2

4 4

Cn G, P

I3:5 (Cn+4, OVR, F=0, F3) 4 4

OE

I6:8

Y

Intrarile R si S ale UAL sunt preluate de la iesirile unui circuit selector (Selector sursa UAL),

care sub controlul semnalelor I0: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.

0 RAMSHIFT 3

“B” DATAINCitire RAM 16 × 4Citire/Scriere DATA OUT “A” “B”

D A B 0 Q Selector sursa R S

0 QSHIFT 3

F QREG Q

Cn R S UAL

A F Selector Iesire

Page 236: Curs Complet (265 Pag)

Tab.1.

Mnemonica Microcod Codul Sursa octal I2 I1 I0 R S

AQ 0 0 0 0 A Q

AB 0 0 1 1 A B

ZQ 0 1 0 2 0 Q

ZB 0 1 1 3 0 B

ZA 1 0 0 4 0 A

DA 1 0 1 5 D A

DQ 1 1 0 6 D Q

DZ 1 1 1 7 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

Operatiile efectuate de UAL sint prezentate in tabelul de mai

jos:

I8:6 I5:3 I2:0

Destinatie UAL Functie UAL Sursa UAL

8 7 6 5 4 3 2 1 0

Page 237: Curs Complet (265 Pag)

Tab. 2.

Mnemonica Microcod Cod Functia Simbol octal UAL I5 I4 I3

ADD 0 0 0 0 R Plus S R+S

SUBR 0 0 1 1 S Minus R S-R

SUBS 0 1 0 2 R Minus S R-S

OR 0 1 1 3 R OR S R∪ S

AND 1 0 0 4 R AND S R∩ S

NOTRS 1 0 1 5 R AND S R & S

EXOR 1 1 0 6 R EXOR S R⊕ S

EXNOR 1 1 1 7 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+1

0 1 A+B A+B+1

0 5 D+A D+A+1

0 6 D+Q D+Q+1

0 2 Pass Q Increment Q+1

0 3 B B+1

0 4 A A+1

0 7 D D+1

1 2 Decrement Q-1 Pass Q

Page 238: Curs Complet (265 Pag)

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 Functie I5:3,I2:0

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

Page 239: Curs Complet (265 Pag)

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" 0

4 3 0

4 4 0

4 7 0

5 0 MASK A ∩ Q

5 1 A ∩ B

5 5 D ∩ A

5 6 D ∩ Q

Campul "Destinatie UAL" (I8:6) din vectorul de comanda I8:0 are o semnificatie complexa prin

faptul ca specifica:

Page 240: Curs Complet (265 Pag)

- operarea RAM (deplasare/incarcare/inactiv);

- operarea registrului Q (deplasare/incarcare/inactiv);

- conexiunile la RAMSHIFT (RAM0 si RAM3);

- conexiunile la QSHIFT (Q0 si Q3);

- iesirea Y.

Terminalele RAM0/RAM3 si Q0/Q3, din punct de vedere electric, sunt terminale de

intrare/iesire, controlul lor fiind asigurat de campul I8:6, din microcod.

In tabelul de mai jos se prezinta semnificatiile campului I8: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

I8I7I6 Depl Incarc. Depl Incarc. Y RAM0 RAM3 Q0 Q3

QREG 0 0 0 0 * Nu * Q← F F * * * *

NOP 0 0 1 1 * Nu * Nu F * * * *

RAMA 0 1 0 2 Nu B← F * Nu A * * * *

RAMF 0 1 1 3 Nu B← F * Nu F * * * *

RAMQD 1 0 0 4 DOWN B← F/2 DOWN Q← Q/2 F F0 IN3 Q0 IN3

RAMD 1 0 1 5 DOWN B← F/2 * Nu F F0 IN3 Q0 *

RAMQU 1 1 0 6 UP B← 2F UP Q← 2Q F IN0 F3 IN0 Q3

RAMU 1 1 1 7 UP B← 2F * Nu F IN0 F3 * Q3

*)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 I8:6, selecteaza intrarea directa sau deplasata stanga/dreapta, cu insertia unor date

Page 241: Curs Complet (265 Pag)

speciice prin terminalele RAM3/RAM0. Dupa cum se va vedea ulterior (Fig. ), datele pentru

terminalele RAM3/RAM0 sunt selectate cu ajutorul altor biti (MUX1, MUX0 ) 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 I7 MUX0 MUX1 MUX0 MUX1

H H

H H

1G A B 2G1C01C11C2 1Y1C3 25LS-2532C02C1 2Y2C22C3

1G A B 2G 1C0 1C11Y 1C2 25LS-253 1C3 2C02Y 2C1 2C2 2C3

LSB MSB

Q0 Q1

AMD 2901RAM1RAM3

MSB-Fn

Page 242: Curs Complet (265 Pag)

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

D0:3 D12:15

Q0I/O Q15I/O

RAM0I/O RAM15I/O

Cin

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.

Q0 Q3

RAM0 RAM3

/G /P AMD 2901(1) Cn+4

OVR F3

Cn F=0

Q0 Q3

RAM0 RAM3

/G /P AMD 2901(4) Cn+4

OVR F3

Cn F=0

/P0 /G0 /P1 /G1 /P2 /G2 /P3 /G3Cn AMD 2902 /G Cn+x Cn+y Cn+z /P

Page 243: Curs Complet (265 Pag)

“0”

MUX1,MUX0

0 3 0 3 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):

MUX1MUX0 TIP DREAPTA (JOS) STANGA (SUS)

0 0 ZERO RAM3 ← 0; RAM0 ← 0;

Q3 ← 0 Q0 ← 0

0 1 ROTIRE RAM3 ← RAM0 ; RAM0 ← RAM3;

Q3 ← Q0 Q0 ← Q3

1 0 ROTIRE CU RAM3 ← Q0; RAM0 ← Q3;

LUNGIME DUBLA Q3 ← RAM0 Q0 ← RAM3

1 1 DEPLASARE RAM3 ← F3 ; RAM0 ← Q3;

DUBLA Q3 ← RAM0 Q0 ← 0

ARITMETICA

MUX MUX MUX MUX

RAM SHIFT QSHIFT

Page 244: Curs Complet (265 Pag)

Cuvantul (microinstructiunea) de comanda al unitatii de executie va avea structura urmatoare:

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 Cn este asociat cu transportul in

rangul cel mai putin semnificativ al unitatii de executie, fiind la latitudinea celui care scrie

microprogramul.

23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

M I8 I7 I6 M I2 I1 I0 Cn I5 I4 I3 A3 A2 A1 A0 B3 B2 B1 B0 D3 D2 D1 D0

U Selectie U Selectie Operatie Adresa “A” Adresa “B” Data “D”

X destinatie X sursa UAL

1 2

Page 245: Curs Complet (265 Pag)

Unitati de comanda integrate. Secventiatorul de microprogram AMD 2909.

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.

Page 246: Curs Complet (265 Pag)

R[3:0] FE PUP(PUSH/POP)

RE

D3:0

Ceas

S0

S1

ORi

Cn+4

ZERO

Cn

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

S1,S0:

- 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

RR[4] IS

STV4 cuv.× 4 biti

CMP[4]

D RR STV CMP MUX X[4]

INCSAU-NU

SI

TS

Page 247: Curs Complet (265 Pag)

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 ORi ZERO OE Yi

0 0 CMP * * 1 Z (TS)

0 1 RR * 0 0 0

1 0 STV 1 1 0 1

1 1 D 0 1 0 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:

S1 S2, 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:

Page 248: Curs Complet (265 Pag)

S1 S2, 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:

S1 S2, 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:

S1 S2, 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) * DCD0:3(S1,S0) ∪ OR0:3) ! 4 0)* (ZERO, ZERO)

CMP ← ((INC(CMP ! RR ! STV ! D) * DCD0:3(S1,S0) ∪ OR0:3) ! 4 0)* (ZERO, ZERO)

STV ← ((STV1:3 ! STV0) ! (CMP ! CMP ! STV0:2) ! STV ! STV) * DCD0: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 2909.

R D

4 12 12 4

4

4

S0:1

OR0:3

altele

Y0:11

R DS0:1

AMD2909OR0:3

Cn Cn+4

altele Y0:3

R DS0:1

AMD2909OR0:3

Cn Cn+4

altele Y0:3

R DS0:1

AMD2909OR0:3

Cn Cn+4

altele Y0:3

Page 249: Curs Complet (265 Pag)

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:

AMD29751

A4:1

CS P3:0 AMD2909 Y[4]

Cn+4

Cn

MUX0,MUX1

ADRESA “A”

ADRESA “B”

DATA “D”

SELECTIE SURSA (I2:0)

OPERATIE UAL (I5:3)

SELECTIE DESTINATIE (I8:6)

SELECTIE COD CONDITIE (P3:0)

CODUL CONDITIEI SELECTATE

RR[4] IS

STV4 cuv.× 4 biti

CMP[4]

D RR STV CMP MUX X[4]

INC

CA

MM

RMI AMD2918

A0

PROM

Page 250: Curs Complet (265 Pag)

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 P0:3, al registrului microinstructiunii RMI. Bitii P0:3 ai

microinstructiunii se transforma in bitii de adresa A1:4, ai memoriei PROM, in timp ce bitul A0

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

P0: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

Adresa

4 4 R3:0

Semnale de

P3:0 comanda

Registrul Instructiunii RI

Cod operatie adresa, etc.

PROM mapare adresa

O5 PROM 29751 O4 O3A0 O2 O1 O0A4A3A2A1

D[4] R[4]OR[4]

ZEROPUP AMD 2909FES1 Cn+4

S0 Cn

Yout

Memoria de microprogram

RMI

MUX

Page 251: Curs Complet (265 Pag)

Operarea unitatii de comnada microprogramata este stabilita prin continutul memoriei PROM,

care furnizeaza la iesire semnalele O5:0, care reprezinta vectorul de comanda al

microsecventiatorului: OR[4], ZERO, PUP, FE, S1, S0. In locatiile memoriei PROM, adresate cu

ajutorul campului P3:0, sunt stocati vectori de comanda, care impun unitatii de comanda

microprogramate efectuarea operatiilor prezentate in tabelul de mai jos:

P3: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 Cn+4 = 1 TCPOC

C Ramificare la adresa R daca F = 0 JRZF

D Ramificare la adresa R daca F3 = 1 JRF3

E Ramificare la adresa R daca OVR = 1 JROVR

F Ramificare la adresa R daca Cn+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 P3:0, care

Page 252: Curs Complet (265 Pag)

stabileste operatia, conform tabelului de mai sus, si de campul R3: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.

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)

31 30 29 28 27 26 25 24

R3 R2 R1 R0 P3 P2 P1 P0

Adresa de Obtinerea µI salt urmatoare

Page 253: Curs Complet (265 Pag)
Page 254: Curs Complet (265 Pag)

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

Page 255: Curs Complet (265 Pag)

Structuri utile de porti.

Page 256: Curs Complet (265 Pag)

Logica pentru Sumatorul Complet (SC)

Ecuatia transportului C0 poate fi simplificata destul de usor: C0 = 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)

Page 257: Curs Complet (265 Pag)

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 2N intrari.

Page 258: Curs Complet (265 Pag)

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=2k 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.

Page 259: Curs Complet (265 Pag)

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.

Page 260: Curs Complet (265 Pag)

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 ≈ 2N × 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.

Page 261: Curs Complet (265 Pag)

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.

Page 262: Curs Complet (265 Pag)

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

Page 263: Curs Complet (265 Pag)

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.

Page 264: Curs Complet (265 Pag)

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.

Page 265: Curs Complet (265 Pag)

Tablou de porti: Exemplu.