Microprocesoare, microcontrolere Prelegere 1 [612945]

1

Microprocesoare, microcontrolere – Prelegere 1

1. Modelul calculatorului cu dou ă blocuri
În cele ce urmeaz ă vom folosi ca punct de plecare implementarea MIPS cu mai multe cicluri
din figura 5.33 de la pagina 352 prezentat ă în „Hennessy și Patterson – Organizarea și proiectarea
calculatoarelor – interfa ța hardware/software”. În implementarea cu mai multe cicluri de ceas se
folose ște un singur bloc de memorie, atât pentru cod cât și pentru date. Capacitatea de memorare a
acestui bloc este de 4GB. Implementarea cu mai mult e cicluri este de tip Von Neumann.
Deoarece aspectele legate de arhitectura și organizarea MIPS sunt rezolvate, dorim o
implementare cu cât mai pu ține circuite integrate, ideal unul singur. Consider ând solu țiile de
implementare posibile – ASIC sau FPGA – ajungem la concluzia c ă putem implementa pe un singur
chip tot sistemul, mai pu țin blocul de memorie. Acest fapt se datoreaz ă în principal limit ărilor
tehnologice: de exemplu cel mai avansat procesor di sponibil este alc ătuit din aproximativ 5 miliarde de
tranzistoare. Un bloc de memorie de 4GB, considerân d ca este suficient un singur tranzistor per bit, a re
nevoie de 4Gx8 ≈ 32 de miliarde de tranzistoare. În prezent este imposibil să se realizeze un chip pe
care să se integreze 32 de miliarde de tranzistoare.
Chiar dac ă am reu și integrarea întregului bloc de memorie, o astfel d e solu ție ar avea un pre ț
foarte ridicat . În practic ă exist ă îns ă multe aplica ții care au nevoie doar de câ țiva zeci de KB de
memorie. Dac ă ar exista numai chip-uri cu 4GB de memorie, o apli ca ție care are nevoie doar de câ țiva
zeci de KB ar costa nejustificat de mult. În acest caz o solu ție scalabil ă ar fi mult mai potrivit ă. Un
exemplu de solu ție scalabil ă îl constituie calculatoarele compatibile IBM PC. U n astfel de sistem are
memoria implementat ă pe pl ăcu țe DIMM cu diverse capacit ăți de memorare. Utilizatorul î și alege
configura ția în func ție de aplica țiile pe care le va rula și de pre țul pe care și-l poate permite, dar are
oricând posibilitatea unei extensii ulterioare.
Un al treilea motiv care pledeaz ă împotriva integr ării blocului de memorie împreun ă cu
procesorul pe un singur chip îl constituie raportul memorie fix ă (ROM)/memorie volatil ă (RAM). În
toate sistemele de calcul trebuie s ă existe atât memorie fix ă (PROM, EPROM, FLASH) pentru a
memora secven ța de ini țializare (Boot) și, eventual, programul de aplica ție cât și memorie volatil ă
(RAM) pentru variabile. Problema este c ă raportul ROM/RAM depinde de tipul aplica ției pentru care
a fost construit sistemul. Un sistem de uz general, cum este un PC, are nevoie de foarte pu țin ROM și
de mult RAM. Tipic, într-un PC exist ă 128KB ROM pentru BIOS și 4GB de RAM. Un sistem dedicat
cum este calculatorul unui automobil are nevoie de mult ROM și pu țin RAM.
Datorit ă celor trei motive expuse anterior o prim ă solu ție la problema implement ării cu cât mai
pu ține circuite integrate const ă în divizarea sistemului de calcul în dou ă blocuri: procesor și memorie.
În cazul MIPS aceast ă divizare duce la schema din figura 1. Gradul de in tegrare actual permite
integrarea procesorului pe un singur chip. În schim b blocul de memorie va fi alc ătuit din mai multe
circuite integrate.
În figura 1 procesorul se conecteaz ă cu blocul de memorie prin intermediul a 64 de semn ale.
Este de dorit ca num ărul de conexiuni între cele dou ă blocuri s ă fie cât mai mic deoarece un num ăr
mare de conexiuni înseamn ă chipuri cu mul ți pini, ceea ce implic ă dimensiuni mari.

2

figura 1
figura 2
În cazul schemei din figura 1 reducerea num ărului de pini se poate face dac ă cele dou ă
conexiuni de date unidirec ționale se înlocuiesc cu o singur ă conexiune bidirec țional ă. Astfel rezult ă
schema din figura 2. Reducerea num ărului de pini atât pentru procesor cât și pentru memorie se face pe
seama unei cre șteri minore a complexit ății driverelor de ie șire aferente pinilor de date, a șa cum se va
ar ăta în continuare.
Aceast ă schema bloc este valabila în cazul oric ărui procesor, nu numai pentru MIPS.
Comunica ția între procesor și memorie se face prin intermediul a mai multor con ductori electrici: fire
sau trasee de cablaj.
Mai mul ți conductori prin intermediul c ărora se transmite informa ție de acela și tip se
nume ște magistral ă.
Transferul datelor între procesor și memorie se face prin intermediul magistralei de d ate. Loca ția
de memorie cu care se face transferul este identifi cat ă prin adres ă. Adresa se transmite de la procesor
la blocul de memorie prin intermediul magistralei d e adres ă. Totalitatea adreselor pe care le poate
genera procesorul pe pinii de adrese se nume ște spa țiu de adrese procesor. Procesorul „ știe” c ă la
fiecare adres ă generat ă exist ă o loca ție și c ă fiecare loca ție are o adres ă. Din punct de vedere
procesor nu exist ă adres ă f ără loca ție, și nici loca ție cu mai multe adrese!
La o adres ă procesorul poate executa dou ă opera ții: citirea loca ției de la acea adres ă și scrierea în
loca ția de la adresa respectiv ă. Tipul transferului (scriere în memorie sau citire din memorie de
exemplu) cât și alte informa ții se precizeaz ă prin intermediul magistralei de control. Într-o pr im ă
aproxima ție magistrala de control va con ține dou ă semnale, RD# și WR# din figura 2:
• Dac ă RD# = 0 și WR# = 1, opera ția ini țiat ă de procesor este de citire memorie ,
• Dac ă RD# = 1 și WR# = 0, opera ția ini țiat ă de procesor este de scriere memorie .
• Dac ă RD# = 1 și WR# = 1, procesorul nu folose ște memoria deoarece execut ă activit ăți interne.
Așa cum s-a precizat anterior, introducerea unei sing ure conexiuni de date între procesor și
memorie permite atât reducerea num ărului de pini ai procesorului și ai memoriei cât și înjum ătățirea
num ărului de conexiuni de date între aceste dou ă blocuri. Conexiunea de date bidirec țional ă
func ționeaz ă numai dac ă se modific ă driverele de ie șire aferente pinilor de date. Pentru
simplitate, de și știm c ă este imposibil, vom presupune c ă blocul de memorie este alc ătuit dintr-un
singur circuit integrat.
Mai întâi vom considera opera ția de scriere. În cazul scrierii sursa datelor este procesorul iar
destina ția este memoria. Scrierea bitului k în memorie se face ca în figura 3, pe calea: logic a intern ă a
procesorului → PDout k → intrarea driverului PO → ie șirea driverului PO → pinul Dk al procesorului
→ linia k a magistralei de date DB k → pinul Dk al memoriei → intrarea driverului MI → ie șirea
driverului MI → logica intern ă a memoriei. Schema din figura 3 se repet ă pentru orice bit de date.

3
În mod asem ănător se face și citirea; în acest caz sursa datelor este memoria iar destina ția este
procesorul. Traseul pe care se face citirea bitului k este prezentat în figura 4:

figura 3
figura 4
Reamintim c ă o poart ă logic ă, un driver, registru, num ărător, etc. genereaz ă la ie șire fie valoarea logic ă
‚0’, fie valoarea logic ă ‚1’. O astfel de ie șire „vorbe ște” tot timpul spunând fie ‚0’ fie ‚1’. Dac ă
procesorul nu ar face decât scrieri schema din figu ra 3 ar fi suficient ă: procesorul „vorbe ște” tot timpul
prin intermediul driverului PO (Processor Out) iar memoria ascult ă cu driverul MI (Memory In).
Asem ănător, dac ă procesorul ar face numai citiri memoria ar vorbi t ot timpul cu driverul MO iar
procesorul ar asculta cu PI (figura 4). În realitat e transferul de date procesor-memorie presupune atâ t
scriere cât și citire (în momente de timp diferite, desigur), mo tiv pentru care calea de date pentru bitul
k va ar ăta ca în figura 5:
figura 5
Din p ăcate implementarea din figura 5 nu poate func ționa. De exemplu, dac ă procesorul
dore ște s ă scrie ‚1’ în memorie, aceast ă valoare va apare la ie șirea driverului PO. Dar în acela și timp
driverul MO din memorie genereaz ă la ie șire ‚0’ sau ‚1’, chiar dac ă opera ția ini țiat ă de procesor este
scriere (un driver obi șnuit genereaz ă tot timpul la ie șire o valoarea logic ă). Aceast ă valoare va interfera
cu ‚1’-ul generat de procesor. Dac ă valoarea generata la ie șirea driverului MO este ‚0’, care va fi
valoarea logica pe linia k a magistralei de date? Este ca și cum dou ă persoane doresc s ă converseze dar
amândou ă vorbesc simultan. Pentru ca dialogul s ă fie posibil trebuie ca atunci când o persoan ă
vorbe ște cealalt ă s ă tac ă.
Prin analogie, pentru ca transferul de date proceso r-memorie s ă fie posibil prin intermediul
unui singur set de fire trebuie ca atunci când proc esorul „vorbe ște” prin intermediul driverului PO,
driverul MO din memorie s ă „tac ă”. În cazul citirii memoria va vorbi prin MO iar dr iverul PO din
procesor va „tace”. În concluzie este nevoie de un tip driver care s ă spun ă ‚0’ sau ‚1’ ca orice circuit
logic obi șnuit dar suplimentar s ă știe s ă „tac ă”. Circuitele logice care știu s ă „tac ă” sunt circuitele
logice cu ie șire 3-state.
În concluzie, pentru a se putea executa atât scrier ea memoriei cât și citirea acesteia, driverele
PO și MO trebuie s ă fi de tip 3-state. Implementarea cu astfel de drivere este prezentat ă în figura 6.

