Documente Academic
Documente Profesional
Documente Cultură
1.INTRODUCERE.
1
Denumirile calculatoarelor produse in Romania sunt prezentate cu litere cursive
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
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.
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.
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.
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 DaNu Nu
. . .
n<2? n<4? n<6? n<8?
Da Nu Da . Nu Da Nu Da . Nu
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:
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.
Legatura dintre mesaj si informatie reprezinta o aplicatie c:
c
M Æ I,
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.
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
n-1
v = ∑ 2i.bi
i=0
211 210 29 28 27 26 25 24 23 22 21 20
0 1 1 0 1 0 1 1 1 0 0 1
Baza 8 Baza 16
Triada binara Cifra octala Tetrada binara cifra hexa. Tetrada binara cifra hexa.
-2n-1 2n-2 …. …. …. 23 22 21 20
Eveniment A B C D
0 1
A 0 1
0 1 B
C D
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:
12 12
imed = ∑ (Mj/N).log2(N/Mj) = ∑ (pj).log2(1/pj) = 3,275 biti.
j=2 j=2
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?
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.
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):
3. Elemente introductive privind operarea si organizarea unui sistem numeric.
Unitatea de Executie
RC SUM/DIF N
A[i]
MAX
RM RD UNU
n
MAX CNT
Unitatea de Comanda
start START … …
AUTOMAT
DE
COMANDA
CEAS
RESET
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
1.
start START=1
2.
N=0
3.
N≠ 0
4.
5.
6.
7.
RD < 0
8.
9.
RD ≥ 0
10
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.
ai aj Fj d
Informatia ai Instructiunea Fi
0 1A0
1 2A0
2 3A0
3 4A0
4 5A0
5 6A0
6 7A0
7 8A0
8 9A0
9 0F -
V 1A0
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.
4. Modalitati de reprezentare a calculatoarelor.
7 0 7 0
PI0 F
…….. A 7 0
PI255 B C
D E
PE0 H L
……. SP
PE255 PC
15 0
Atat porturile de intrare PI0,.....,PI255, cat si porturile de iesire PE0,....,PE255 au cate 8 biti.
In cadrul registrelor generale se intalnesc si o serie de registre cu caracter specializat in ceea ce
priveste utilizarea:
- A este registrul acumulator principal, folosit in cele mai multe operatii aritmetice si logice;
- B, C, D, E, H, L sint registre de uz general, desi unele au si utilizari speciale ( H si L sunt
folosite adesea pentru formarea unor adrese de operanzi pe 16 biti );
- F este registrul indicatorilor de conditii, furnizati de unitatea de executie dupa fiecare operatie
( 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
S7 Z6 *5 4
AC *3 P2 *1 0
CY
- 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: AH AL Acumulator
BX: BH BL Registru - baza
CX: CH CL Registru - contor
DX: DH DL Registru - date
SP Indicator - stiva
BP Indicator - baza
SI Indicator - sursa
DI Indicator - destinatie
Indicatorii de conditii
15 12 11 10 9 8 7 6 5 4 3 2 1 0
* * O D I T S Z * A * P * C
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
15 0
Indicator de instructiune
IP
(Contorul Programului)
Microprocesorul 8086 mai poseda cate doua tablouri de porturi de intrare/iesire, a cate 65536
octeti fiecare:
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:
0 31
…………………………………………………..
RG15
PC
32 33 34 35 36 37 38 39 40 41
DI DS DD DB Z S D C IS IE
CE NP CA ……………………….. MR PM NIT
I E
UI UCe UE
UCe
Date/
EPI SI UM SE EPE
Instr. Instr. Date
Date Rez. Comenzi
Cond Cond
UE UC
Com
Comenzi
Conditii
Comenzi
date /adrese
instructiuni
comenzi,
conditii/indicatori de stare/stari.
Unitatea de memorie are functia de stocare a datelor initiale, a programului, a rezultatelor
intermediare si finale. In sistemele moderne ea poate opera autonom, atat cu SI/SE, cat si cu
procesorul ( ansamblul unitate de comanda - unitate de executie ). Unitatea de memorie are o
organizare liniara, constand in celule de stocare a informatiei, al caror continut poate fi
manipulat prin specificarea adresei celulei date.
Memoria
(n-1) 0
Celula 0
Celula 1
(m-1) 0
Adresa i Celula i
m
Registrul de adrese
Celula 2(m -1)
(m-1)
Adresa ia valori cuprinse intre 0 si 2 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.
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
- sistem de calcul in care unele terminale ( echipamentele de I/E ) transfera date cu memoria
direct ( T1 ) sau prin intermediul procesorului ( T2, T3 ):
M S1 P S2 K2 T2
K3 T3
K1 T1
COP ADRESA
Instructiunea cu doua 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
( 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
I B Q X F D
unde:
- I poate lua valoarea 0 in cazul adresarii directe si 1, in cazul adresarii indirecte;
- 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.
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 ).
Semnale de Conditii
comanda
Unitatea de executie asigura prelucrarea datelor, reprezentate sub forma unor vectori binari,
prin transferul acestora intre registrele sursa si registrele destinatie.Transferul se efectueaza prin
intermediul unor retele/circuite logice combinationale.
Transferurile intre registre.
Intrucat prelucrarea datelor are la baza transferul intre registre, proiectarea unui sistem
numeric, in vederea executiei unui algoritm, consta intr-o planificare, ce va defini fiecare
transfer, prin specificarea ordinii/temporizarii ( timing ) in care aceste transferuri vor avea loc.
In continuare se prezinta mecanismele hardware de implementare a transferurilor intre registre
si notatiile corespunzatoare folosite. Registrele sunt notate cu majuscule avand, de regula, o
semnificatie mnemotehnica. Pe scurt, se vor folosi "mnemonice".
Transferul continutului unui registru sursa intr-un registru destinatie, fara a afecta continutul
sursei, se noteaza astfel:
AC RD
Daca registrul AC are patru biti, anularea/fortarea in unu a tuturor bistsbililor se pot nota dupa
cum urmeaza:
AC 0,0,0,0
AC 1,1,1,1
Ceas (CLK)
PRE
Data 2 5 Iesire
D Q
Ceas 3 6 Data (D)
CLR
CLK Q
In cazul bistabilelor de tip master-slave fortarea datelor are loc pe frontul anterior al semnalului
de ceas, iar aparitia lor la iesire se constata pe frontul posterior al ceasului. Mai jos se prezinta
simbolul si diagrama temporala pentru operarea bistabilului JK.
2
Ceas (CLK)
PRE
Data 4 15 Iesire
J Q
Ceas 1 Data (J/K)
CLK
Data 16 14
CLR
K Q Iesire (Q)
7476
In continuare se vor considera elemente bistabile de tip master-slave, atat pentru sectiunea de
date, cat si pentru sectiunea de comanda.
Un circuit secvential de comanda furnizeaza, pentru sectiunea de date, diverse semnale de
comanda, sincrone cu ceasul sistemului, cu perioade egale cu durata unei perioade de ceas sau
cu multipli ai acesteia. Acestea sunt semnalele de comanda de tip nivel.
Semnalele de Comanda de tip Nivel (SCN) vor avea un sufix numeric i ce va specifica numarul
iesirii de comanda a automatului (SCNi). Semnalele SCNi pot fi strobate/esantionate cu
semnalul curent de ceas, pentru a forma Semnale de Comanda de tip Impuls(SCIi), cu durata
activa corespunzatoare semnalului curent de ceas.
Conditii
SCN(i-1) SCNi 1
3 SCIi
2
Ceas 7408
Ceas
SCN(i-1)
SCI(i-1)
SCNi
SCIi
2
PRE
PRE
4 15 4 15
J Q J Q
1 1
CLK CLK
16 14 16 14
CLR
CLR
K Q K Q
7476 7476
3
3
2
2
PRE
PRE
4 15 4 15
J Q
RA1 J Q
RB1
1 1
CLK CLK
16 14 16 14
CLR
CLR
K Q K Q
7476 7476
3
SCN1 3
1
3
2
Ceas
7408
RA0 RB0
4
4
PRE
PRE
2 5 2 5
D Q D Q
3 6 3 6
CLR
CLR
CLK Q CLK Q
7474 7474
1
RA1 RB1
4
4
PRE
PRE
2 5 2 5
D Q D Q
3 6 3 6
CLR
CLR
CLK Q CLK Q
7474 7474
1
SCN1 1
3
Ceas 2
7408
Diagrama de timp care arata modul in care noua informatie se transfera in RB este data mai jos:
Ceas
SCNi
SCIi
RA0
PRE
2 5 1
D Q 3
3 6 2
CLR
CLK Q
7408 U9A
7474 1
3
41
4
RA1 2
PRE
PRE
2 5 1 7432 2 5
D Q 3 D Q
3 6 2 3 6
CLR
CLR
CLK Q CLK Q
7408
7474 7474
1
SCN1 1
4
RB0
PRE
PRE
2 5 1 2 5
D Q 3 D Q
3 6 2 3 6
CLR
CLR
CLK Q CLK Q
7408 U10A
7474 1 7474
3
41
RB1 2
PRE
2 5 1 7432
D Q 3
3 6 2
CLR
CLK Q
7408
7474 1
3 1
1
SCN2 SCN1
2 3
SCN2 2
7432
7408
CLK
4
RB0 1 RA0
3 1
PRE
2 3 2 5
2 D Q
7408 3 6
CLR
7432 CLK Q
7474
1
4
RB1 1 RA1
3 1
PRE
2 3 2 5
2 D Q
7408 3 6
7432 CLR
CLK Q
CLK 1
1 3
SCN3 2 9 2
SCN2 8
SCN1 7408
RBi 1
3
RCi 2
4
RAi
7408
PRE
2 5
D Q
3 6
CLR
CLK Q
U41A
SCNj 1 7474
3
1
Ceas 2
SCIj
7408
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.
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.
7408
16 A1 2
4 B4
SUM3
7 B3 6
11 B2
SUM2
13 B1 9
C4[1] 1 4 S[4] C0
SUM1
7483A
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.
A[1] 1 B[4] Operatia Descrierea Comanda
4 A[4] 4 A[1]
7486 TRUE Z= B 0
NEG Z= B 1
4 Z[4]
Multiplexorul 74157
LOAD
A[4] B[4] 10
Operatia Descrierea Comanda
WS
WS 4 4 3
A1 QA
15 WS
2
A2
CKL 74298 4
1 B1 QB
14
LOADA Q A 0
9 B2 13
5 C1 QC
7 C2
D1 QD
12 LOADB Q B 1
6
11 D2
4 Q[4] CLK
74298
Scheme combinate.
Schema unui sumator/scazator
Schema se bazeaza pe utilizarea a doua circuite: XOR (7486) si ADD (7483)
A[4] B[4]
D
D
7486
ADD Z = C4,ADD(A,B) 0
4 4 SUB Z = C4,SUB(A,B) 1
7483
C4 1 C0 1
4 Z[4]
4
RB 1 RD
3 1
PRE
PRE
2 5 2 3 2 5
D Q 2 D Q
3 6 7408 3 6
CLR
CLR
CLK Q 7432 CLK Q
7474 7474
1
1
1
CLK
SCN3 1 3
1 3 2
3 2
2 7408
SCN6 7408
7432
SCN6 SCN6 2
1 3
3 1 SCN5 1
2 3 SCN4 4
SCN5 2 5
7432 SCN2
7408
4
RA
1
PRE
2 5 1 3 RC
D Q 3 2
PRE
3 6 2 2 5
CLR
CLK Q 7432 D Q
7408 3 6
CLR
7474 CLK Q
1
1
CLK
SCN4 3 7474
1 2
1
3
2 7408
SCN1
7432
SCN6 2
3
SCN5 1
SCN3 4
5
SCN1
+5V
R
RD
RB D
Q 1
3
2 CLK
OC
CLK
1
3
RAMAG/BUS = RB 2
Q 1
3
2 RD <- MAG/BUS RC
OC
D
MAG/BUS
CLK
MAG/BUS = RA
CLK
1
3
2
RC <- MAG/BUS
Se poate observa ca portile SI, care conecteaza iesirile registrelor RA si RB, la magistrala sunt
de tipul “colector deschis” OC. Conexiunile Registrelor RA si RB, la magistrala MAG/BUS se
realizeaza sub controlul unor semnale de comanda de tip nivel, specificate in desen prin
expresiile: MAG/BUS = RA si MAG/BUS = RB. Fortarea continutului magistralei MAG/BUS
in registrele RC si RD are loc sub controlul semnalelor de comanda de tip impuls, specificate in
desen prin expresiile: RC MAG/BUS si RD MAG/BUS.
Magistrala joaca rolul unui circuit SAU, conform figurii de mai jos.
Transferurile nu se mai pot efectua in paralel, de la surse la destinatii. Ele vor avea un caracter
secvential. Astfel, transferul:
1. RC RA, se va efectua prin operatiile:
1. MAG/BUS = RA; RC MAG/BUS,
unde simbolul “=” reprezinta o conexiune, pe durata unui semnal de comanda de tip nivel.
4
4
PRE
PRE
2 5 1 2 5
D Q 3 D Q
3 6 2 3 6
CLR
CLR
CLK Q CLK Q
7474 7474
1
1
1
3 CLK 1
MAG/BUS = RB 2 3
4
RA 2
4
7432
PRE
Q 2 5
PRE
2 5 1 RD <- MAG/BUS D Q
D Q 3 3 6
CLR
3 6 2 CLK Q
CLR
CLK Q
7474
7474
1
MAG/BUS CLK 1
1
3
MAG/BUS = RA 2
RC <- MAG/BUS
Functia de cost va fi data de numarul portilor SI, al portilor SAU, cat si de numarul de biti ai
vectorilor transferati:
- numarul de porti SI = s.n,
- numarul de porti SAU = n
Rezulta o functie de cost ≈n.(s + 1)
De cele mai multe ori conexiunile registrelor-sursa la magistrala se realizeaza prin circuite “Tri-
state”, care inlocuiesc circuitele de tip “OC”.
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.
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.
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].
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.
Fie matricea M:
1001
M← 0 1 0 0 , atunci: +/M = ( 2,1,3 ); +//M = ( 2,1,1,2,) si +/(+//(M)) = 6.
1011
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:
11
N ← 00
11
1001
N←
0100
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^ Mi1 ^ Mi2 ^ Mi3 ) = 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
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
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
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)
VD ← VLCS
Transfer sincron VD ← MLCS * F
MD * F ← VLCS
BUS = VLCS
Instructiune de conectare BUS = MLCS*F
z = VLCS
z = MLCS * F
Exemple de descrieri AHPL ale unor UNITATI (Circuite Logice Combinationale) si ale
unor module.
sum
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.
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.
X15 Y15
1. C15 C16
FADD
S15
2. X14 Y14 X15 Y15
C14 C15 C16
FADD FADD
S14 S15
3. X0 Y0 X14 Y14 X15 Y15
C0 C14 C15 C16
FADD FADD FADD
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
DCD
An DCD2n -1
Comnada M0
Adresa ( DCD),
R M1
(BUSFN)
A …..
M2↑↑m -1
RD
Data
M0 M1 Mp2M-1
SCNi
citeste
0 1
N N
MAG/BUS
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 PRE Q D Q D Q D Q
1 2 3 4
C C CLR C CLR C CLR
SYN(start)
Ceas
PRESET
Ceas
start
SYN(start)
SCN1
SCN2
SCN3
In continuare, operarea automatului cu stari complet decodificate, la nivelul primului bistabil,
este prezentata sub forma diagramei de tranzitii:
SYN(start) PRESET(1)
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.
SYN(start) SNP(SYN(start))
start
D PRE Q D PRE Q
C C
SYNI(start)
ceas
ceas
start
SYN(start)
SYNI(start)
SNP(SYN(start))
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)).
DATIN
ADR R M R
A D
DATIES MAG
citeste
Comanda
scrie ocupat
MAG = DATEIES
citeste ADR <- CP SYN(ocupat) RI <- MAG
(1)
D Q D Q
2 3
C CLR C CLR
ceas
ceas
SCN2
citeste
ocupat
SYN(ocupat)
SCN3
SCN4
Se poate constata faptul ca, pasul (4), FARA INTARZIERE, este amorsat in ultima parte a
pasului anterior (3), ceea ce conduce la castigarea unei perioade de tact.
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 RSECV
CAR[8] RIN[8]
data y
MRD[16:8] Y[1]
accept
CNT[4]
//incarcarea programului
//oprire simulare
initial begin: stop_at
#300; $stop;
end
//bucla principala
always begin:bucla_principala
if (!reset)
begin
#10; fetch;
#10; execute;
end
else
#10;
end
// mijloace de depanare
task apply_reset;
begin
reset = 1;
#10;
reset = 0;
cp = 0;
ac = 0;
end
endtask
task fetch;
begin
rd = m[cp];
cp = cp + 1;
end
endtask
task execute;
begin
ri = rd;
case(ri[7:4])
4'b0000:begin // LAC
ra = ri[3:0];
rd = m[ra];
ac = rd;
end
4'b0001:begin // SAC
ra = ri[3:0];
rd = ac;
m[ra] = rd;
end
4'b0010:begin // ADN
ra = ri[3:0];
rd = m[ra];
ac = ac+rd;
s = ~ac[7];
z = ~(|ac);
end
4'b0011:begin //SCD
ra = ri[3:0];
rd = m[ra];
ac = ac-rd;
s = ~ac[7];
z = ~(|ac);
end
4'b0100: begin//AND
ra = ri[3:0];
rd = m[ra];
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
//prog2.v
00001100
01001101
00001100
01011101
00001100
01101110
11000000
00000000
00000000
00000000
00000000
00000000
10100101
01011010
10101010
00000000
Memory Available: 0
Entering Phase I...
Compiling source file : calculator2.V
The size of this model is [7%, 7%] of the capacity of the free version
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
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 0
halt
Stop at simulation time 150
C1>
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
1. Tabla de materii
1. 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 .......................................................................……………............
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.
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.
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.
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);
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
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,
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>);
<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.
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);
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.
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
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_repetitii{exp1, exp2, ... , expn}}
Iata cateva exemple:
C = {2{4’b1011}}; //lui C I se asigneaza vectorul de biti: 8’b10111011
C = {{4{A[4]}}, AA[4:7]}; // primii 4 biti reprezinta extensia semnului.
Intr-o expresie gama de referire trebuie sa aibe, pentru indici, expresii constante. Un singur bit
poate fi referit ca o variabila. De exemplu:
reg [0:7] A, B;
B = 3;
A[0: B] = 3'b111; // ILEGAL – indicii trebuie sa fie constanti!!
A[B] = 1'b1; // Referirea la un singur bit este LEGALA.
Aceasta cerinta stricta privind valorile constante pentru indici, la referirea unui registru, este
impusa de faptul ca se doreste ca expresia sa fie realizabila fizic, in hardware.
Memoriile sunt specificate ca vectori de registre. De exemplu Mem are 1K cuvinte de cate 32
de biti.
reg [31:0] Mem [0:1023];
Notatia Mem[0] asigura referirea la cuvantul cua adresa zero din memorie. Tabloul de indici
pentru o memorie (vector de registre) poate fi un registru. De remarcat faptul ca o memorie nu
poate fi accesata la nivel de bit, in Verilog. Pentru a realiza aceasta operatie, cuvantul din
memorie trebuie transferat mai intai intr-un registru temporar.
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.:
@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
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
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);
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 0
Stop 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:
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]
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
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.
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;
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: OVI@netcom.com, $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.
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/
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.
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.
Nb = xn-1 xn-2 xn-3 … xi… x1 x0 , x-1 x-2 x-3 … x-i… x-m , (o ≤xi ≤b-1).
n-1
N = Σ xi. bi
i=-m
1 x 23 + 0 x 22 + 1 x 21 + 1 x 20 + 0 x 2-1 + 1 x 2-2 =
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
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)b2 + y1 /q , cifra curenta a noului numar este y1
………………………………………………………………..
(Ni)bp-2: q = (Ni)bp-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
………………………………………………………………..
(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
(0,1)10 = ( ? )2
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.
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;
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
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. 36542
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-
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
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.
s e f
0 1 89 31
s e f
0 1 1112 63
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 ) < +∞
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;
- 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.
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:
D F1 F2 F3 F4 G R ST
cu urmatoarele notatii:
- D: bitul de depasire,
- F1 - F4: cei 4 biti ai mantisei,
- G: Bitul de garda,
- R: bitul de rotunjire,
- 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 );
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.
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.
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;
- 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
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”.
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.
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.
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.
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
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’
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
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 bitii{1, 3, 5, 7, 9, 11} para
C2 verifica biti bitii{2, 3, 6, 7, 10, 11} impara
C4 verifica biti bitii{4, 5, 6, 7} para
C8 verifica biti bitii{8, 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).
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.
Probleme.
x
x
x) SEC inseamna Single Error Correcting
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:
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:
Cj Cj
1 SPi,j-1
CI
SPi,j-1 2 4 SPi,j Sumator SPi,j
A0 Z0 Yj modificat
3 5
B0 CO Xi
Yj 1
3
Xi 2
Ci+1 Ci+1
z4 z3 z2 z1 z0
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
Sumator pe n biti
… … … …
0
… … … . … … … … … …
Deplasarea la stanga:
~ ~
[2.x]c = xn-2… … … … … … … . x1 0,
Deplasarea la dreapta:
~ ~
[2-1.x]c = 11xn-2… … … … … … … . x1.
RD RD SL
activare
0 1 0/1
MUX 0/1 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 );
- SL – structura logica pentru activarea si selectarea intrarilor multiplexorului, cat si pentru
controlul transportului la sumator;
- Sumator- sumator combinational cu n ranguri binare.
Descrierea operarii dispozitivului se poate face cu ajutorul urmatoarei organigrame:
Start
RD ← Deinmultit
AC ← Inmultitor
CNT ← log2n T n
MQ ← n T 0
MQq ← 0
MQ ← AC; AC ← n T 0
AC← ADD(AC,RD)
AC← SUB(AC,RD)
CNT← DEC(CNT)
CNT = 0 ? DA Z = AC,MQ(n-1:1)
NU
Memory Available: 0
Entering Phase I...
Compiling source file : inmultitorb.V
The size of this model is [3%, 2%] of the capacity of the free version
//Cazul: RD = 5; AC = 7;
Top-level modules:
inmultitorb
// Cazul: RD = 5; AC = -7;
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…
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;
- 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;
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 S
RD RD
F
MUX
z
n-1| ADD |0
n-1| R |0 CNT
V U e
RE2 RE1
ees Prelucrare
exponenti
UALE
…
Conditii
RD AC MQ
es
UAL
… ..
Conditii
Prelucrari mantise/fractii
Partea care prelucreaza exponentii contine urmatoarele resurse:
- 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.
3.2 Organigrama adunarii/scaderii in virgula mobila.
⊥ ZE← ⊥ XE-⊥ YE
> <
⊥ ZE: 0 ZE← ⊥ XE-⊥ YE
=
Da Dif exp> dim F Dif exp> dim F
Da
Nu Nu
Z← X Z← Y
Deplaseaza YE Deplaseaza XE
Iesire Iesire
ZE← XE ZE← YE
Aduna
fractiile
Da Da
Exponent Depasire
maxim? superioara?
Nu
Da
Operand
zero?
Pozitioneaza
zero curat
Aduna exponentii
Nu iesire cu
Da eroare
Exp euf? Pozitioneaza euf
Da
Restaureaza expo-
nentul deplasat
Valoarea absoluta
a fractieilor
Inmulteste fractiile
Pozitioneaza
semnul produsului
Da
Prod <0? Complementeaza
produs
Nu
Nu Da
Normali- Exp euf?
zat?
Nu
Iesire
Intarzierile in circuitele numerice.
• Tranzistorul NMOS
- Tranzistorul conduce daca la poarta lui se aplica
un potential electric ridicat (Vdd)
• Tranzistorul PMOS
- Tranzistorul este blocat daca la poarta lui se aplica
un potential electric ridicat (Vdd)
- 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
- 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:
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: * Procesor Aritmetic Conditii: Ci
Formate: φ Timp: T(*,φ) 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
- 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.
- 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:
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
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
A[4] B[4]
D
D≡Ω
7486
ADD Z = C4,ADD(A,B) 0
4 4
SUB Z = C4,SUB(A,B) 1
7483
C4 1 C0 1 Codul de operatie specifica operatorul: D ≡ Ω
Cin 1
CI
X0 2 4 Rez0
A0 Z0
Y0 3 5
B0 CO
1
CI
X1 2 4 Rez1
A0 Z0
Y1 3 5
B0 CO
1
CI
Xn-1 2 4 Rez(n-1)
A0 Z0
Yn-1 3 5 Cout
B0 CO
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.
Ciin Sel
Xi
Rez
Yi MUX
1
CI
2 SUM 4
A0 Z0
3 5
B0 CO
Ciout
Xi
1
2
Yi
Rez
MUX1
1
CI
MUX2 2 SUM 4 3
A0 Z0
3 5
1 2 B0 CO
Less 4
Ciout
Inversarea lui y se realizeaza sub controlul semnalului de selectie InvY, aplicat la intrarea de
selectie a celui de-al doilea multiplexor
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.
Xi
1
2
Yi
Rez
MUX1
1
CI
MUX2 2 SUM 4 3
A0 Z0
3 5
1 2 B0 CO
Less 4
Set
InvY
Detectie Depasire Depasire
Ciout
X0
Rez0
Y0
LESS
Cout0
1
X1
Rez1 2
Y1 5
3
0 LESS Zero
Cout1 4
X(n-1) Rez(n-1)
Y(n-1)
Depasire
0 LESS
Cout(n-1) Set
In figura de mai sus a fost implementa si pozitionarea in “1” , an indicatorului de conditii, care
specifica aparitia unui rezultat egal cu “0”, la iesirea unitatii arimetice logice. Bistabilul Z se
pozitioneaza in “1”.
Sumatoare performante.
Sumatorul cu transport succesiv.
Tipul cel mai simplu de sumator paralel este sumatorul cu transport succesiv, obtinut prin
interconectarea unor sumatoare complete. Ecuatiile pentru transport si suma, la nivelul unui
etaj, sunt date mai jos:
Couti = (xi . Cini) ∪ (yi . Cini) ∪ (xi . yi)
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
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.
/Xj
/Yj
Sumj
Xj 1 2
Yj
1 2
Gj Pj Cj
Relatiile de mai sus se pot structura la nivelul a 4 sectiuni ale unui sumator, bazat pe ideea
mentionata anterior. Incepand cu rangul cel mai putin semnificativ se obtin:
- pentru sume:
Sum0 = (P0 . C0) ∪ (P0 . C0)
Sum1 = (P1 . C1) ∪ (P1 . C1)
Sum2 = (P2 . C2) ∪ (P2 . C2)
Sum3 = (P3 . C3) ∪ (P3 . C3),
si:
- 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)
GP C3 P3 G3 C2 P2 G2 C1 P1 G1 C0 P0 G0
a b e f
Sumator cu salvare a
transportului
Sumator cu salvare a
transportului
C’ S’
Sumator obisnuit
Sum
Detaliile de implementare sunt lasate pe seama cititorului.
Comparatie intre cateva tipuri de sumatoare, pe n biti, in privinta intarzierii si a ariei ocupate:
Tip sumator Intarziere Aria ocupata
Transport succesiv 2.n.∆t 9.n
Intarziere minima 2.∆t 2 (2n+1) /(2n+1)
Transport anticipat 2.(log2n + 1).∆t 7.n + 22.log2n
Secvente de microinstructiuni pentru controlul operatiilor in Unitatea de Executie AMD2901
23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Observatii
M I8 I7 I6 M I2 I1 I0 Cn I5 I4 I3 A3 A2 A1 A0 B3 B2 B1 B0 D3 D2 D1 D0 Descrierea microinstructiunilor
individuale la nivel de mnemonice
U Selectie U Selectie Operatie Adresa “A” Adresa “B” Data “D”
X destinatie X sursa UAL
1 2
31 30 29 28 27 26 25 24 Observatii
Adresa de
memorie, in R3 R2 R1 R0 P3 P2 P1 P0
memoria de Descrierea microinstructiunilor
control Adresa de Obtinerea µI individuale la nivel de mnemonice
salt urmatoare
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.
Secvente de microinstructiuni pentru controlul operatiilor in Microsecventiatorul AMD2909
31 30 29 28 27 26 25 24 Observatii
Adresa de
memorie, in R3 R2 R1 R0 P3 P2 P1 P0
memoria de Descrierea microinstructiunilor
control Adresa de Obtinerea µI individuale la nivel de mnemonice
salt urmatoare
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.
Secvente de microinstructiuni pentru controlul operatiilor in Microsecventiatorul AMD2909
31 30 29 28 27 26 25 24 Observatii
Adresa de
memorie, in R3 R2 R1 R0 P3 P2 P1 P0
memoria de Descrierea microinstructiunilor
control Adresa de Obtinerea µI individuale la nivel de mnemonice
salt urmatoare
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.
Microsubrutine imbricate
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
Adr 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 Observatii
µI R3:0 P3:0 M I8:6 M I2:0 Cn I5:3 “A” “B” “D”
1 0 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)
6 7
M µ Secv.
Conditii U AMD2910
X
8
MUX
MUX
Memorie
de
control 1 2 6, 4
LSB /G, /P MSB R
R Cn+4 C
µI A,B,I,Cn OVR o
Conditii
2901 B 2901 B F3 n
CK Y Cn YCK F=0 d
5
/G
Cn AMD 2902 Cn+z /P
Total: 141 ns
Unitatea de Comanda.
µI
1. Rµ Cesa → Iesire 15 ns
6. MUX Selectie → Iesire 20 ns
7. 2910 Conditii → Iesire 45 ns
8. PROM Timpul de Acces 55 ns
µI
1. Rµ Setup 5 ns
Total: 140 ns
140 ns
Ceas (CK)
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.
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.
4
RAM0 RAM3 Q0 Q3
0 RAMSHIFT 3 0 QSHIFT 3
Ceas
4 4
Adrersa “A” “B” DATAIN F QREG Q
Citire
4 4 RAM 16 × 4 CP I6:8
Citire/Scriere
Adresa “B” DATA OUT WE 4
“A” “B”
Data D 4
4 4 0
I0:2 D A B 0 Q
Selector sursa
R S
4 4
Cn G, P
Cn R S
UAL
I3:5 (Cn+4, OVR, F=0, F3)
4 4
OE A F
Selector Iesire
I6:8
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.
Tab.1.
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
8 7 6 5 4 3 2 1 0
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.
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
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:
- 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.
*)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
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
1G A B 2G LSB MSB 1G A B 2G
1C0 1C0
H 1C1 1C1 H
Q0 Q1
1C2 1Y 1Y 1C2
1C3 25LS-253 25LS-253 1C3
2C0 AMD 2901 2C0
H 2C1 2Y RAM1RAM3 2Y 2C1 H
2C2 2C2
2C3 2C3
MSB-Fn
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 Q0 Q3 Q0 Q3 RAM15I/O
RAM0 RAM3 RAM0 RAM3
/G /G
/P /P
AMD 2901(1) AMD 2901(4)
Cn+4 Cn+4
OVR OVR
F3 F3
Cin Cn F=0 Cn F=0
MUX1,MUX0
RAM SHIFT QSHIFT
0 3 0 3 F3
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
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.
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.
R[3:0] FE PUP(PUSH/POP)
RE
RR[4] IS
D3:0
STV Ceas
S0 4 cuv.× 4 biti
D RR STV CMP
MUX
S1
X[4]
CMP[4]
ORi
SAU-NU Cn+4
INC
ZERO
Cn
SI
TS
OE Y[4]
Operarea Stivei:
FE PUP OPERATIE
1 * inactiva
0 1 IS ← INC(IS); PUSH(CMP)
0 0 POP(STV); DCR(IS)
Y0:11
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:
RR[4] IS
CA
STV
AMD29751 4 cuv.× 4 biti
D RR STV CMP
A0 MUX
PROM X[4]
A4:1 CMP[4]
CS P3:0 AMD2909 Y[4]
Cn+4
INC
MM Cn
RMI
AMD2918
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
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.
Registrul Instructiunii RI
D[4] R[4]
O5 OR[4]
PROM
29751 O4 ZERO
MUX O3 PUP AMD 2909
A0 O2 FE
O1 S1 Cn+4
O0 S0 Cn
A4A3A2A1 Yout
Adresa
Memoria de
4 4 microprogram R3:0
RMI Semnale de
P3:0 comanda
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:
31 30 29 28 27 26 25 24
R3 R2 R1 R0 P3 P2 P1 P0
Adresa de Obtinerea µI
salt urmatoare
Cazul SP nonminimale
Structuri utile de porti.
Logica pentru Sumatorul Complet (SC)
C0 = BC + AB+ AC
Decodificatorul
Decodificatorul dispune de k intrari, denumite intrari de selectie si N=2k iesiri de date.
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.
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?
Cu ajutorul unui tablou de LED-uri, marcate ca mai jos, se pot afisa fatetele zarului:
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.
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
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
Avantaje:
- pot fi prefabricate
- sunt personalizate numai ultimele masti.
Tablou de porti: Exemplu.