Cel mai simplu sistem cu microprocesor este prezentat în urmatoarea figura:
Acest sistem cuprinde pe lângã procesor, un bloc de memorie fixã (ROM), un bloc de RAM şi decodificatorul de memorie pentru blocurile de memorie existente.
Orice circuit de memorie sau bloc de memorie are nevoie de un semnal de selecţie pentru a putea răspunde procesorului la operaţia cerută. Fiecare din aceste semnale de selecţie este o ieşire din decodificatorul de memorie (DEC).
Fiecare circuit de memorie, în funcţie de capacitatea lui, are asociat un anumit spaţiu de adresare.
IMPORTANT:
1 Ko = 210 o
2 Ko = 2 x 210 = 211 o
4 Ko = 22 x 210 = 212 o
...
1 Mo = 220 o
...
Prima problemã pe care trebuie sã o rezolve proiectantul, legat de memorie, este stabilirea hãrţii memoriei, adicã alocarea fiecãrui circuit de memorie a cel puţin unei zone din spaţiul direct adresabil al procesorului.
Dimensiunea unei asemenea zone este legatã de capacitatea circuitului de memorie. Aceastã alocare se face în funcţie de cerinţele unitãţii centrale, ale sistemului de operare şi ale aplicaţiei:
- Unitatea centrală: După RESET procesorul execută programul de la o anumită adresă fixă şi dependentă de procesor. La această adresă ar trebui să se dispună o memorie ROM;
- Sistemul de operare: poate cere ca într-o anumită zonă să existe memorie sau să existe un anumit tip de memorie;
- Aplicaţie: o aplicaţie cu cerinţe mari de memorie va impune utilizare mai multor circuite.
Când se construieşte harta memoriei trebuie stabilite următoarele două date pentru fiecare circuit (bloc) de memorie:
- adresa de început;
- limitele de adresare.
Adresa de început a unui circuit de memorie se stabileşte în funcţie de:
- tipul circuitului - unitatea centrală presupune existenţa unui anuimt tip de circuit la o anumită adresă;
- capacitatea circuitului - adresa de început trebuie (ar fi bine) să fie un multiplu de capacitatea circuitului
Exemplu: Pentru un circuit de 16 Ko:
16 Ko = 24 x 210 = 214 => Numarul de locatii in hexa = 04000h (un 1 pe poziţia 14: 0000 0100 0000 0000 0000 )
=> Spaţiul de adresare: 00000h - 03FFFh
Multiplii de capacitate: 00000h, 04000h, 08000h, 0C000h, ...
- Existã mai multe tehnici pentru generarea semnalelor de selecţie a circuitelor de memorie. De obicei blocul de circuite care genereazã aceste semnale se numeşte decodificator de adrese de memorie şi are ca intrãri linii din magistrala de adrese şi eventual semnale de comandã generate de cãtre procesor.
Adresarea liniarã
Adresarea liniarã constã în selectarea circuitelor sau blocurilor de memorie utilizând o singurã linie din magistrala de adrese.
Exemplu:
Se cere să se asigure selecţia a două blocuri de memorie (fig 1.1):
- Blocul 1 ocupă spaţiul de adrese 00000h – 07FFFh
- Blocul 2 ocupă spaţiul de adrese 08000h – 0FFFFh
Această metodă este foarte simplă şi presupune puţine circuite, însă se foloseşte doar în cazul unui număr mic de blocuri de memorie, ale căror adrese diferă printr-un număr mic de biţi (1, 2).
Decodificare completa
Se construieşte un tabel care are ca şi coloane rangurile magistralei de adrese iar ca linii prima şi ultima configuraţie de adresã din fiecare zonã acoperitã de un circuit. Apoi pentru fiecare zonã se inspecteazã coloanele pornind de la rangul cel mai semnificativ spre cel mai puţin semnificativ şi se reţin acele ranguri (coloane) care rãmân nemodificate pentru orice configuraţie de adresã din zona respectivã. O funcţie logicã combinaţionalã de aceste ranguri va individualiza zona respectivã şi va genera semnalul de selecţie pentru circuitul care acoperã zona respectivã.
Exemplu:
Să se realizeze selecţia pentru următoarele blocuri de memorie:
- Blocul B1 ocupă spaţiul de adrese 00000h - 003FFh (1Ko)
- Blocul B2 ocupă spaţiul de adrese 01800h - 01FFFh (2Ko)
- Blocul B3 ocupă spaţiul de adrese 04000h - 05FFFh (8Ko)
- Blocul B4 ocupă spaţiul de adrese 06000h - 06FFFh (4Ko)
Decodificare incompletã
În cadrul decodificãrii incomplete se construieşte acelaşi tabel ca la decodificare completã, se face aceeaşi inspecţie, dar nu se iau în considerare toate rangurile care individualizeazã zona respectivã. Aceasta duce la simplificarea decodificatorului, însă un acelaşi circuit va acoperi (va fi vãzut în) mai multe zone din spaţiul de adresare al procesorului. Dacã se ignorã un rang din zona ocupatã, un circuit va ocupa două zone egale cu capacitatea sa, dacã se ignorã douã ranguri, circuitul va ocupa patru zone, etc.
În exemplul anterior linia A19 nu este decisivă în selecţia blocurilor de memorie. Dacă se renunţă, în decodificare, la linia A19 din magistrala de adrese toate cele patru circuite de memorie se vor “vedea” în două zone distincte de adrese. Astfel vom avea:
- Blocul B1 ocupă spaţiile de adrese 00000h - 003FFh şi 80000h - 803FFh (1Ko)
- Blocul B2 ocupă spaţiile de adrese 01800h - 01FFFh şi 81800h - 81FFFh (2Ko)
- Blocul B3 ocupă spaţiile de adrese 04000h - 05FFFh şi 84000h - 85FFFh (8Ko)
- Blocul B4 ocupă spaţiile de adrese 06000h - 06FFFh şi 86000h - 86FFFh (4Ko)