4

figura 6

2. Modulul de tip memorie
În figura 7a este prezentat ă schema de principiu a unui modul de memorie, schem ă ce nu ține
seama de tipul modulului sau de modul în care resp ectivul modul este realizat tehnologic. Din punct
de vedere logic un modul de memorie poate fi privit ca o mul țime de loca ții, numite în continuare
loca ții de memorie.
Oricare loca ție din interiorul modulului de memorie poate fi scr is ă sau citit ă. Tipul opera ției
efectuate asupra unei loca ții, scriere sau citire, se specific ă prin intermediul pinilor RD# (read) și WR#
(write). Loca ția care va fi citit ă sau scris ă este stabilit ă în mod univoc de valorile logice de pe pinii de
adres ă ai modulului de memorie, A m-1- A0. Prin intermediul acestor pini se precizeaz ă adresa loca ției
în cadrul modulului .
Adresa loca ției în cadrul modulului se va numi în continuare ad resa local ă.
Adresa local ă selecteaz ă loca ția de memorie care va fi scris ă sau citit ă: loca ția 0 este selectat ă
când pinii de adresa ai modulului au valoarea A m-1 – A0 =0…00, loca ția 1 este selectat ă când A m-1-
A0=0…01, etc. in general, loca ția i este loca ția selectat ă când pinii de adres ă ai modulului de memoria
au valoarea i.
Să nu se confunde adresa local ă cu adresa generat ă de procesor!
Num ărul de loca ții de memorie din interiorul modulului este 2 m, unde m este num ărul de linii
de adres ă. Capacitatea de memorare a unui modul de memorie se specific ă cu formula CM=2 m x d,
adic ă respectivul modul este alc ătuit din 2 m loca ții, fiecare loca ție fiind alc ătuit ă din d bi ți.
Fie k loca ția selectat ă prin intermediul pinilor de adres ă. Citirea loca ției k înseamn ă transferul
informa ției memorate în loca ția k pe pinii D 0-Dd-1. În cazul citirii D 0-Dd-1 sunt ie șiri din modulul de
memorie. Scrierea loca ției k înseamn ă transferul informa ției prezente pe pinii D 0-Dn-1 în loca ția k; în
acest caz D 0-Dn-1 sunt intr ări.
Pinii de date D 0-Dd-1 sunt bidirec ționali, adic ă la fiecare pin D i se conecteaz ă intern o ie șire
pentru a se putea citii informa ția din loca ția precizat ă prin intermediul adresei și o intrare pentru a se
putea scrie informa ția în respectiva loca ție (figura 7b).

5

figura 7

Semnalul CE# (Chip Enable, # – activ ‚0’) controlea z ă activarea modulului: dac ă CE# este
inactiv nu se face nici scriere, nici citire și con ținutul tuturor loca țiilor r ămânând neschimbat. De
asemenea, semnalul CE# controleaz ă starea repetoarelor 3-state : dac ă CE# este inactiv (‚1’ logic),
acestea sunt în starea de impedan ță ridicat ă. Aceast ă stare se nume ște IDLE .
În concluzie, func ționarea modulului este controlat ă de semnalele RD# (read), WR# (write) și
CE#. În func ție de starea acestor semnale sunt posibile trei mod uri de lucru, descrise în tabelul
urm ător.
CE# RD# WR# Mod
0 0 1 READ – Citire loca ție
0 1 0 WRITE – Scriere loca ție
0 0 0 IDLE = Inactiv. La unele module se face scriere
0 1 1 IDLE
1 x x IDLE
Numele semnalelor de control nu sunt standardizate. Astfel, în loc de CE# se mai folose ște CS# (Chip
Select), RD# este sinonim cu OE# (Output Enable) ia r WR# este sinonim cu WE# (Write Enable).
Denumirile CE#, OE# și WE# sunt întâlnite mai des, a șa c ă de acum încolo se vor folosi aceste nume.
Obs: în starea IDLE consumul de putere al modulului est e o cincime din consumul în st ările READ
sau WRITE.

3. Blocul de memorie.
În scop didactic, vom considera un exemplu „de juc ărie” bazat pe un procesor cu 4 pini de
adres ă și module de memorie de tipul celor descrise în subc apitolul anterior, adic ă module de memorie
cu pini de adres ă, pini de date bidirec ționali și pinii de control CE#, WR# și RD#. Procesorul cu 4 pini
de adres ă poate genera 16 adrese. La acest procesor se poate conecta un modul de memorie cu 16
loca ții conform schemei clasice de conectare din figura 2: pinii de adres ă ai procesorului se conecteaz ă
la pinii de adres ă ai memoriei, datele procesor la datele memoriei, R D# la RD# și WR la WR#.
Conectarea procesorului cu 4 adrese cu memoria de 1 6 loca ții este prezentat în figura 8.
Conexiunile AP 0 – AM 0, AP 1 – AM 1, AP 2 – AM 2, AP 3 – AM 3 dintre pinii de adres ă ai
procesorului și pinii de adres ă ai memoriei fac ca loca ția de memorie i (i=0..15) să fie selectat ă când
adresa generat ă de procesor este are valoarea i; se spune c ă loca ția de memorie i a primit adresa
procesor i. Coresponden ță adres ă local ă – adres ă procesor este prezentat ă în tabelul din figura 8.
În figura 8 conectarea procesor – memorie este foar te simpl ă, natural ă, deoarece num ărul de
loca ții din care este alc ătuit modulul de memorie este egal cu num ărul de adrese pe care le poate

6
genera procesorul. Cum se va face conectarea proces or – memorie dac ă în loc de memorii cu 16 loca ții
dispunem numai de memorii cu 4 loca ții?

figura 8

Un modulul de memorie cu 4 loca ții de memorie are 2 pini de adres ă. În exemplul urm ător
blocul de memorie va fi alc ătuit din dou ă module de 4 loca ții . Dac ă unei loca ții de memorie i se aloc ă
o singur ă adres ă procesor vor r ămâne 8 adrese procesor nealocate. Aceast ă situa ție este foarte
frecvent ă, a șa cum se întâmpl ă în cazul calculatoarelor compatibile IBM PC: nici o configura ție nu
este prev ăzut ă cu 16EB de memorie și nici nu va fi prea curând.
Mai întâi vom conecta la procesor primul modul de m emorie cu capacitatea de 4 loca ții.
Schema de conectare porne ște de la schema din figura 8. La fel ca în figura 8 datele procesor se
conecteaz ă la datele memoriei, RD# la RD# și WR la WR#. Problema apare la pinii de adres ă:
deoarece memoria de 4 loca ții are 2 pini de adres ă se pot face doar conexiunile AP 0 – AM 0 și AP 1 –
AM 1. Schema preliminar ă de conectare este prezentat ă în figura urm ătoare:

figura 9 Memorie1 AM[1:0]
00
01
10
11 AP[3:0]
00 00
0001
0010
0011
01 00
0101
0110
0111
10 00
1001
1010
1011
11 00
1101
1110
1111
Din figur ă se observ ă c ă pinii procesor AP3 și AP2 și pinul CE# al memoriei au r ămas
neconecta ți. În exemplul anterior din figura 8 CE#-ul memorie i este tot timpul activ deoarece orice

