Sunteți pe pagina 1din 4

Seminar Circuite Integrate Digitale

Zoltan Hascsi

PROIECTAREA UNEI MEMORII


O aplicaie particular necesit o memorie proiectat dup cerinele acesteia. S presupunem c aplicaia noastr are nevoie de un spaiu de adresare de 64KB, pentru cuvinte de 8 bii, n care primele 8K adrese sunt necesare unei memorii ROM (probabil c aici se vor afla instruciunile unui microcontroller), iar ultimele 40K adrese sunt gestionate dinamic de aplicaie (aici se vor stoca datele i stiva programului, de exemplu). De multe ori spaiul de adresare necesar nu se potrivete ca dimensiune cu memoriile fizice avute la dispoziie, caz n care trebuie s proiectm o arie de memorii (sau un banc de cipuri) mpreun, bineneles, cu circuitele aferente care asigur accesarea corect a locaiilor de memorie. S ne punem n aceast situaie incomod i s construim memoria cerut cu cipuri ROM de 1K8 i cipuri DRAM de 4K1. Dac ascultm intuiia care ne spune c vom avea nevoie de o selecie ntre cipuri, lum n trecere i circuite demultiplexoare 1:8. Primul pas ctre implementarea memoriei este plasarea cipurilor de memorie n limita spaiului de adresare, astfel nct s acoperim zonele de memorie cerute. Lucrurile trebuiesc potrivite cu precizie milimetric (adic la bit) astfel nct s nu apar dou locaii de memorie cu aceeai adres. Pe scurt, cipurile s aib zone disjuncte n spaiul de adres. Un calcul sumar ne arat numrul de cipuri necesare aplicaiei noastre: ROM : n = ( 8K 8 ) / ( 1K 8 ) = 8 cipuri RAM : n = ( 40K 8 ) / ( 4K 1 ) = 10 8 cipuri Avnd aceste cipuri spaiul de memorie poate fi partiionat conform desenului de mai jos, desen care reprezint de fapt harta memoriei pentru aplicaia dat:

A 15
0000 0000 0000

. . . . .
0000 0011 0100 0000 1111 0000

A0
0000 1111 0000

#add ROM 0 ROM 1


0000 03FF 0400

sel ROM 0001 0001 1100 1111

adrese interne

0000 1111

0000 1111

ROM 7

1C00 1FFF

0110 0110 0111 0111 1000 sel RAM 1111 1111

0000 1111 0000 1111 0000

0000 1111 0000 1111 0000

0000 1111 0000 1111 0000

RAM 0 RAM 1

6000 6FFF 7000 7FFF 8000

adrese interne RAM 0000 1111 0000 1111 0000 1111

RAM 10

F000 FFFF

Privind cu atenie harta memoriei se pot face cteva observaii utile pentru implementare. Zona de memorie ROM este situat ntre adresele #0000 i #1FFF (un numr scris n hexazecimal este precedat de un diez - # -). Dac citim adresele n binar (pe desen n stnga memoriei) observm c primii trei bii au aceeai valoare pentru toate adresele din zona destinat ROM-ului, A15 = 0, A14 = 0, A13 = 0. Este evident cum se va face accesarea corect a cipurilor ROM: dac primii trei bii ai adresei sunt 0, atunci citirea se va face din zona de memorie ROM.

Seminar Circuite Integrate Digitale

Zoltan Hascsi

n zona ROM sunt ns 8 cipuri, unul singur fiind posesorul locaiei dorite. Selecia cipului ROM corespunztor se face cu urmtorii trei bii ai adresei. Primului cip (ROM0) i-au fost alocate primele 1K adrese, deci adresele pn la #03FF sunt localizate aici. Aceste adrese au n comun, pe lng primii trei bii corespunztori zonei ROM, biii A12, A11 i A10. Aceast valoare, 000, va fi folosi8t pentru selecia primului cip ROM. Al doilea cip (ROM1) conine adresele ncepnd cu #0400 pn la #07FF, pentru care biii A12, A11 i A10 sunt 001. n mod analog toate cele opt cipuri ROM au o identificare unic, dat de biii A12, A11 i A10 ai adresei. De exemplu adresa 000101XXXXXXXXXX corespunde unei locaii din cipul ROM5 (5 n binar este 101). Ultimii 10 bii ai adresei sunt folosii pentru adresarea celor 1024 (1K) locaii n interiorul cipului ROM selectat.

A13 . . . A15 A10 . . . A12 A9 . . . A0

3 3 10

selecie zona ROM selecie cip ROM adres intern ROM

Dac urmrim pe harta memoriei valorile adreselor corespunztoare zonei RAM observm c primii doi bii ai acestora sunt n toate cazurile diferii de 00. Putem deci selecta zona de ROM i numai cu ajutorul primilor doi bii A15 A14 ai adresei, dar numai dac zona de memorie neacoperit, situat ntre adresele #1FFF i 3FFF, nu este deloc utilizat de sistem (zon pentru care primii doi bii sunt 00 dar al treilea bit este A13= 1). Selecia cipului ROM se face prin intermediul unui demultiplexor care va activa ROM-ul care corespunde biilor A12 A11 A10 din adres (intrarea de CE a cipului ROM valideaz ieirea acestuia). Biii de selecie au efect ns numai dac adresa este n primii 8K din spaiul de adresare, adic dac primii trei bii ai adresei sunt 000. Demultiplexorul este activ numai dac intrarea de validare (E) este n 0.
ROM 0 A9
. .A 0 10 3

A 9. . A 0 A 12 A 11 A 10 CE S2 S1 S0 0 1 ROM 1 W W