7
adres ă ar genera procesorul, loca ția de memorie care prime ște respectiva adres ă se afl ă în modulul de
memorie de 16 loca ții: 16 adrese procesor, 16 loca ții de memorie. În figura 9 situa ția este diferit ă:
procesorul genereaz ă 16 adrese dar modulul de memorie este alc ătuit doar din 4 loca ții. Dup ă cum s-a
ar ătat în capitolul anterior, atunci când CE# este ina ctiv modulul de memorie este în starea IDLE,
drivere de date sunt în 3-state, modulul fiind decu plat de la magistrala de date. Ideea este s ă gener ăm
CE# din adresele AP3 și AP2 astfel ca memoria 1 r ăspund ă la 4 adrese procesor și s ă fie în IDLE
pentru orice alt ă adres ă.
Urm ătoarea întrebare la care trebuie s ă r ăspundem prive ște adresele procesor care pot fi alocate
celor 4 loca ții de memorie. Deoarece adresele procesor AP0 și AP1 sunt deja conectate la pinii AM0 și
AM1 nu este posibil ă orice alocare adres ă procesor – loca ție de memorie. Vom detalia acest aspect cu
ajutorul loca ții 00 (cu adresa local ă 0). Loca ția 00 se va selecta dac ă AM0=’0’ și AM1=,0’. Dar
conexiunile de adrese AM0=AP0 și AM1=AP1 deja existente fac ca numai adresele proc esor cu
AP0=’0’ și AP1=’0’ (adic ă adresele care se termin ă în „00”) s ă poată selecta loca ția 00. Rezult ă c ă
numai adresele procesor 00 00 , 01 00 , 10 00 și 11 00 pot fi alocate loca ției 00b. Aceste aloc ări posibile
sunt eviden țiate în figura 9 în partea dreapt ă. Ra ționamentul pe cate l-am f ăcut pentru loca ția 00 poate
fi f ăcut și pentru celelalte 3 loca ții. Astfel loca ția 01 poate primii adresele procesor care se termin ă în
01, adic ă loca țiile 00 01, 01 01, 10 01 și 11 01. În rezumat exist ă 4 adrese procesor candidat pentru orice
loca ție de memorie iar num ărul de aloc ări posibile este 4 4.
Exist ă îns ă un fapt de care trebuie ținut seama: adresele procesor alocate loca țiilor de memorie
trebuie s ă fie adiacente. Dup ă cum se știe procesorul este prev ăzut cu num ărător de program.
Num ărătorul de program con ține adresa instruc țiunii curente. Dup ă execu ția instruc țiunii curente
num ărătorul de program se incrementeaz ă pentru a trece la instruc țiunea urm ătoare, ceea ce face ca
instruc țiunea urm ătoare s ă se afle la adresa urm ătoare. Un alt aspect care impune adiacen ța adreselor
este alocarea vectorilor; dup ă cum se știe elementele unui vector trebuie s ă stea în memorie la adrese
succesive .
Adiacen ță codului și a vectorilor ne oblig ă s ă aloc ăm adresele procesor la rând. Dac ă loca ția 00
prime ște adresa procesor 0000 atunci loca ția 01 trebuie s ă primeasc ă adres ă 0001, loca ția 10 trebuie s ă
primeasc ă adres ă 0010 și loca ția 11 trebuie s ă primeasc ă adres ă 0011. Procesul prin care toate
loca țiile de memorie dintr-un modul de memorie primesc a drese procesor se nume ște mapare.
figura 10 AP[3..0] CE1#

figura 11 00 00 0
00 01 0
00 10 0
00 11 0
0100 1
0101 1
0110 1
0111 1
1000 1
1001 1
1010 1
1011 1
1100 1
1101 1
1110 1
1111 1
Maparea primei memorii este prezentat ă în figura 10.

8
În momentul în care o adres ă procesor se aloc ă unei loca ții de memorie trebuie ca CE#-ul
modulului de memorie c ăruia îi apar ține respectiva loca ție s ă fie activ. Reamintim c ă scrierea ori
citirea unei loca ții de memorie se poate face numai dac ă CE#-ului respectivului modul este activ (‚0’-
logic). De exemplu, dac ă adresa procesor 0000 se aloc ă loca ției 00 din modulul 1, atunci când pe
magistrala de adrese apare combina ția 0000, pe pinii de adres ă ai memoriei 1 apare 00 iar CE#-ul
memoriei 1 trebuie s ă fie ‚0’ logic. Dac ă o adres ă nu a fost alocat ă unui modul, atunci când acea adres ă
apare pe magistrala de adrese respectivul modul nu se va activa (CE#= ‚1’) iar valoarea logic ă de pe
pinii de adres ă ai modulului nu conteaz ă deoarece modulul este inactiv. Dac ă aplic ăm acest
ra ționament pentru maparea din figura 10 ob ținem tabelul al ăturat figurii. Acest tabel nu este altceva
decât o tabel ă de adev ăr pentru func ția CE1#. Aceast ă func ție se poate implementa folosind metodele
clasice de sintez ă logic ă. Pentru maparea din figura 10 se observ ă c ă CE1# este ‚0’ numai când
AP3=’0’ și AP2=’0’. Aceast ă observa ție conduce la implementarea CE1# = AP3+AP2. Aceast ă
form ă se poate ob ține și prin minimizare. Schema complet ă pentru maparea din în figura 10 este
prezentat ă în figura 11.
În continuare vom mapa al doilea modul de memorie. Adiacen ță codului și a vectorilor impune
ca prima adres ă procesor alocat ă loca ției 00 din memoria 2 s ă fie adiacent ă ultimei adrese procesor
alocate memoriei 1. Din acest motiv loca ția 00 din modulul 2 va primi adresa procesor 0100. Tot din
cauza adiacen ței celelalte loca ții vor primi adresele succesive 0101, 0110 și 0111.
Exist ă o regul ă care trebuie întotdeauna respectat ă când se mapeaz ă mai multe memorii:
Regul ă: o adres ă procesor se aloc ă la o singur ă loca ție de memorie sau nu se aloc ă deloc.
Dac ă aceast ă regul ă nu este respectat ă, la citire de la adresa alocat ă multiplu se vor selecta dou ă sau
mai multe memorii, memoriile selectate vor încerca s ă impun ă nivelele logice pe magistrala de date iar
rezultanta nu va fi niciuna din date. Este ca și cum dou ă sau mai multe persoane ar vorbi simultan.
Maparea memoriei 2 este prezentat ă în figura 12:

figura 12 AP[3..0] CE1# CE2#
00 00 0 1
00 01 0 1
00 10 0 1
00 11 0 1
01 00 1 0
01 01 1 0
01 10 1 0
01 11 1 0
1000 1 1
1001 1 1
1010 1 1
1011 1 1
1100 1 1
1101 1 1
1110 1 1
1111 1 1
A dou ă memorie se conecteaz ă la procesor la fel ca și prim ă: datele procesor se conecteaz ă la
datele memoriei, RD# la RD# și WR la WR#. Tabel ă de adev ăr pentru func ția CE2# rezult ă din
mapare si este prezentat ă în figura 12. Se observ ă c ă CE2# este ‚0’ numai când AP3=’0’ și AP2=’1’.
Aceast ă observa ție conduce la implementarea , 23# 2 AP AP CE += . Aceast ă form ă se poate ob ține și

9
prin minimizare. Schema complet ă a sistemului format din procesor și cele dou ă memorii este
prezentat ă în figura 13.

figura 13
Cele dou ă CE#-uri sunt implementate cu dou ă por ți OR și un inversor. Acestea formeaz ă
decodificatorul de adres ă.
Blocul logic care implementeaz ă toate func țiile CE# dintr-un sistem de calcul formeaz ă
decodificatorul de adres ă.
Decodificatorul de adres ă împreun ă cu cele dou ă memorii formeaz ă blocul de memorie . Acest bloc
este încadrat în dreptunghiul ro șu în figura 13.
În final vom vedea cum se implementeaz ă blocul de memorie în sistemele reale unde
procesoarele au 16 pini de adres ă sau mai mul ți iar memoriile au capacit ăți minime de ordinul kilo
octe ților. În cazul general vom considera module de mem orie cu m pini de adres ă, AM 0-AM m-1, și un
procesor cu n pini de adres ă, AP 0-AP n-1. Un modul de memorie se conecteaz ă cu procesorul dup ă
urm ătoarele 3 reguli:
1. Pinii de date procesor se conecteaz ă cu pinii de date ai memoriei, RD# procesor cu RD#
memorie și WR# procesor cu WR# memorie. Cei m pinii de adres ă ai memoriei se
conecteaz ă la pinii de adres ă cu aceia și indice ai procesorului, adic ă AM 0 cu AP 0, AM 1 cu
AP 1, …, AM m-1 cu AP m-1.
2. Memoriei i se aloc ă 2 m adrese procesor (o adres ă pentru fiecare loca ție). Pentru toate cele
2m adrese biții superiori AP n-1 – AP m au aceea și valoare.
Cele 2 m adrese procesor care respect ă condi ția 2 formeaz ă un bloc de adrese. În tabelul urm ător
este prezentat un bloc de adrese generic:
AP n-1 … AP m+1 AP m AM m-1=AP m-1 …… AM 1= AP 1 AM 0= AP 0 Echivalent zecimal
cn-1 … cm+1 cm 0 0…0 0 0 c+0
cn-1 … c m+1 cm 0 0…0 0 1 c+1
cn-1 … c m+1 cm 0 0…0 1 0 c+2
. … . . . . . . …
cn-1 … c m+1 cm 1 1…1 1 0 c+2 m -2
cn-1 … c m+1 cm 1 1…1 1 1 c+2 m -1
În tabel c= c n-1… cm+1 cm.

10
Din tabelul anterior se observ ă că:
• Adresa cea mai mic ă dintr-un bloc se termin ă în m
de ‚0’. În tabel aceast ă adres ă este adresa c n-1…cm+1 cm 0..00.
• Adresa cea mai mare dintr-un bloc se termin ă în m
de ‚1’. În tabel aceast ă adres ă este adresa c n-1…cm+1 cm 1..11.
• Adresele dintr-un bloc sunt consecutive : dac ă
adresa a apar ține blocului atunci și adresa a+1 va apar ține
blocului (cu excep ția celei mai mari adrese).
În cazul exemplului de juc ărie considerat anterior blocul
este format din 4 adrese deoarece memoriile au 4 lo ca ții.
Aceste blocurile de adrese sunt prezentate în figur a 14.

3. CE# depinde numai de bi ții superiori AP n-1 ÷ AP m, bi ți care au o valoare constant ă pe
întreg blocul de adrese. Mai precis, CE# este func ția maxtermen c de variabilele AP n-1 ÷
AP m. CE# se poate implementa u șor o poart ă OR sau cu un DEC. În exemplul de juc ărie
CE1#(AP3, AP2) este maxtermenul 0 iar CE2#(AP3, AP2 ) este maxtermenul 1.
Decodificarea care se face dup ă regulile 1, 2 și 3 se nume ște decodificare complet ă minim ă deoarece
consum ă cele mai pu ține resurse pentru implementare. Cum 99,99% din dec odific ările complete sunt
minime, cuvântul minim ă nu se mai folose ște.

1. Decodificarea complet ă (minim ă) – exemplu
Procesorul folosit în exemplu are 16 pini de adres ă. Se cere maparea unui modul EPROM de
4KB, tip I2732, începând de la adresa 0000h și a unui modul SRAM de 8KB, tip IDT7164, începând
de la adresa 8000h. Decodificarea va respecta regul ile decodific ării complete minime.
Pentru modulul EPROM calcul ăm num ărul de pini de adres ă ai modulului EPROM: 4K= 4*210 =
22*2 10 =2 12 . Pentru 4K avem nevoie de 12 adrese, de la A0 la A 11. Pentru ca decodificarea s ă fie
complet ă trebuie s ă aloc ăm un bloc de adrese de 4KB:
a) Mai întâi verific ăm dac ă adresa procesor de la care începe alocarea este pr ima adres ă dintr-un
bloc de 212 adrese. Din capitolul anterior știm c ă prima adres ă se termin ă în m=12 de ‚0’.
Verificarea se face scriind adresa procesor 0000h î n baza 2. Adresa 0x0000 scris ă în baza 2
este prima linie în tabelul 1.
b) EPROM-ului i se aloc ă primul bloc de adrese de 4K caracterizat de c=0000. Acest bloc este
marcat cu galben în tabelul urm ător:

figura 14

11
tabelul 1
Adresa procesor AP(15:0) CE
EPROM Adresa EPROM AM(11:0)
1
5 1
4 1
3 1
2 1
1 1
0 9 8 7 6 5 4 3 2 1 0 Hexa 1
1 1
0 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0001h 0 0 0 0 0 0 0 0 0 0 0 0 1
. . . . . . . . . . . . . . . . … 0 . . . . . . . . . . . .
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0fffh 0 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1000h 1 x x x x x x x x x x x x
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1001h 1 x x x x x x x x x x x x
. . . . . . . . . . . . . . . . … . . . . . . . . . . . . .
În practic ă acest tabel nu se construie ște în aceast ă form ă, ci în form ă simplificat ă. În forma
simplificat ă se specific ă prima și ultima adres ă alocat ă modulului ce se mapeaz ă. În cazul EPROM-
ului forma simplificat ă este:
Adresa proc esor AP(15:0)= 0000h = 0000 0000 0000 0000b
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h
. . . . . . . . . . . . . . . . …
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0fffh
Prima linie din tabelul în form ă simplificat ă este necesar ă pentru a verifica c ă prima adres ă procesor
alocat ă modulului de memorie se termin ă în m de zero (12 de zero pentru EPROM). Ultima linie es te
necesar ă pentru a verific ă c ă nu este dep ăș it ă zona de adrese alocate pentru maparea modulului. U ltima
adres ă procesor este 0fffh, adres ă care este mai mic ă decât 8000h (prima adresa alocat ă SRAM-ului).
Conform regulei 1 din capitolul precedent A0 proces or se conecteaz ă la A0 memorie, A1 la A1
ș.a.m.d. pân ă la A11. Func ția de selec ție se va sintetiza din bi ții superiori ai adresei procesor, adic ă
AP15 , AP14 , AP13 și AP12 . CE# EPROM trebuie s ă fie ‚0’ logic când AP[15:12]= ”0000”. Implementare a
este f ăcut ă prin intermediul por ții OR4 din pozi ția U1 în figura 15.
Not ă: Figura este desenat ă în modul comprimat. Pentru detalii privind modul comprimat de desenare
al schemelor vezi „ Anexa – desenarea simplificat ă a schemelor ” în aceast ă prelegere.
Pentru modulul SRAM proced ăm la fel ca pentru EPROM. Mai întâi calcul ăm num ărul de pini
de adres ă ai modulului RAM: 8K= 8*2 10 = 2 3*2 10 =2 13 . Pentru 8K avem nevoie de 13 adrese: A 0-A12 .
La fel ca la modul EPROM verific ăm dac ă adresa procesor 8000h de la care începe alocarea e ste prima
adres ă dintr-un bloc:
tabelul 2
Adresa procesor AP(15:0) CE
SRAM Adresa SRAM AM(12:0)
1
5 1
4 1
3 1
2 1
1 1
0 9 8 7 6 5 4 3 2 1 0 Hexa 1
2 1
1 1
0 9 8 7 6 5 4 3 2 1 0
. . . . . . . . . . . . . . . . … . . . . . . . . . . . . .
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7fffh 1 x x x x x x x x x x x x x
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8000h 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 8001h 0 0 0 0 0 0 0 0 0 0 0 0 0 1
. . . . . . . . . . . . . . . . … . . . . . . . . . . . . . .
1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 9fffh 0 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 a000h 1 x x x x x x x x x x x x x
1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 a001h 1 x x x x x x x x x x x x x
. . . . . . . . . . . . . . . . … . . . . . . . . . . . . .
Practic verific ăm dac ă 8000h termin ă în 13 de zero. Adresa 8000h este prima adres ă din blocul
galben din tabelul de mai sus și se observ ă c ă se termin ă în 13 de ‚0’.
Blocul de adrese alocat SRAM-ului este marcat cu ga lben în tabelul 2.

12
La fel ca la EPROM, în practic ă se construie ște forma simplificat ă a acestui tabel:
Adresa procesor AP(15:0)= 8000h = 1000 0000 0000 00 00b
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8000h
. . . . . . . . . . . . . . . . …
1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 9FFFh
Prima linie din tabelul in form ă simplificat ă arat ă c ă prima adres ă procesor alocat ă modulului de
memorie se termin ă în m de zero (13 de zero pentru SRAM).
CE# SRAM trebuie s ă fie ‚0’ logic când AP[15:12] procesor sunt „100”. Implementarea este f ăcut ă prin
intermediul por ților U2 și U3 din figura 15. În tabelul al ăturat figurii se construie ște harta de alocare a
resurselor: între adresele 0000h și 0fffh se afl ă mapat modulul EPROM iar între adresele 8000h și
9fffh se afl ă mapat modulul SRAM.

figura 15

A000- FFFF

Nealocat
8000 – 9FFF
SRAM

1000-7FFF

Nealocat
0000 – 0FFF EPROM

2. Decodificarea incomplet ă.
Mai întâi vom face dou ă observa ții:
1. În marea majoritate a cazurilor num ărul de module de memorie plasate în exteriorul
microprocesorului este mic, de unu sau dou ă. Dac ă folosim decodificarea complet ă, multe
adrese procesor râm ăm nealocate , a șa cum se poate observa și în tabelului din figura 15.
2. Știm c ă regula 3 din capitolul 3 din aceasta prelegere spu ne c ă CE#-ul unui modul de memorie
este o func ție maxtermen care depinde de adresele procesor care nu sunt deja conectate la pini
de adresa ai modulul de memorie. Drept consecin ță cu cât o memorie are o capacitate mai
mare, cu atât CE#-ul sau va depinde de mai pu ține adrese procesor. În exemplu de la
decodificarea complet ă CE#-ul modulului EPROM cu capacitatea 4KB depinde de 4 variabile
iar CE#-ul SRAM-ului cu capacitatea 8KB depinde num ai de trei variabile.
În figura 16 este completat exemplu „de juc ărie” din figura 12 și figura 13 prin ad ăugarea unui modul
de memorie cu capacitate de 8 loca ții. Acest modul se mapeaz ă în spa țiul de adrese procesor r ămas
liber. Dup ă maparea memoriei de 8 loca ții tot spa țiul de adrese procesor este ocupat.

AB13 AB13 AB12 ROM_1
I2732 OE# A[11:0]
D[7:0] CE# U2 AB14
AB15
AB14
1AB[15:0]
U3
RD#
DB[7:0] U1 AB15
RD#
WR#
WR# uP_1
A[15:0]
D[7:0] WR# RD# RAM_2
IDT7164 RD#
WR# A[12:0]
D[7:0]CS1# CS2

13
AP[3:0]
00 00
00 01
00 10
00 11
01 00
01 01
01 10
01 11
10 00
10 01
10 10
10 11
11 00
11 01
11 10
11 11 Bloc 0 Bloc 1 Bloc 2 Bloc 3Mem.1 AM[1:0]
00
01
10
11
Mem. 2 AM[1:0]
00
01
10
11 Mem. 3 AM[2:0]
000
001
010
111
100
101
110
111

figura 16 AP[3..0] CE1# CE2# CE3#
0000 0 1 1
0001 0 1 1
0010 0 1 1
0011 0 1 1
0100 1 0 1
0101 1 0 1
0110 1 0 1
0111 1 0 1
1000 1 1 0
1001 1 1 0
1010 1 1 0
1011 1 1 0
1100 1 1 0
1101 1 1 0
1110 1 1 0
1111 1 1 0