A 10 . . A 12

A 13

. .A

15

D M E U X

ROM 7 A 9. . A 0 7 CE W 8 DATA

Pentru adresarea DRAM-ului de 4K este nevoie de 12 linii de adres (ce vor fi multiplexate, mpreun cu adresa de refresh, pentru accesarea efectiv a cipurilor DRAM). Cipurile DRAM se grupeaz cte opt pentru a asigura lungimea de opt bii a cuvntului din memorie. Vom identifica n cele ce urmeaz un bloc DRAM cu un indice (RAMi), iar un cip RAM cu doi indici: primul indice este al blocului iar al doilea desemneaz indicele bitului din cuvnt (RAMij).

Seminar Circuite Integrate Digitale

Zoltan Hascsi

Privind pe harta memoriei cum sunt partiionate locaiile de memorie ntre grupurile DRAM sesizm c fiecare grup este caracterizat prin valoarea primilor 4 bii ai adresei. De exemplu adresele #7000 - #7FFF aparin grupului RAM1, i au n comun biii A15, A14, A13 i A12 = 0111. Aceti patru bii vor fi folosii pentru identificarea (selecia) grupului DRAM. Reamintim c dac aceti bii au valoarea 000X adresa respectiv aparine ROM-ului. Grupurile DRAM sunt identificate prin A15, A14, A13, A12 = 0110 pentru RAM0, A15, A14, A13, A12 = 0111 pentru RAM1, ... A15, A14, A13, A12 = 1111 pentru RAM9. Pentru selecia n zona DRAM s-ar putea folosi un decodor 4:16 care s recunoasc combinaiile 0110, 0111, ... , 1111. Cum ns nu avem la ndemn dect demultiplexoare 1:8, vom recurge la un mic truc combinaional. Urmrind cu atenie adresele binare se observ c toat zona de memorie RAM2-RAM9 are n comun cel mai semnificativ bit al adresei A15 = 1. Selecia ntre aceste opt grupuri se face cu un singur demultiplexor al biilor A14, A13 i A12 , a crui ieire selectat este valid numai pentru A15 =1. Primele dou grupuri DRAM sunt situate n zona de adrese corespunztoare lui A15 = 0. Vom folosi un alt demultiplexor 1:8, comandat tot de biii A14, A13 i A12 i validat de bitul A15 = 0. RAM0 i RAM1 vor fi selectate de ieirile 6 i 7 ale demultiplexorului, care corespund combinaiilor 110 i respectiv 111 ai biilor de adres A14, A13 i A12. Aceast schem nu este altceva dect un decodor 4:16 realizat cu demultiplexoare 3:8! (vezi schema de mai jos)

CAS

E0 E1 S2 S1 S0 3 CAS 6 7 CAS

RAM 0

RAM 1

RAM 2 0 CAS RAM 3

D M E0 U X
E1

RAM 9 7 CAS

A 15 A 14 A 13 A 12

S2 S1 S0 3

S-au folosit ambele intrri de validare ale demultiplexorului, E1 pentru extinderea demultiplexorului, iar E0 pentru intrarea propriu-zis (semnalul CAS este cel demultiplexat). Toate celelalte intrri ale cipului RAM sunt comune tuturor cipurilor, cu excepia ieirilor care sunt comune numai pe coloane. Semnalele RAS, CAS, W, select, ca i adresa de refresh sunt generate de un automat de control al memoriei RAM. n schema urmtoare apare un singur cip dar conexiunile W, RAS i A5-A0 de la ieirea multiplexorului sunt comune tuturor cipurilor. Liniile de date Dj sunt comune cipurilor pe coloane. Semnalul CASi este comun tuturor cipurilor de pe linia i.

Seminar Circuite Integrate Digitale

Zoltan Hascsi

ADD refresh A5
. .A 0

6 6 6

A 11 . . A 6

6 MUX 4:1

RAM ij
6

A 5. . A 0 RAS CAS W W

RAS CAS i

select D in j D out j

Schema este gata, memoria este alturat sistemului, sistemul este alimentat i la pornire, n timpul testului de memorie, surpriz: Memory Error at location AD53. Write test failed. Ce facem cnd apare un asemenea mesaj? Dac testul de memorie a euat doar pentru o singur locaie de memorie, atunci nu avem altceva de fcut dect s detectm cipul defectat i s-l nlocuim. Nu o s scoatem cipurile de pe soclu ca s le verificm unul cte unul; testul de memorie ne i arat unde este eroarea. Trebuie doar s tim cum s decodificm mesajul. Adresa AD53 corespunde zonei RAM. Selecia grupului RAM se face cu biii A15, A14, A13 i A12 Cum AD53 n binar este 1010 1101 0101 0011, rezult c cipul defect se afl n ultimele 8 grupuri RAM (bitul A15 este 1), selectat de ieirea demultiplexorului cu indice 2 (A14A13A12 = 010). Este vorba deci de grupul RAM4 (constituit din cipurile RAM47 ... RAM40). Fiecare cip din grupul respectiv memoreaz la adresa AD53 cte un bit al cuvntului. Detecia cipului defect se face comparnd cuvntul care ar fi trebuit memorat cu valoarea citit de test. S presupunem c testul a ncercat scrierea lui #55 i a citit apoi #51. bitul: 7 6 5 4 3 2 1 0 #55 = 0 1 0 1 0 1 0 1 #52 = 0 1 0 1 0 0 0 1

cuvntul scris: cuvntul citit:

Prin urmare bitul D2 a fost incorect scris, cipul RAM42 trebuie nlocuit.