Memoria de 8 loca ții a fost mapat ă respectând regulile decodific ării complete, ceea ce face ca
AP3 =CE3# . Dac ă pentru modulul 1 de 4 loca ții din figura 12, CE1#=AP3+AP2, pentru modulul de 8
loca ții AP3 =CE# . Form ă pentru modulul de 8 loca ții este evident mai simpl ă. Cele dou ă observa ții
anterioare ne sugereaz ă urm ătoarea idee:
Dac ă tot exist ă adrese procesor nealocate ce s-ar întâmpla dac ă am aloca unei memorii mai
multe adrese procesor decât num ărul de loca ții al memoriei? CE#-ul respectivului modul ar
depinde de mai pu ține variabile și astfel ar sc ădea complexitatea logicii de decodificare.
Să presupunem c ă în spa țiul liber din figura 12 trebuie ad ăugat ă o memorie de 4 loca ții, nu cea de 8
loca ții din figura 16.

figura 17 AP[3..0] CE1# CE2# CE3#
00 00 0 1 1
00 01 0 1 1
00 10 0 1 1
00 11 0 1 1
01 00 1 0 1
01 01 1 0 1
01 10 1 0 1
01 11 1 0 1
10 00 1 1 0
10 01 1 1 0
10 10 1 1 0
10 11 1 1 0
11 00 1 1 1
11 01 1 1 1
11 10 1 1 1
11 11 1 1 1

Alocarea memoriilor 1 și 2 din figura 12 se p ăstreaz ă iar a treia memorie se mapeaz ă în blocul 2 de
adrese. Dup ă ad ăugarea memoriei 3 de 4 loca ții harta de alocare a memoriei este prezentat ă în figura
17 și în tabelul al ăturat figurii.

14
Din figur ă rezult ă c ă formele pentru CE#-urile celor 3 module sunt
23# 3, 23# 2, 23# 1 AP AP CE AP AP CE AP AP CE += += += . Se observ ă c ă forma pentru CE3#
este asem ănătoare din punct de vedere al complexit ății cu CE2# sau CE1#. De asemenea se observ ă
ca blocul 3 de adrese a r ămas nealocat .
În continuare vom vedea cum se poate mic șora complexitatea implement ării lui CE3# pe seama
acestui bloc. Vom proceda dup ă cum urmeaz ă:
1. Modulului 3 se va mapa de dou ă ori. Modulul va primi 2 blocuri de adres ă, și anume
blocurile 2 și 3. În figura 18 este prezentat ă aceast ă mapare plus tabela de adev ăr rezultat ă din
respectiva mapare.
2. Cele dou ă blocurile de adres ă procesor alocate modulului 3 sunt acele blocuri ca re ar putea fi
alocate unui modul imaginar de capacitate dubl ă. Modulul imaginar este reprezentat cu linie
punctat ă în figura 18. Maparea modulului imaginar în acest spa țiu de adres ă a fost f ăcut ă
anterior în figura 16 și a generat AP3 =CE# . Aceast ă form ă este mai simpl ă decât dac ă
modulului 3 i s-ar fi alocat un singur bloc de adre se ca în figura 17 unde s-a ob ținut
23# 3 AP AP CE += .

figura 18 AP[3..0] CE3#
0000 1
0001 1
0010 1
0011 1
0100 1
0101 1
0110 1
0111 1
1000 0
1001 0
1010 0
1011 0
1100 0
1101 0
1110 0
1111 0

În acest exemplu „de juc ărie” se economise ște o poart ă OR. Acest câ știg pare nesemnificativ, dar s ă nu
uitam c ă exemplu este totu și „de juc ărie”. Care ar fi economia în cazul în care adresa p rocesor s-ar
reprezenta pe 64 de bi ți iar modulul de memoria ar avea 4GB (adresa reprez entat ă pe 32 de bi ți)? Dac ă
am decodifica complet adresa procesor, CE#-ul modul ului de memoria ar depinde de 32 de variabile.
În acest caz simplificarea formei pentru CE# ar adu ce economii importante de resurse.
Exemplul din figura 18 eviden țiaz ă esen ță decodific ării incomplete. Din figur ă se observ ă c ă
adresa procesor AP2 nu se conecteaz ă nici la vreun pin de adresa al modulului de memori e, nici nu
intra în logica de generare a lui CE3#. Astfel pent ru CE3# nu se mai folosesc to ți bi ții superiori ai
adresei procesor, ci numai o parte din ei. Din aces t motiv acest tip de decodificare se nume ște
decodificarea incomplet ă. Efectul decodific ării incomplete este o form ă mai simpl ă pentru CE#.
Pre țul pl ătit în acest caz este alocarea unui num ăr dublu de adrese procesor fa ță de decodificarea
complet ă. Acest pre ț este pl ătit cu pl ăcere în cazul în care blocul 3 de adresele proceso r ar r ămâne
rămânea nealocat. În general orice dublare a spa țiului de adrese alocat face s ă dispar ă o adres ă din

15
implementarea CE#.
Decodificarea incomplet ă genereaz ă un efect interesant: o loca ție de
memorie prime ște mai multe adrese procesor. În exemplu din figura
18 fiecare loca ție de memorie din modulul 3 prime ște dou ă adrese
procesor. Adresele alocate prezentat ă în tabelul al ăturat. Vom detalia
acest efect pu țin mai târziu.

În cazul general decodificarea incomplet ă a unui modul de memorie de capacitate 2 m se face
respectând urm ătorii pa și:
a) În spa țiul de adrese dat pentru maparea modulului se g ăse ște cel mai mare bloc de adrese
procesor. Fie dimensiunea acestui bloc 2v. Acest bloc poate fi egal cu spa țiu de adrese alocat
map ării. Acest bloc s-ar putea aloca unei memorii imagi nare cu capacitatea 2 v loca ții.
Capacitatea modului imaginar este de 2, 4, 8 etc. o ri mai mare decât capacitatea modulului real.
Modulul real are pinii de adres ă AM 0, AM 1,…, AM m-1 iar modulul imaginar are pinii AV 0,
AV1,…, AV v-1. Indicele v este obligatoriu mai mare decât m, altfel decodificarea incomplet ă nu
este posibil ă.
b) Adresele memoriei reale se conecteaz ă la adresele procesor dup ă regula 1: AM 0=AP 0,
AM 1=AP 1, …, AM m-1=AP m-1, la fel ca la decodificarea complet ă.
c) Adresele procesor AP m, AP m+1,…., AP v-1 care ar trebui conectate la pinii corespunz ători (cu
acela și indice) ai memorie imaginare se las ă neconecta ți.
d) CE# este o func ție maxtermen ce depinde de variabilele AP n-1 ÷ AP v și se poate implementa
ușor o poart ă OR sau cu un DEC (la fel ca la decodificarea compl et ă).
În continuare vom relua exemplul pentru decodificar ea complet ă în care se cerea maparea unui modul
EPROM de 4KB începând de la adresa 0000h și a unui modul SRAM de 8KB începând de la adresa
8000h.
Schema și harta memoriei pentru acest exemplu
este prezentat ă în figura 15. Harta memoriei este reluat ă
în tabelul al ăturat, pe coloana „Decodificare complet ă”.
Dup ă cum s-a men ționat anterior, multe adrese procesor
au r ămas nealocate. În cazul decodific ării incomplete
vom folosi cât mai multe adrese nealocate astfel în cât s ă
map ăm modulele imaginare cu cea mai mare capacitate
de memorare cu putin ță . Deoarece avem de mapat dou ă
module, vom împ ărți spa țiul de adrese procesor în dou ă
zone.
Spa țiul nealocat de la 1000h la 7FFFh va fi
alocat EPROM-ului și astfel acest modul va fi mapat în
spa țiu 0000h-7FFFh. Spa țiul nealocat de la A000h la
FFFFh va fi alocat SRAM-ului și astfel acest modul va
fi mapat în spa țiu 8000h-FFFFh. Hart ă de alocate a
adreselor este prezentat ă în tabel, pe coloana „Decodificare incomplet ă”.
În continuare vom urma pa șii a..d enun țați anterior pentru spa țiu de adrese 0000h-7FFFh alocat
EPROM-ului:
a) Spa țiul de adrese 0000h-7FFFh este format din 32K==2 15 adrese. Cel mai mare bloc de adrese AM[1..0]
în mem. 3 Blocul 3 Blocul2
00 1000 1100
01 1001 1101
10 1010 1110
11 1011 1111
Decodificare
complet ă Decodificare
incomplet ă

A000- FFFF

Nealocat

SRAM
8000 – 9FFF
SRAM

1000-7FFF

Nealocat

EPROM
0000 – 0FFF EPROM

16
procesor este întreg spa țiu. Așa cum s-a detaliat la decodificarea complet ă vom verifica c ă prima
adres ă se termin ă în 15 de zero. Memoria virtual ă creat ă pentru EPROM va primi blocul de adrese
de 32K caracterizat de A15=0:
Adresa procesor AP(15:0)= 0000h = 0000 0000 0000 00 00b
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h
. . . . . . . . . . . . . . . . ……
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7fffh
b) Adresele memoriei EPROM reale se conecteaz ă la adresele procesor dup ă regula AM 0=AP 0,
AM 1=AP 1, …, AM 11 =AP 11, la fel ca la decodificarea complet ă.
c) Adresele procesor AP12, AP13 și AP14 nu se conecteaz ă deoarece modulul real EPROM nu are
ace ști pini de adres ă.
d) Func ția de selec ție se va sintetiza din bi ții superiori ai adresei procesor, adic ă AP 15 în acest caz.
CE# EPROM trebuie s ă fie ‚0’ logic când AP15=’0’. Se observ ă c ă în acest caz CE# EPROM =AP15.
Conectarea EPROM-ului conform celor discutate aici este prezentat ă în figura 19:

figura 19 E000-FFFF SRAM

C000-DFFF SRAM

A000-BFFF SRAM

8000-9FFF SRAM

7000-7FFF EPROM
6000-6FFF EPROM
5000-5FFF EPROM
4000-4FFF EPROM
3000-3FFF EPROM
2000-2FFF EPROM
1000-1FFF EPROM
0000-0FFF EPROM

În continuare vom urma pa șii a..d pentru modulul SRAM. Acestui modul i s-a al ocat spa țiul de
adrese 8000h-FFFFh cu dimensiunea 32K:
a) Spa țiul de adrese 8000h-FFFFh este format din 32K adres e. Vom verifica c ă prima adres ă se
termin ă în 15 de zero. Memoria virtual ă creat ă pentru SRAM va primi blocul de adrese de 32K
caracterizat de A15=’1’:
Adresa procesor AP(15:0)= 8000h = 1000 0000 0000 00 00b
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8000h
. . . . . . . . . . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ffffh
b) Adresele memoriei reale se conecteaz ă la adresele procesor dup ă regula AM 0=AP 0, AM 1=AP 1, …,
AM 12=AP 12, la fel ca la decodificarea complet ă.
c) Adresele procesor AP13 și AP14 nu se conecteaz ă deoarece modulul real SRAM nu are ace ști
pini de adres ă.
d) Func ția de selec ție se va sintetiza din bi ții superiori ai adresei procesor, adic ă AP 15 în acest caz.
CE# SRAM trebuie s ă fie ‚0’ logic când AP15=’1’. Se observ ă c ă în acest caz AP15 =CE# SRAM . RD# RAM_3
IDT7164 RD#
WR# A[12:0]
D[7:0] CS1# CS2 uP_2
A[15:0]
D[7:0] WR# RD#
AB15
RD# AB15
WR#
WR# 1ROM_2
I2732 OE# A[11:0]
D[7:0] CE#
DB[7:0] AB[15:0]

17
Conectarea SRAM-ului este prezentat ă în figura 19.
În acest moment vom examina în detaliu efectul aloc ării mai multor adrese procesor la o loca ție de
memorie. Mai întâi vom analiza EPROM-ul. Spa țiul în care acesta este mapat are 32K dar capacitat ea
modulului este de doar 4K. Num ărul de blocuri de 4K cuprinse în 32k este 8. Aceste 8 blocuri sunt
blocurile 0000-0fff, 1000-1fff, …, 7000-7fff în tab elul din figura 19. Orice loca ție de memorie
EPROM prime ște 8 adrese procesor. De exemplu, loca ției zero din EPROM i se vor aloca toate
adresele de forma 0xxx 0000 0000 0000:
0 000 0000 0000 0000 = 0000h;
0 001 0000 0000 0000 = 1000h;
0 010 0000 0000 0000 = 2000h;
0 011 0000 0000 0000 = 3000h;
0 100 0000 0000 0000 = 4000h;
0 101 0000 0000 0000 = 5000h;
0 110 0000 0000 0000 = 6000h;
0 111 0000 0000 0000 = 7000h;
Acest fapt este valabil pentru orice loca ție EPROM. Dup ă cum se observ ă din tabel, EPROM-ul este
proiectat de 8 ori în spa țiul de adrese al procesorului. Tot din tabel se obs erv ă ca modulul SRAM
prime ște 4 blocuri de adres ă.
Concluzie: în cazul decodific ărilor incomplete un modul de memorie este proiectat în spa țiul de adrese
procesor de 2 la puterea num ărului de adrese superioare procesor de care nu se ține seama la
implementarea func ției de selec ție a respectivului modul. În exemplul din figura 19 la implementarea
selec ției EPROM-ului nu s-a ținut cont de adresele A14, A13 și A12, iar la implementarea selec ției
SRAM-ului de A14 și A13. Deci EPROM-ul va fi proiectat în spa țiul de adrese al procesorului de 2 3
ori iar SRAM-ul de 2 2 ori. Aceast ă modalitate de decodificare simplific ă implementarea func țiilor de
selec ție. În figura 19 implementarea a necesitat doar un inversor.
Decodificarea incomplet ă nu provoac ă nici un inconvenient pentru dezvoltatorul de progr ame
(softistul). Acesta trebuie s ă scrie programele luând în considerare numai o sing ur ă proiec ție (de regul ă
cea de la adresa cea mai mic ă) și s ă ignore restul proiec țiilor. La adresele ce corespund celorlalte
proiec ții se va considera c ă nu exist ă loca ții. În acest fel, la nivel soft, nu va exista nici o deosebire
între decodificarea incomplet ă și cea complet ă.
În exemplul anterior ambele blocuri sunt egale cu s pa țiul alocat. În continuare vom vedea cum
se procedeaz ă în cazul general, când blocul nu este egal cu tot spa țiu alocat. Vom analiza dou ă
exemple.

Exemplul 1
Să presupunem c ă SRAM-ul de 8K din exemplul anterior trebuie decodi ficat incomplet în
spa țiul de adres ă 3000h-AFFFh. Prima opera ție pe care o facem este s ă verific ăm dimensiunea acestui
spa țiu. Aceast ă dimensiune se calculeaz ă ca adresa cea mai mare minus adresa cea mai mica p lus 1,
adic ă AFFFh-3000h+1=8000h. Deoarece 8000h=32K, aceasta e ste dimensiunea celui mai mare modul
imaginar. Urm ătorul pas este s ă verific ăm dac ă spa țiul 3000h-AFFFh formeaz ă un bloc. În acest sens
verific ăm dac ă adresa cea mai mic ă se termin ă în 13 de ‚0’. Aceast ă condi ție nu este îndeplinit ă
deoarece 3000h=0011 0000 0000 0000 se termin ă doar în 12 de ‚0’. A șa cum s-a precizat anterior, în
acest caz trebuie g ăsit cel mai mare bloc care se poate include în spa țiu alocat decodific ării.
Cea mai simpl ă metod ă pentru g ăsirea blocului este metoda tabelar ă, dar nu este singura. Mai
întâi întreg spa țiu de adrese procesor se împarte la 2. În cazul nos tru spa țiu are 64K iar prin împ ărțire
la 2 rezult ă dou ă blocuri de 32K. Deoarece 64K=10000h, jum ătate înseamn ă 64K/2=10000h/2, adic ă
32K=8000h. Cele dou ă blocuri de 32K și adresele de început și de sfâr șit ale acestora sunt prezentate

18
în coloana 32K din tabelul urm ător:
32 K 16 K 8K 4K
FFFFh FFFFh FFFFh F000h-FFFFh
E000h- E000h-EFFFh
DFFFh D000h-DFFFh
C000h- C000h- C000h-CFFFh
BFFFh BFFFh B000h-BFFFh
A000h- A000h-AFFFh
9FFFh 9000h-9FFFh
8000h- 8000h- 8000h- 8000h-8FFFh
7FFFh 7FFFh 7FFFh 7000h-7FFFh
6000h- 6000h-6FFFh
5FFFh 5000h-5FFFh
4000h- 4000h- 4000h-4FFFh
3FFFh 3FFFh 3000h-3FFFh
2000h- 2000h-2FFFh
1FFFh 1000h-1FFFh
0000h- 0000h- 0000h- 0000h-0FFFh
Apoi fiecare bloc de 32K se împarte la 2 pentru a g ăsi blocurile de 16K. În hexazecimal
16K=32K/2=8000h/2=4000h. Blocurile de 16K care resp ect ă regulile decodific ării complete încep de
la adresele 0000h, 4000h, 8000h și C000h. Aceste 4 blocuri sunt prezentate în coloan a 16K din tabelul
de mai sus. În mod similar se ob țin blocurile de 8K și 4K.
Dup ă construc ția tabelului blocurilor de adres ă, zona 3000h-AFFFh alocat ă SRAM-lui se
marcheaz ă. În tabel pentru marcare s-a ales colorarea fundal ului cu galben. Marcarea se face în toate
coloanele în care blocurile de adres ă sunt mai mari sau egale cu dimensiunea memoriei de mapat. În
cazul din exemplu marcarea se face numai în coloane le 8, 16 și 32K. Pentru g ăsirea blocului de
dimensiune maxim ă analiz ăm coloanele 32, 16 și 8K. Începem cu coloana blocurilor cele mai mari,
adic ă 32K. Din tabel se observ ă c ă în coloana 32K nu exist ă nici un bloc complet în zona galben ă, deci
nu exist ă un bloc de 32k care s ă poat ă fi alocat SRAM-ului. Continu ăm cu coloana 16K unde g ăsim
blocul 4000h-7FFFh. Acest bloc este marcat cu linie ro șie în tabel. În acest moment analiza se opre ște,
blocul de adrese procesor alocat SRAM-ului fiind bl ocul 4000h-7FFFh. Tabela de alocare a adreselor
procesor pentru acest bloc este:
Adresa procesor AP(15:0)= 8000h = 1000 0000 0000 00 00b
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4000h
. . . . . . . . . . . . . . .
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7fffh
Aplicarea regulilor decodific ării incomplete la maparea modulului SRAM de 8K în s pa țiul de adrese
procesor 4000h-7FFFh face ca AM 0=AP 0, AM 1=AP 1, …, AM 12=AP 12, adresa procesor AP13 nu se
conecteaz ă iar AP14 AP15 = CE# SRAM +.
Exemplul 2.
În anumite cazuri este posibil s ă existe mai multe subspa ții de dimensiune maxim ă. Să presupunem c ă
SRAM-ul de 8K trebuie decodificat incomplet în spa țiul de adres ă 4000h-BFFFh. Dimensiunea acestui
spa țiu este BFFFh-4000h+1=8000h=32K, la fel ca mai înai nte. Apoi verific ăm dac ă adresa cea mai
mic ă se termin ă în 13 de ‚0’. Aceast ă condi ție este îndeplinit ă deoarece 4000h=010 0 0000 0000 0000
se termin ă doar în 13 de ‚0’. A șa cum s-a precizat anterior, în acest caz trebuie g ăsit cel mai mare bloc.
Tabelului blocurilor de adres ă în care este marcat ă zona de adrese 4000h-BFFFh conform procedurii
de la exemplul 1 este prezentat în continuare:

19

32 K 16 K 8K 4K
FFFFh FFFFh FFFFh F000h-FFFFh
E000h- E000h-EFFFh
DFFFh D000h-DFFFh
C000h- C000h- C000h-CFFFh
BFFFh BFFFh B000h-BFFFh
A000h- A000h-AFFFh
9FFFh 9000h-9FFFh
8000h- 8000h- 8000h- 8000h-8FFFh
7FFFh 7FFFh 7FFFh 7000h-7FFFh
6000h- 6000h-6FFFh
5FFFh 5000h-5FFFh
4000h- 4000h- 4000h-4FFFh
3FFFh 3FFFh 3000h-3FFFh
2000h- 2000h-2FFFh
1FFFh 1000h-1FFFh
0000h- 0000h- 0000h- 0000h-0FFFh
La fel ca în exemplul 1, pentru g ăsirea blocului de dimensiune maxim ă analiz ăm coloanele 32,
16 și 8K. Începem cu coloana blocurilor cele mai mari, adic ă 32K. Din tabel se observ ă c ă în coloana
32K nu exist ă nici un bloc complet în zona galben ă, deci nu exist ă un bloc de 32k care s ă poat ă fi
alocat SRAM-ului.
Continu ăm cu coloana 16K unde g ăsim blocul 4000h-7FFFh, marcat cu linie ro șie în tabel. Tot
în coloana 16K blocul 8000h-BFFFh marcat cu linie a lbastr ă se afl ă complet în zona galben ă și astfel
poate fi ales pentru mapare. Chiar dac ă avem dou ă blocuri adiacente de 16K, spa țiul de 32k rezultat
prin însumare NU formeaz ă un bloc de 32K. Se observ ă u șor c ă prima adresa nu este un multiplu de
32K.
În acest moment analiza se opre ște, deoarece avem nu unul, ci dou ă blocuri de adrese procesor
ce pot fi alocate SRAM-ului. Unul din cele dou ă blocuri, indiferent care, se va aloca modulului
SRAM.

3. Decodificarea par țial ă.
În multe aplica ții este posibil s ă se dispun ă de module de memorie care con țin un num ăr de
loca ții mai mare decât num ărul necesar pentru o aplica ție specific ă. În exemplu din figura 20 sunt
necesari 4Ko de loca ții tip EPROM dar s-a folosit un modul EPROM de tip 27256, cu organizare
32Kx8 (32KB). Sinteza func ției de selec ție a fost f ăcut ă ca în cazul decodific ării complete. Din cei
32KB sunt folosi ți numai 4KB. Cei 4KB sunt proiecta ți în spa țiul de adrese 0000-0FFFh. Liniile de
adres ă suplimentare A12-A14, sunt conectate la zero logic . În cazul unei decodific ări par țiale liniile
de adres ă suplimentare nu se las ă niciodat ă neconectate (în aer)! Dac ă modulul decodificat par țial
este de tip memorie fix ă (PROM, EPROM, E 2PROM, FLASHPROM) trebuie ținut seama de valorile
logice la care se conecteaz ă liniile de adres ă suplimentare, pentru a programa (“arde”) corect mo dulul.

20

figura 20

Anexa – desenarea simplificat ă a schemelor
In exemplele din capitolul 3 procesorul are doar 4 pini de adres ă iar modulele de memorie doar 4
loca ții. Cum se deseneaz ă schemele în care apar procesoare și module de memorie reala? În figura
urm ătoare este prezentat un procesor real cu 16 pini de adres ă, 8 pini de date, semnalele de control
RD# și WR# precum și alte semnale de control neimportante în momentul de fa ță . Procesorul este
Z80-CPU:

În figura de mai sus este prezentat și un modul SRAM real cu capacitatea de 2Kx8 cu codu l I2016.
Modulul are 11 pini de adres ă, 8 pini de date și semnalele de control discutate pe larg în capitol ul 2.
În continuare vom conecta memoria la procesor. În figura urm ătoare este prezentat ă prima
conexiune: pinulA0 al procesorului se conecteaz ă prin firul ABUS0 la pinul A0 al memorie: AB13 AB13 AB12 ROM_1
I27256 OE# A[11:0]
D[7:0] CE# A12
A13
A14 U2 AB14
AB15
AB14
1AB[15:0]
U3
RD#
DB[7:0] '0'U1 AB15
RD#
WR# '0'
WR# uP_1
A[15:0]
D[7:0] WR# RD# RAM_2
IDT7164 RD#
WR# A[12:0]
D[7:0] CS1# CS2 '0'
U1
Z80-CPU 30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
14
15
12
8
7
9
10
13 27
19
20
22
21
28
18
24
16
17
26
25
23
6A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
D0
D1
D2
D3
D4
D5
D6
D7 M1
MREQ
IORQ
WR
RD
REFSH
HALT
WAIT
INT
NMI
RESET
BUSRQ
BUSAK
CLK U24
2016 8
7
6
5
4
3
2
1
23
22
19
18
20
21 9
10
11
13
14
15
16
17 A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
CE
OE
WE D0
D1
D2
D3
D4
D5
D6
D7

21

Numele firului nu este obligatoriu; conexiunile se pot face și f ără s ă denumim firele.
În figura urm ătoare to ți pinii de adresa ai memoriei s-au conectat la pini i corespunz ători ai
procesorului:

Pinii procesor A15-A11 sunt conecta ți la firele ABUS15-ABUS11, fire pentru care cel dea l doilea cap
este momentan neconectat. Aceste fire pot fi folo site ulterior.
În continuare se conecteaz ă pinii de date: U1
Z80-CPU 30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
14
15
12
8
7
9
10
13 27
19
20
22
21
28
18
24
16
17
26
25
23
6A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
D0
D1
D2
D3
D4
D5
D6
D7 M1
MREQ
IORQ
WR
RD
REFSH
HALT
WAIT
INT
NMI
RESET
BUSRQ
BUSAK
CLK ABUS0 U24
2016 8
7
6
5
4
3
2
1
23
22
19
18
20
21 9
10
11
13
14
15
16
17 A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
CE
OE
WE D0
D1
D2
D3
D4
D5
D6
D7
ABUS2
ABUS9
ABUS15 ABUS11 ABUS10 ABUS1
ABUS3
ABUS12 ABUS7
ABUS8 ABUS6 U24
2016 8
7
6
5
4
3
2
1
23
22
19
18
20
21 9
10
11
13
14
15
16
17 A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
CE
OE
WE D0
D1
D2
D3
D4
D5
D6
D7 ABUS0
ABUS5
ABUS14 U1
Z80-CPU 30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
14
15
12
8
7
9
10
13 27
19
20
22
21
28
18
24
16
17
26
25
23
6A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
D0
D1
D2
D3
D4
D5
D6
D7 M1
MREQ
IORQ
WR
RD
REFSH
HALT
WAIT
INT
NMI
RESET
BUSRQ
BUSAK
CLK ABUS4
ABUS13

22

figura 21
Ad ăug ăm înc ă un modul de memorie și conect ăm pinii de date și 4 pini de adres ă:

Schema în acest moment este destul de complicat ă, de „plin ă de fire”. Dac ă am conecta și ceilal ți pini
de adres ă schema ar deveni și mai complicat ă. Dac ă pe schem ă sunt prea multe fire, func ționalitatea
este ascuns ă de aceste fire.
O solu ție posibil ă în astfel de cazuri este conectarea prin nume: dou ă fire cu acela și nume se
consider ă conectate. În figura urm ătoare este schema anterioar ă în care s-a folosit foarte mult tehnica
conect ării prin nume (connect by name):
ABUS5
DBUS3 ABUS1
ABUS9
ABUS15
DBUS7 ABUS11 ABUS3
DBUS1 ABUS12 ABUS2
DBUS4 DBUS0 ABUS10
DBUS6 U1
Z80-CPU 30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
14
15
12
8
7
9
10
13 27
19
20
22
21
28
18
24
16
17
26
25
23
6A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
D0
D1
D2
D3
D4
D5
D6
D7 M1
MREQ
IORQ
WR
RD
REFSH
HALT
WAIT
INT
NMI
RESET
BUSRQ
BUSAK
CLK DBUS5 ABUS7
ABUS8 ABUS4
ABUS14 U24
2016 8
7
6
5
4
3
2
1
23
22
19
18
20
21 9
10
11
13
14
15
16
17 A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
CE
OE
WE D0
D1
D2
D3
D4
D5
D6
D7 ABUS0
ABUS6
DBUS2 ABUS13
ABUS5
DBUS3 ABUS1
ABUS9
DBUS6 ABUS15
DBUS7 ABUS11 ABUS3
DBUS1 ABUS12 ABUS2
DBUS4 ?
DBUS0 ABUS10 U1
Z80-CPU 30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
14
15
12
8
7
9
10
13 27
19
20
22
21
28
18
24
16
17
26
25
23
6A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
D0
D1
D2
D3
D4
D5
D6
D7 M1
MREQ
IORQ
WR
RD
REFSH
HALT
WAIT
INT
NMI
RESET
BUSRQ
BUSAK
CLK DBUS5 ABUS7
ABUS8 ABUS4 U3
2016 8
7
6
5
4
3
2
1
23
22
19
18
20
21 9
10
11
13
14
15
16
17 A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
CE
OE
WE D0
D1
D2
D3
D4
D5
D6
D7
ABUS14 U24
2016 8
7
6
5
4
3
2
1
23
22
19
18
20
21 9
10
11
13
14
15
16
17 A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
CE
OE
WE D0
D1
D2
D3
D4
D5
D6
D7 ABUS0
ABUS6
DBUS2 ABUS13
DBUS3
ABUS10 ABUS2
ABUS4
ABUS9
DBUS5 ABUS8 ABUS1
ABUS9 ABUS0
DBUS6 DBUS6
DBUS1 DBUS2
ABUS15 ABUS11 DBUS5
ABUS6 ABUS3
ABUS12
DBUS4 U1
Z80-CPU 30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
14
15
12
8
7
9
10
13 27
19
20
22
21
28
18
24
16
17
26
25
23
6A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
D0
D1
D2
D3
D4
D5
D6
D7 M1
MREQ
IORQ
WR
RD
REFSH
HALT
WAIT
INT
NMI
RESET
BUSRQ
BUSAK
CLK DBUS7 DBUS3
DBUS7 ABUS5
ABUS7 U24
2016 8
7
6
5
4
3
2
1
23
22
19
18
20
21 9
10
11
13
14
15
16
17 A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
CE
OE
WE D0
D1
D2
D3
D4
D5
D6
D7 DBUS6 DBUS0
ABUS5 DBUS5 DBUS4
ABUS14
DBUS2 ABUS3 U3
2016 8
7
6
5
4
3
2
1
23
22
19
18
20
21 9
10
11
13
14
15
16
17 A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
CE
OE
WE D0
D1
D2
D3
D4
D5
D6
D7 DBUS0
ABUS4 DBUS2 ABUS0
DBUS0 DBUS4 DBUS1
ABUS2
ABUS13
DBUS3 ABUS7 ABUS1
DBUS7 ABUS8 DBUS1
ABUS10 ABUS6

23
Din p ăcate folosirea exclusiv ă a acestei tehnici nu d ă rezultate prea bune: acum sunt prea pu ține fire!
Este greu s ă ne d ăm seama cum se conecteaz ă al doilea modul RAM (modulul U3).
Solu ția de compromis între desenarea cu multe fire și desenarea cu conectare prin nume este
desenarea cu magistrale. Firele cu nume se unesc în m ănunchiuri numite magistrale, iar magistralele
ac ționeaz ă ca un ghid pentru privire:

De și desenarea cu magistrale este solu ția corect ă în cazul sistemelor cu microprocesoare, aceast ă
metod ă este bun ă dac ă avem la dispozi ție un software de desenare, cum este OrCAD. Deoarec e la
examen trebuie s ă desen ăm manual, în continuare se va prezenta o metod ă simpl ă, bazat ă tot pe
magistrale. În loc de mul ți pini de adres ă sau de date vom desena un singur pin vectorial, a șa cum se
face în ISE Xilinx. De exemplu, în loc de de A0, A1 , A2,…, A15 se folose ște A[15:0].
Conectarea pinilor vectoriali la magistrale se face direct. In figura urm ătoare pinul vectorial
S[3:0] se conecteaz ă prin intermediul magistralei BUS[3:0] la pinul vec torial D[3:0]. Aceast ă
conexiune vectorial ă define ște 4 conexiuni simple, scalare. Regula dup ă care se fac aceste conexiuni
este de la dreapta la stânga : cel mai din dreapta pin S se conecteaz ă prin intermediul celui mai din
dreapta fir BUS la cel mai din dreapta pin D. Adic ă S0 se conecteaz ă prin intermediul lui BUS0 la D0.
Apoi se trece la urm ătorul membru de la dreapta la stânga atât la pini c ât și la bus. Conexiunile definite
de regula de la dreapta la stânga sunt scrise în pa rtea dreapt ă a figurii.
S0 ⇔ BUS0 ⇔ D0
S1 ⇔ BUS1 ⇔ D1
S2 ⇔ BUS2 ⇔ D2
S3 ⇔ BUS3 ⇔ D3
Nu este obligatoriu ca pinii vectoriali s ă aib ă aceea și dimensiune: ABUS[15:0]
ABUS10 ABUS2
ABUS8 DBUS5 DBUS3 DBUS1
DBUS7 ABUS1
ABUS9 ABUS2
ABUS5
DBUS1
DBUS3 ABUS0
ABUS9
ABUS10 DBUS0
DBUS6
ABUS15 ABUS11 ABUS4
ABUS8 ABUS6 ABUS3
DBUS6 ABUS6
ABUS7 ABUS1
DBUS7
ABUS12 ABUS9 U1
Z80-CPU 30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
14
15
12
8
7
9
10
13 27
19
20
22
21
28
18
24
16
17
26
25
23
6A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
D0
D1
D2
D3
D4
D5
D6
D7 M1
MREQ
IORQ
WR
RD
REFSH
HALT
WAIT
INT
NMI
RESET
BUSRQ
BUSAK
CLK DBUS0 DBUS4 ABUS2
ABUS5
ABUS7 DBUS3
ABUS5
DBUS6 DBUS2 DBUS1
DBUS7
DBUS4 DBUS2 U3
2016 8
7
6
5
4
3
2
1
23
22
19
18
20
21 9
10
11
13
14
15
16
17 A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
CE
OE
WE D0
D1
D2
D3
D4
D5
D6
D7 ABUS6
ABUS14 DBUS0
DBUS2 U24
2016 8
7
6
5
4
3
2
1
23
22
19
18
20
21 9
10
11
13
14
15
16
17 A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
CE
OE
WE D0
D1
D2
D3
D4
D5
D6
D7 ABUS3
ABUS4
DBUS5
BUS[7:0] ABUS4 DBUS4
DBUS5 ABUS1
ABUS13 ABUS3 ABUS0
ABUS10 ABUS8 ABUS7 ABUS0
D[3:0] S[3:0] BUS[3:0]

24
S0 ⇔ BUS0 ⇔ D0
S1 ⇔ BUS1 ⇔ D1
S2 ⇔ BUS2
S3 ⇔ BUS3
Nici direc ția pinilor sau a magistralei nu este obligatoriu ac eea și. Singura regul ă este regula de la
dreapta la stânga:
S3 ⇔ BUS0 ⇔ D0
S2 ⇔ BUS1 ⇔ D1
S1 ⇔ BUS2 ⇔ D2
S0 ⇔ BUS3
In figura urm ătoare este redesenat ă schema de cuplare a primului modul de memorie din figura 21. În
loc de a conecta adresele și datele prin fire s-a utilizat tehnica pinilor vec toriali si a magistralelor.

Cei 16 pinii de adres ă ai procesorului au fost înlocui ți cu pinul vectorial A[15:0] iar cei 12 pini de
adres ă ai memoriei au fost înlocui ți de pinul vectorial A[11:0]. Conectarea adreselor procesor la
adresele memoriei se face prin intermediul magistra lei AB[15:0]. În figur ă se observ ă conexiunea
uP.A[15:0] ⇔ AB[15:0] ⇔ ROM.A[11:0]. Aceast ă conexiune vectorial ă este echivalent ă cu
urm ătoarele conexiuni simple: D[1:0] S[3:0] BUS[3:0]
D[2:0] S[0:3] BUS[3:0]
RD# uP_2
A[15:0]
D[7:0] WR# RD# AB[15:0]
ROM_2
I2732 OE# A[11:0]
D[7:0] CE#
WR#
DB[7:0]

25
uP.A0 ⇔ AB0 ⇔ ROM.A0 uP.A8 ⇔ AB8 ⇔ ROM.A8
uP.A1 ⇔ AB1 ⇔ ROM.A1 uP.A9 ⇔ AB9 ⇔ ROM.A9
uP.A2 ⇔ AB2 ⇔ ROM.A2 uP.A10 ⇔ AB10 ⇔ ROM.A10
uP.A3 ⇔ AB3 ⇔ ROM.A3 uP.A11 ⇔ AB11 ⇔ ROM.A11
uP.A4 ⇔ AB4 ⇔ ROM.A4 uP.A12 ⇔ AB12
uP.A5 ⇔ AB5 ⇔ ROM.A5 uP.A13 ⇔ AB13
uP.A6 ⇔ AB6 ⇔ ROM.A6 uP.A14 ⇔ AB14
uP.A7 ⇔ AB7 ⇔ ROM.A7 uP.A15 ⇔ AB15
Se observ ă cum o singur ă conexiune vectorial ă a înlocuit 16 conexiuni simple f ăcând desenarea mult
mai u șoar ă.

Similar Posts