Sunteți pe pagina 1din 23

Microprocesoare, microcontrolere Prelegere 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 intefa hardware/software. n implementarea cu mai multe cicluri de ceas se folosete un singur bloc de memorie, att pentru cod ct i pentru date. Capacitatea de memorare a acestui bloc este de 4GB. Implementarea cu mai multe cicluri este de tip Von Neumann. Deoarece aspectele legate de arhitectura i organizarea MIPS sunt rezolvate, dorim o implementare cu ct mai puine circuite integrate, ideal unul singur. Considernd soluiile de implementare posibile ASIC sau FPGA ajungem la concluzia c putem implementa pe un singur chip tot sistemul, mai puin blocul de memorie. Acest fapt se datoreaz n principal limitrilor tehnologice: de exemplu cel mai avansat procesor disponibil este alctuit din aproximativ 500 de milioane de tranzistoare. Un bloc de memorie de 4GB, considernd ca este suficient un singur tranzistor per bit, are 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 reui integrarea ntregului bloc de memorie, o astfel de soluie ar avea un pre foarte ridicat. n practic exist ns multe aplicaii care au nevoie doar de civa zeci de KB de memorie. Dac ar exista numai chip-uri cu 4GB de memorie, o aplicaie care are nevoie doar de civa zeci de KB ar costa nejustificat de mult. n acest caz o soluie scalabil ar fi mult mai potrivit. Un exemplu de soluie scalabil l constituie calculatoarele compatibile IBM PC. Un astfel de sistem are memoria implementat pe plcue DIMM cu diverse capaciti de memorare. Utilizatorul i alege configuraia n funcie de aplicaiile pe care le va rula i de preul pe care i-l poate permite, dar are oricnd posibilitatea unei extensii ulterioare. Un al treilea motiv care pledeaz mpotriva integrrii 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 att memorie fix (PROM, EPROM, FLASH) pentru a memora secvena de iniializare (Boot) i, eventual, programul de aplicaie ct i memorie volatil (RAM) pentru variabile. Problema este c raportul ROM/RAM depinde de tipul aplicaiei pentru care a fost construit sistemul. Un sistem de uz general, cum este un PC, are nevoie de foarte puin ROM i de mult RAM. Tipic, ntr-un PC exist 128KB ROM pentru BIOS i 1-4GB de RAM. Un sistem dedicat cum este calculatorul unui automobil are nevoie de mult ROM i puin RAM. Datorit celor trei motive expuse anterior soluia cea mai bun 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 integrare actual permite integrarea procesorului pe un singur chip. n schimb blocul de memorie va fi alctuit din mai multe circuite integrate. n figura 1 procesorul se Figure 1 conecteaz cu blocul de memorie prin intermediul a 64 de linii de date. Este de dorit ca numrul de conexiuni ntre cele dou blocuri s fie ct mai mic deoarece un 1

numr mare de conexiuni nseamn chipuri cu muli pini, ceea ce implic dimensiuni mari. Este de dorit ca un circuit s fie prevzut cu ct mai puine ieiri i de aici soluia conectrii printr-un numr ct mai mic de semnale. n cazul schemei din figura 1 cele dou conexiuni de date unidirecionale se pot nlocui cu o singur conexiune bidirecional. Astfel rezult schema din figura 2. Reducerea numrului de pini att pentru procesor ct i pentru memorie se face pe seama unei creteri minore a complexitii driverelor de ieire aferente pinilor de date. Pentru a se putea executa att scrierea memoriei ct i citirea acesteia, driverele trebuie s fi de tip 3-state, att n procesor ct i n memorie. Processor Memory Aceast schema bloc este valabila n cazul oricrui procesor, nu numai Address Bus Address Address pentru MIPS. Comunicaia ntre procesor i memorie se face prin intermediul a mai multor conductori electrici: fire sau trasee de cablaj. Mai muli conductori prin intermediul Data Bus Data Data crora se transmite informaie de acelai fel se numete magistral. Control Bus Transferul datelor ntre procesor i RD# RD# memorie se face prin intermediul WR# WR# magistralei de date. Locaia de Figure 2 memorie cu care se face transferul este identificat prin adres. Adresa se transmite de la procesor la blocul de memorie prin intermediul magistralei de adres. Tipul transferului (scriere n memorie sau citire din memorie de exemplu) ct i alte informaii se precizeaz prin intermediul magistralei de control. Intr-o prim aproximaie magistrala de control va conine dou semnale, RD# i WR# (fig. 2). Dac RD# = 0 i WR# =1, operaia iniiat de procesor este de citire memorie, iar dac RD# = 1 i WR# =0, operaia iniiat de procesor este de scriere memorie. Dac att RD# ct i WR# sunt 1, procesorul nu folosete memoria deoarece execut activiti interne. Se poate imagina i o soluie cu un singur semnal de control, de exemplu RWC (read-write control): RWC=1 nseamn citire din memorie iar RWC=0 scriere. Aceast soluie, dei este mai simpl i poate mai intuitiv, implic faptul c memoria este forat tot timpul s execute fie citire, fie scriere. Implicaii acestui fapt sunt neplcute, ceea ce se va demonstra ulterior. Totalitatea adreselor pe care le poate genera procesorul pe pinii de adrese se numete spaiu de adrese procesor. Procesorul, ca parte a unui calculator Von Neumann, tie c la fiecare adres generat exist o locaie i c fiecare locaie are o adres. Nu exist adres fr locaie, i nici locaie cu mai multe adrese! La o adres procesorul poate executa dou operaii: citirea locaiei de la acea adres i scrierea n locaia de la adresa respectiv. n prezent procesorul este implementat cu un singur circuit integrat i din acest motiv se mai numete microprocesor. Modulul de tip memorie. In fig.1 este prezentat schema de principiu a unui modul de memorie, schem ce nu ine seama de tipul modulului sau de modul n care respectivul modul este realizat tehnologic. Din punct de vedere logic un modul de memorie poate fi privit ca o mulime de locaii, locaii ce se vor numi n continuare locaii de memorie. Oricare locaie din interiorul modulului de memorie poate fi scris sau citit. Tipul operaiei efectuate asupra unei locaii, scriere sau citire, se specific prin intermediul pinilor RD# (read) i WR# (write). Locaia ce va fi citit sau scris este stabilit n mod univoc de valorile logice de pe pinii de adres ai modulului de memorie, Am-1- A0. Prin intermediul acestor pini se precizeaz adresa locaiei n cadrul modulului. Aceast adres genereaz numrul locaiei: locaia 0 este adresat cnd pinii de adresa ai modulului au valoarea Am-1 - A0 =000, locaia 1 este adresat cnd Am-1- A0=001, etc. S nu se confunde 2

aceast adres cu adresa generat de procesor alocat locaiei n procesul de mapare, aa m cum se va vedea imediat. Numrul de locaii de memorie din interiorul modulului este 2 , unde m este numrul de linii de adres. Fie k locaia selectat prin intermediul pinilor de adres. Citirea celulei k nseamn transferul informaiei memorate n locaia k pe pinii D0-Dn-1. n cazul citirii aceste linii sunt ieiri din modulul de memorie. Scrierea locaiei k nseamn transferul informaiei prezente pe pinii D0-Dn-1 n locaia k; n acest caz liniile de date sunt intrri. Capacitatea de memorare a m unui modul de memorie se specific cu formula CM=2 x n, adic respectivul modul este m alctuit din 2 locaii, fiecare locaie fiind alctuit din n bii. Din descrierea fcut n paragraful anterior rezult c pinii de date, D0-Dn-1, sunt bidirecionali, adic la fiecare pin Di se conecteaz intern o ieire, pentru a putea citii informaia din locaia precizat prin intermediul adresei, i o intrare, pentru a putea scrie informaia n respectiva locaie, ca n figura 3b.

ADDRESS LINES

. . . .

Am-1 . . . A1 A0

DATA LINES

Dn-1 . . . . D1 D0

CS# RD# WR#

DOk DIk

CS# RD# WR#


a) b)

. . . . Dk . . . .

Figure 3 Semnalul CS# (Chip Select, # - activ 0) controleaz activarea modulului: dac CS# este inactiv nu se face nici scriere, nici citire, coninutul tuturor locaiilor rmnnd neschimbat. De asemenea, semnalul CS# controleaz starea repetoarelor 3-state : dac CS# este inactiv (1 logic), acestea sunt n starea de impedan ridicat. Blocarea acestor repetoare este necesar pentru a se putea efectua transferul bidirecioanal procesormemorie sau memorieprocesor, aa cum s-a explicat urmtor. n concluzie, funcionarea modulului este controlat de semnalele RD# (read), WR# (write) i CS#. n funcie de starea acestor semnale sunt posibile trei moduri de lucru, descrise n tabelul urmtor. CS# 0 0 0 0 1 RD# 0 1 0 1 x WR# 1 0 0 1 x READ - Citire locaie WRITE - Scriere locaie IDLE (Inactiv) la unele module se face scriere IDLE IDLE Mod

Numele semnalelor de control nu sunt standardizate. Astfel, n loc de CS# se folosete CE# (Chip Enable), RD# este sinonim cu OE# (Output Enable) iar WR# este sinonim cu WE# (Write Enable). Obs: n starea IDLE consumul de putere al modulului este o cincime din consumul n strile READ sau WRITE.

OR

Blocul de memorie. Pentru a realiza blocul de memorie trebuie ca fiecare locaie de memorie s primeasc o adres din spaiu de adrese procesor. n scop didactic, vom considera un exemplu de jucrie: un procesor cu 4 pini de adres i module de memorie de tipul celor descrise n subcapitolul anterior. Fiecare modul este alctuit din 4 locaii de memorie. Astfel un modulul cu 4 locaii de memorie are 2 pini de adres. n cadrul acestui exemplu, blocul de memorie va fi alctuit din dou module. Dac unei locaii de memorie i se aloc o singur adres procesor vor rmne 8 adrese procesor nealocate. Aceast situaie este foarte frecvent, aa cum se ntmpl n cazul calculatoarelor compatibile IBM PC: sunt puine configuraii cu 4GB de memorie.
Address Bus: BA[3:0] Blocul de memorie AP[3..0] AM0 AM1.1 AM1 CE1# CE# RD# WR# OE# WE# AM1.0 AM0 AM2.1 AM1 CE2# CE# OE# WE# AM2.0

Data Bus
Figure 4

Pentru a realiza blocul de memorie compus din dou module de memorie cu 4 locaii vom conecta mai nti pinii de date procesor la pinii de date memorie. Astfel procesorul are asigurat calea de scriere i citire cu cele dou memorii. Aceste conexiuni formeaz magistrala de date din figura 4. In continuare trebuie realizate conexiunile de control pentru ca cele dou memorii s poat executa citirea i scrierea sub comanda procesorului. Pentru aceasta se conecteaz RD# procesor cu OE#-urile celor dou memorii i WR# procesor cu WE#-urile memoriilor. Pasul urmtor const n alocarea adreselor generate de procesor la locaiile de memorie din cele dou module. Exist o multitudine de posibiliti de alocare, echivalente ntre ele, dar cea mai natural este alocarea la rnd: adresa procesor 0000 se aloc locaiei 00 din modulului 1 (figura 4), adresa 0001 locaiei 01 din modulul 1, 0010 la 10 i 0011 la 11. Dup ce toate locaiile din modulul 1 au primit adrese, se continu cu modulul 2: adresa 0100 se aloc locaiei 00 din modulul 2 etc. Aceast alocare este reprezentat grafic n figura 5.

AP[3:0] 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Figure 5

Modul 1 AM[1:0] 00 01 10 11 Modul 2 AM[1:0] 00 01 10 11

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

CE1#

AM1.1 AM1.0 CE2#

AM2.1 AM2.0

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

0 0 1 1 x x x x x x x x x x x x

0 1 0 1 x x x x x x x x x x x x

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

x x x x 0 0 1 1 x x x x x x x x

x x x x 0 1 0 1 x x x x x x x x

n momentul n care o adres procesor se aloc unei locaii de memorie trebuie ca CE#-ul modulului de memorie cruia i aparine respectiva locaie s fie activ. Reamintim c scrierea i citirea unei locaii de memorie se poate face numai dac CE#-ului respectivului modul este activ (0-logic). De exemplu, dac adresa procesor 0000 se aloc locaiei 00 din modulul 1, atunci cnd pe magistrala de adrese apare combinaia 0000, pe pinii de adres ai modulului 1 de memorie trebuie s apar 00 iar CE#-ul modulului 1 trebuie s fie 0 logic. Dac o adres nu a fost alocat unui modul, atunci cnd 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 din cauza lui CE#. Dac aplicm acest raionament pentru adresele alocate conform figurii 5 obinem tabelul alturat acestei figuri. Acest tabel nu este altceva dect o tabel de adevr pentru funciile CE1#, AM1.1 , AM1.0, CE2#, AM2.1 i AM2.0. Aceste funcii se pot implementa folosind metodele clasice de sintez logic. Astfel rezult schema din figura 6. Address Bus: BA[3:0]

AP[3..0] AM0 AM1.1 AM1 SLC1 CE1# CE# AM1.0 AM0 AM2.1 AM1 SLC2 CE2# CE# AM2.0

WR#

WE#

WE#

Data Bus
Figure 6

n acest caz sinteza acestor funcii este foarte simpl deoarece se observ c atunci cnd AP[3:2]=00 AM1.0 este identic cu AP0. Deoarece pentru restul combinaiilor AM1.0 este x, cea mai simpla form posibil pentru AM1.0 este AP0. n mod asemntor se observ c AM1.1=AP1, AM2.0=AP0 i AM2.1=AP1. Putei verifica folosind minimizarea! Prin minimizare sau prin observaie rezult c CE1# = AP3+AP2 iar CE2# = AP3+ !AP2. Dac n exemplu de mai sus funciile pentru adresele modulelor de memorie i pentru CE# sunt foarte simple nu acelai lucru se ntmpl n alte situaii. n general, pentru blocul de memorie se admite ca: la o adres generat de procesor s nu existe locaie de memorie; o locaie de memorie s aib mai multe adrese n spaiu de adrese procesor; s existe locaii de memorie fr adres n spaiu de adres procesor. O alocare n care apar toate cele 3 situaii este prezentat n figura 7, iar tabela de adevr pentru adrese i CE# n tabelul alturat figurii.
AP[3:0] 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Figure 7

Modul 1 AM[1:0] 00 01 10 11

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

CE1#

AM1.1

AM1.0

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

x 0 x x x 0 x x x x 0 1 x x x x

x 0 x x x 1 x x x x 1 1 x x x x

Dac se minimizeaz AM1.1, AM1.0 i CE1# rezult urmtoarele forme: CE1# = AP1 * AP0 + AP3 * AP 2 + AP3 * AP1 + AP3 * AP1 AM 11 = AP1 * AP0 AM 10 = AP3 + AP 2 Se observ c aceste forme sunt mult mai complicate, observaie care ridic urmtoare ntrebare: n ce condiii se obin cele mai simple forme pentru adresele i CE# -ul unui modul de memorie? n cazul cel mai general vom considera module de memorie cu m pini de adres, AM0-AMm-1, i un procesor cu n pini de adres: AP0-APn-1. Cele mai simple forme pentru funciile AM[m-1, 0] sunt cele din figura 5. n acest caz AM0=AP0, AM1=AP1,. AMm=APm. Pentru a obine aceste forme trebuie respectate mai multe condiii. Prima condiie pe care o vom impune este ca fiecare locaie de memorie s primeasc o singur adres procesor. Vom vedea ulterior c aceast condiie se poate relaxa. Pentru a deduce restul condiiilor vom face urmtorul raionament: dac AM0=AP0, AM1=AP1,. AMm=APm atunci aceste egaliti se vor respecta pentru orice valoare particular a lui AM[m-1, 0]. Pe baza acestei observaii, rezult urmtoarea tabel de adevr:

APn-1 APm APm-1 x x x x x . . . x x xx xx xx xx xx . . . xx xx x x x x x . . . x x 0 0 0 0 0 . . . 1 1 00 00 00 00 01 . . . 11 11

A P1 0 0 1 1 0 . . . 1 1

AP0 AMm-1 0 1 0 1 0 . . . 0 1 0 0 0 0 0 . . . 1 1 00 00 00 00 01 . . . 11 11

AM1 0 0 1 1 0 . . . 1 1

AM0 0 1 0 1 0 . . . 0 1

Echivalent zecimal 0 1 2 3 4

2 -1 2m-1

m-1

Din tabel se observ c locaia de memorie cu numrul cel mai mic (cea mai mic adres n cadrul modulului), i anume 0.00b=0, primete o adres procesor care se termin n m de zero. O astfel de adres este un multiplu de 2m (k*2m ). n exemplu de jucrie adresele multiplu de 2m, m= 2, sunt 0=0000, 4-0100, 8= 1000 i 12= 1100. Pe baza acestor observaii se poate enuna cea de-a doua regul: locaia de memoria zero m primete o adres procesor care este multiplu de 2 . n continuare vom analiza valorilor atribuite biilor APn-1 - APm, notate cu x n tabelul de mai sus. Oricare ar fi aceste valori funciile AM rmn aceleai. Astfel, n exemplul de jucrie din figura 5 am putea face maparea 0000 00, 0101 01, 1010 10, 1111 11. Dei vom obine tot AM0=AP0 i AM1=AP1, apare un efect de care trebuie inut seama: adresele procesor alocate locaiilor de memorie nu mai sunt adiacente. Acest fapt face imposibil plasarea programelor ntr-un sistem care folosete o astfel de mapare. Dac procesorul este prevzut cu numrtor de program, atunci trebuie ca instruciunea urmtoare s se afle la adresa urmtoare. Aceasta condiie nu este ndeplinit n cazul maprii de mai sus. De asemenea o astfel de mapare face imposibil alocarea vectorilor. Alocarea vectorilor necesit i ea o zon de memorie continu. Aceste dou motive impun o a treia condiie: toate adresele procesor alocate unui modul de memorie trebuie s fie contigue: dac adresa alocat locaiei de memorie 0 este AP[n-1:0]=cp-1cm 0.00, atunci locaia 1 va primi adresa procesor urmtoare, adic cp-1cm 0.01, locaia 2 va primi cp-1cm 0.10 iar ultima locaie de memorie, 1.11 va primi adresa procesor adic cp-1cm 1.11. n general, dac locaia zero primete adresa procesor k*2m, atunci locaia 1 primete adresa procesor k*2m+1, locaia 2 primete adresa procesor k*2m+2, .a.m.d. Ultima locaie de memorie, i anume locaia 2m-1 i primete adresa procesor k*2m+2m-1= (k+1)*2m-1. Altfel spus, a treia condiie cere ca locaiile de memorie s primesc adrese procesor la rnd, adic contiguu i cresctor. Recapitulnd, condiiile ca AM0=AP0, AM1=AP1,. AMm=APm sunt: 1. Fiecare locaie de memorie primete o singur adres procesor; 2. Locaia de memoria zero primete o adres procesor care este multiplu de 2m 3. Celelalte locaii de memorie primesc adrese procesor la rnd (contiguu i cresctor). Aceste trei reguli conduc la urmtoarea abordare practic: spaiul de adrese procesor se mparte n blocuri egale ca mrime cu numrul de locaii din modulul de memorie - 2m. Fiecare bloc de adrese procesor ncepe la un multiplu de 2m. Celor 2m locaii de memorie li se aloc un bloc contiguu de 2m adrese procesor, prima adres din acest bloc fiind un multiplu de 2m. Dac se procedeaz astfel, atunci: AM0=AP0, AM1=AP1, ..., AMm-1=APm-1 CE# nu depinde de biii inferiori ai adresei APm-1-AP0. CE# este o funcie 7

maxtermen de variabilele APn-1-APm i se poate implementa uor o poart OR sau cu un DEC. Acest tip de decodificare se numete complet. Blocul logic care implementeaz toate funciile CE# dintr-un sistem de calcul formeaz decodificatorul de adres. Decodificarea complet In cazul decodificrii complete, pentru un modul de memorie, se procedeaz dup cum urmeaz: pinii de adres ai procesorului se divid n dou grupe. Prima grup este constituit din pinii de adres cu indice inferior (A0, A1, A2 etc.). Numrul liniilor din aceast grup este egal cu numrul pinilor de adres al respectivului modul de memorie. Aceti pini se interconecteaz astfel: A0 procesor-A0 memorie; A1 procesor-A1 memorie; A2 procesor-A2 memorie; .. A doua grup este constituit din restul liniilor de adres. Din aceste semnale se sintetizeaz funcia de selecie (CE#). In figura 8 se d un exemplu pentru p=16. Se cere maparea unui modul EPROM de 4KB, tip I2732, ncepnd de la adresa 0000h i a unui modul SRAM de 8KB, tip IDT7164, ncepnd de la adresa 8000h. Pentru modulul EPROM calculm numrul de pini de adres ai modulului EPROM: 4K= 4*210 = 22*210=212. Pentru 4K avem nevoie de 12 adrese: A0-A11. In continuare 12 verificm dac adresa procesor de la care ncepe alocarea este multiplu de 2 . Adresa procesor 0000h ndeplinete aceast condiie. n continuare mprim semnalele de adres generate de procesor n cele dou grupe, conform tabelului urmtor: A15 0 A14 0 A13 0 A12 0 0000h = 0000 0000 0000 00002 A11-A0 0....0

Conform raionamentului anterior Ai procesor se conecteaz la Ai memorie, i=1..11. Funcia de selecie se va sintetiza din biii superiori ai adresei: A15, A14, A13 i A12. CE#EPROM trebuie s fie 0 logic cnd A[15:12] procesor sunt toate 0. Implementarea este fcut prin intermediul porii OR4 din poziia U1 din figura 8. In tabelul alturat figurii se construiete harta de alocare a resurselor: ntre adresele 0000h i 0fffh se afl mapat, proiectat, modulul EPROM.
uP_1

A[15:0] AB12 AB13 AB14 AB15

AB[15:0] ROM_1 A[11:0] U1 U3 AB15 AB14 AB13 RAM_2 A[12:0]

A000- FFFF

Nealocat

8000 9FFF
U2 CE# RD# WR# D[7:0] I2732 DB[7:0] RD# WR# RD# D[7:0] WR# OE# CS1# RD# WR# D[7:0] IDT7164 1

SRAM

CS2

1000-7FFF

Nealocat

0000 FFFF

EPROM

Figure 8

Pentru modulul SRAM procedm asemntor. Mai nti calculm numrul de pini de adres ai modulului RAM: 8K= 8*210 = 23*210=213. Pentru 8K avem nevoie de 13 adrese: A08

A12. In continuare verificm dac adresa procesor de la care ncepe alocarea este multiplu 13 de 2 . Adresa procesor 8000h ndeplinete aceast condiie. n continuare mprim semnalele de adres generate de procesor n cele dou grupe, conform tabelului urmtor: 8000h = 1000 0000 0000 00002 A15 A14 A13 A12-A0 1 0 0 0....0 Conform raionamentului anterior Ai procesor se conecteaz la Ai memorie, i=1..12. Funcia de selecie se va sintetiza din biii superiori ai adresei: A15, A14 i A13. CE#SRAM trebuie s fie 0 logic cnd A[15:12] procesor sunt 100. Implementarea este fcut prin intermediul porilor U2 i U3 din figura 8. In tabelul alturat figurii se completeaz harta de alocare a resurselor: ntre adresele 8000h i 9fffh se afl mapat (proiectat) modulul SRAM. Decodificarea incomplet. n marea majoritate a cazurilor n care este necesar plasarea de module de memorie n exteriorul microprocesorului numrul acestora este mic, unu sau dou. De exemplu, n cazul a dou module de memorie, este suficient o singur adres pentru a face departajarea celor dou module. n acest caz condiia ca o locaie s primeasc o singur adres este nclcat. n figura 9 este reluat exemplul de la decodificarea complet: se cere maparea unui modul EPROM de 4Ko, tip I2732, ncepnd de la adresa 0000h i a unui modul SRAM de 8Ko, tip 6164, ncepnd de la adresa 8000h. EPROMUL se va selecta pentru toate adresele procesor ce au A15=0, iar SRAM-ul pentru toate adresele cu A15=1. Astfel locaiei zero din EPROM i se vor aloca toate adresele de forma: 0xxx 0000 0000 0000:
0 0 0 0 . . 0 000 001 010 011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 = = = = 0000h; 1000h; 2000h; 3000h;

111 0000 0000 0000 = 7000h;

Se observ c locaia zero EPROM primete 8 adrese master. Cum acest lucru este valabil pentru orice locaie EPROM, rezult c EPROM-ul este proiectat de 8 ori n spaiul de adrese al procesorului. O analiz asemntoare duce la concluzia c i modulul SRAM este proiectat de mai multe ori (de 4 ori). Maparea celor dou module este prezentat n tabelul alturat figurii 9.
uP_2

A[15:0]

AB[15:0] ROM_2 A[11:0] AB15 RAM_3 A[12:0]

AB15 RD# WR# D[7:0] RD# WR#

CE# OE#

CS2 CS1#

RD# D[7:0] I2732 DB[7:0] WR#

RD# WR# D[7:0] IDT7164

0000-0FFF 1000-1FFF 2000-2FFF 3000-3FFF 4000-4FFF 5000-5FFF 6000-6FFF 7000-7FFF 8000-9FFF A000-BFFF C000-DFFF E000-FFFF

EPROM EPROM EPROM EPROM EPROM EPROM EPROM EPROM SRAM SRAM SRAM SRAM

Figure 9

Concluzie: n cazul decodificrilor incomplete un modul de memorie este proiectat n spaiul 9

de adrese procesor de 2 la puterea numrului de adrese de care nu se ine seama la implementarea funciei de selecie a respectivului modul. n exemplul din figura 9 la implementarea seleciei EPROM-ului nu s-a inut cont de adresele A14, A13 i A12, iar la implementarea seleciei SRAM-ului de A14 i A13. Deci EPROM-ul va fi proiectat n spaiul de adrese al procesorului de 23 ori iar SRAM-ul de 22 ori. Aceast modalitate de decodificare simplific implementarea funciilor de selecie. n figura 9 implementarea a necesitat doar un inversor. Decodificarea incomplet nu provoac nici un inconvenient pentru dezvoltatorul de programe (softistul). Acesta trebuie s scrie programele lund n considerare numai o singur proiecie (de regul cea de la adresa cea mai mic), i s ignore restul proieciilor. La adresele ce corespund celorlalte proiecii se va considera c nu exist locaii. n acest fel, la nivel soft, nu va exista nici o deosebire ntre decodificarea incomplet i cea complet. Decodificarea parial. n multe aplicaii este posibil s se dispun de module slave care conin un numr de locaii mai mare dect numrul necesar pentru o aplicaie specific. n exemplu din figura 6 sunt necesari 4Ko de locaii tip EPROM dar s-a folosit un modul EPROM de tip 27256, cu organizare 32Kx8 (32KB). Sinteza funciei de selecie a fost fcut ca n cazul decodificrii complete. Din cei 32KB sunt folosii numai 4KB. Cei 4KB sunt proiectai n spaiul de adrese 0000-0FFFh. Liniile de adres suplimentare, A12-A14, sunt legate la zero logic. n cazul unei decodificri pariale liniile de adres suplimentare nu se las niciodat neconectate (n aer)! Dac modulul slave decodificat parial este de tip memorie fix 2 (PROM, EPROM, E PROM, FLASHPROM) trebuie inut seama de valorile logice la care se conecteaz liniile de adres suplimentare, pentru a programa (arde) corect modulul. Not: pentru detalii privind modul comprimat de desenare al schemelor vezi slide-urile din fiierul 1master.ppt.
uP_1

A[15:0] AB12 AB13 AB14 AB15

AB[15:0] ROM_1 A[11:0] U1 '0' '0' '0' A12 A13 A14 CE# U2 1 AB15 AB14 AB13 RAM_2 A[12:0]

U3

RD# WR# D[7:0]

RD# WR#

CS2 CS1#

OE# RD# D[7:0] I27256 DB[7:0] WR# RD# WR# D[7:0] IDT7164

Figure 10 Locaie de intrare/ieire (port), interfee de intrare/ieire Modelul Von Neumann nu precizeaz nimic despre modul n care se face transferul de date cu exteriorul. Conform acestui model, sistemul de calcul trebuie s conin o reuniune de locaii, fiecare locaie fiind identificat prin intermediul adresei sale. Fiecare locaie poate fi scris sau citit. Aceast reuniunea de locaii este folosit pentru memorarea programului i a datelor i se numete memorie. Implementarea blocului de memorie s-a fcut cu module de memorie datorit capacitii mari a acestor module. Dar folosirea modulelor de memorie nu reprezint singura posibilitate. O singur locaie de memorie poate fi implementat cu un registru paralel-paralel 10

plus drivere 3-state, ca n figura 11.


SLC ADRESS BUS A=i RD# WR# WR#=0 WR#=1 RD#=1 RD#=0 PROCESSOR CL KPP

VCC

0
Reg. P-P 1 11 D0 3 D1 4 D2 7 D3 8 D4 13 D6 D5 14 D7 17 D8 18 G CL K 1D 1Q 2D 2Q 3D 3Q 4D 4Q 5D 5Q 6D 6Q 7D 7Q 8D 8Q U1 OETS D 2 Q0 5 6 9 12 15 16 19

8x 3-state drivers OE A0 A1 A2 A3 A4 A5 A6 A7 U2 DATA BUS Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 D0 D1 D2 D3 D4 D5 D6 D7

Figure 11

S presupunem c dorim s alocm acestei locaii adresa procesor i. nscrierea n registru se face cnd pe magistrala de adrese este prezenta combinaia i i semnalul WR# = 0. Citirea datelor din registru se face prin intermediul a 8 repetoare 3-state grupate n circuitul U2. Validarea repetoarelor 3-state care permit citirea se face cnd pe magistrala de adrese este prezenta combinaia i i semnalul RD# = 0. Este evident c o astfel de soluie nu este practic, deoarece numrul de module folosite este enorm; un bloc de memorie de 1Kx8 ar necesita 2048 de module plus logica de decodificare. Exist ns un mare avantaj al acestei soluii: datele nscrise n locaia de la adresa i sunt disponibile n orice moment pe pinii Q ai registrului i pot fi folosite n exterior, n diverse scopuri. n exemplul din figura 11 pinul Q0 este folosit pentru a aprinde sau stinge un LED.
ADRESS BUS VCC SLC VCC PROCESSOR MEMORY ..........
19 16 15 12 9 6 5 2 11

RD# WR# A=i S1 WR#=0 WR#=1 RD#=1 RD#=0 U1 I1


G

18 17 14 13 8 7 4 3

RD# WR#

8D 7D 6D 5D 4D 3D 2D 1D

8Q 7Q 6Q 5Q 4Q 3Q 2Q 1Q CLK

I2

I8

3-STATE ..........

D0

D1

D7

..........

D7 D6 D5 D4 D3 D2 D1 D0

DATA BUS

ADDRESS SPACE

last

Mlast

0 1

Figure 12

Soluia din figura 11 se poate aplica unui numr mic de adrese i rezolv problema generrii de informaie n exteriorul sistemului. Mai mult, schema sugereaz cum se poate soluiona problema citirii de informaie din exterior: se renun la conexiunile dintre ieirile registrului (nQ) i intrrile driverului 3-state (An), ca n figura 12. La fel ca n exemplul anterior datele nscrise n locaia de la adresa i vor controla starea anumitor semnale; de 11

exemplu, pot aprinde sau stinge LED-uri. n schimb citirea de la adresa i ne va permite accesul la starea intrrilor repetoarelor 3-state, nu la informaia stocat n registrul paralelparalel. De exemplu, n urma executrii instruciunii MOV A,i (adresare direct) n acumulator se va afla o copie a intrrilor I1..I8. In figura 12 intrarea I1 este folosit pentru citirea strii unui contact. Citirea strii unor contacte mecanice este ideea ce st la baza realizrii tastaturii. Spre deosebire de o locaie de memorie, n majoritatea cazurilor ceea ce scriem la adresa i nu va fi identic cu ceea ce citim de la adresa i: seriem n registru i citim comutatore. Este evident c locaia de la adresa i nu se mai poate numi locaie de memorie. Definiia 1: Locaiile speciale folosite pentru transferul datelor din/n exteriorul mainii Von Neumann se numesc locaii de intrare/ieire sau, pe scurt, porturi. n general, n cadrul tiinei calculatoarelor, prin port se nelege conectorul plus protocolul prin care se realizeaz conexiunea dintre calculator i dispozitive aflate n exteriorul acesteia: imprimante, scanere, mouse, etc . Conform acestei definiii, conectorul prin care se fcea legtura de tip paralel (protocolul) ntre un PC i un periferic, de exemplu imprimant, se numea port paralel. PCurile se mai pot conecta dispozitive externe i prin conectori (+ protocoale) seriali, PS2 sau USB. Astfel apar denumiri ca port serial, PS2 sau port USB. Mai mult, portul nu conine neaprat un dispozitiv fizic: tot la PC-uri ntlnim noiune de port TCP. n cadrul disciplinei Microprocesoare se aplic definiia 1, adic un port este o locaie folosit pentru transferul I/O. Porturile micro se clasific dup cum urmeaz: Porturi de ieire. Un port de ieire este o locaie folosit pentru transferul informaiei spre exterior. Dac n exemplul din figura 11 se renun la repetoarele 3-state, vom obine un port de ieire. n majoritatea cazurilor porturile de ieire conin elemente de memorare. Este greit s se spun c un port de ieire este implementat cu un registru paralel-paralel. Un port de ieire se poate implementa cu un registru paralel-serie sau cu un singur bistabil. nscrierea datelor n locaia i se face cu o instruciune de tipul SW Rt, offset(RS) MIPS sau MOV adr_port_out, A la x86. la

Citirea unui port de ieire nu are sens deoarece lipsesc repetoarele 3-state, dar aceast operaie este posibil. Citirea unui port de ieire (MOV A, adr_port_out) va conduce la rezultate imprevizibile deoarece nici un dispozitiv fizic nu va fi selectat ca urmare a executrii acestei instruciuni. Porturi de intrare. Un port de intrare este o locaie folosit pentru transferul informaiei din afara mainii Von Neumann. Dac n exemplul din figura 12 se renun la registrul paralel-paralel, vom obine un port de intrare. n majoritatea cazurilor porturile de intrare conin repetoare 3-state (una sau mai multe). Citirea datelor din locaia i se face cu o instruciune de tipul LW Rt, offset(RS) sau MOV A, adr_port_in Scrierea unui port de intrare nu are sens deoarece lipsesc elementele de memorare, dar aceast operaie este posibil. Scrierea unui port de intrare (MOV adr_port_in, A ) nu va avea nici un efect.

12

Porturi bidirecionale. Acest caz a fost prezentat n figurile 11 i 12. Se reamintete c n situaiile ca cele din figura 8 ceea ce scriem n port nu va fi identic cu ceea ce citim din port.

Pentru a micora numrul de module necesare implementrii porturilor acestea se grupeaz n interfee de intrare/ieire (IN/OUT sau I/O).
DATA LINES ADDRESS LINES

Am-1 . . . A1 A0
. . . .

Dn-1 . . . . D1 D0 CS# RD# WR#

O interfa de I/O este alctuit din mai multe porturi de diverse tipuri plus logica aferent activitii specifice interfeei i este implementat pe un singur chip. Interfaa va fi prevzut cu chip select, pini de adres i pini de date la fel ca un modul de memorie. Conectarea cu procesorul se face la fel ca pentru modulele de memorie. Suplimentar, interfeele de I/O au terminale (pini) specifice funciei pe care o ndeplinesc. Aceste terminale pot fi de intrare, de ieire sau bidirecionale. De exemplu, o interfa serial va fi dotat cu pini specifici ca TxD, RxD, CTS, RTS, etc. n figura 13 este prezentat schema de principiu a unei interfee de I/O.

Interfeele de I/O funcioneaz dup aceleai tabele ca i modulele de memorie. Exist o deosebire: n starea IDLE coninutul tuturor locaiilor de memorie rmne Figure 13 neschimbat. La interfeele de I/O n starea IDLE coninutul locaiilor (porturilor) se poate modific sau nu n funcie de activitatea specific modulului. De exemplu, la o interfa serial se recepioneaz un caracter ce este memorat n registrul de recepie al interfeei. Decodificarea porturilor Decodificarea porturilor se face dup aceleai principii ca decodificarea modulelor de memorie: un port poate fi privit ca o memorie alctuit dintr-o singur locaie. Decodificarea complet sau incomplet se poate aplica i la porturi. n figura 11 s-a alocat portului adresa procesor i. nscrierea n registru se face cnd pe magistrala de adrese este prezent combinaia i i semnalul WR# = 0. Citirea se face cnd pe magistrala de adrese este prezenta combinaia i i semnalul RD# = 0. Pentru ambele operaii este necesar identificarea combinaiei i, deci trebuie o funcie care are valoarea logic 1 atunci cnd pe magistrala de adrese este prezent aceast combinaie i valoarea logic 0 n rest (sau invers). Aceast funcie este fie funcia mintermen i, fie funcia maxtermen i . Ca exemplu vom decodifica complet portul i din figura 11. Dac valoarea lui i este 8000h, maxtermenul M8000h are urmtoarea form: M8000h= A15 + A14 + A13 + A12 + A11 + A10 + A9 + A8 + A7 + A6 + A5 + A4 + A3 + A2 + A1 + A0 Implementarea lui M8000h se face cu inversorul U3A i poarta OR16 din figura 14. Semnalul care controleaz nscrierea n registrul paralele-paralel din poziia U1 se numete CLKPP#, are forma M8000 + WR# i este implementate n figura 14 prin intermediul porii OR2 cu referina U5A. Semnalul care controleaz citirea se numete OETSD#, are forma M8000+RD# i este implementat prin intermediul porii OR2 cu referina U6A.

OUT IN IO

13

A[15:0] 1 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 M8000 1 RD#

ADDRESS BUS

U3A

17 16 15 14 13 12 11 10

SLC ADRESS BUS A= i RD # WR # WR#=0 WR#=1 RD#=1 RD#=0

=
OETSD

CL KPP

1 1

U5A

WR#

Figure 14
CLKPP# OETSD# 1 19 2 3 4 5 6 7 8 9 BUS 19 16 15 12 9 6 5 2

8D 8Q 7D 7Q 6D 6Q 5D 5Q 4D 4Q 3D 3Q 2D 2Q 1D 1Q OC CLK

18 17 14 13 8 7 4 3 1 11

D0 D1 D2 D3 D4 D5 D6 D7

D[7:0]

DATA

Se observ c resursele folosite pentru decodificarea unui singur port sunt substaniale. Complexitatea se datoreaz implementrii maxtermenului M8000. Din acest motiv decodificarea complet a porturilor aproape c nu se folosete. Porturile se decodific n marea majoritate a cazurilor incomplet. Porturile se decodific n spaiul de adrese rmas liber dup maparea memoriei. Dac n exemplul din figura 11 nu este nevoie dect de 32KB de memorie, mapai ntre 0000h7fffh, zona de adrese 8000h-ffffh rmne pentru porturi. Dac n acest spaiu trebuie mapat un singur port, n decodificarea acestuia trebuie s se in seama doar de A15: A15=0 identific spaiul de adrese 0000h-7fffh, alocat memoriei iar A15=1 identifica spaiul alocat porturilor (de fapt portului). Formele funciilor CLKPP# i OETSD# devin: CLKPP # = A15 + WR # , OETSD # = A15 + RD # , adic dou pori OR2 i un inversor ar fi suficiente pentru implementare. n general ns sunt rare situaiile n care este necesar un singur port. Dac sunt necesare mai multe porturi, biii inferiori ai adresei sunt folosii pentru a selecta un anumit port. De exemplu, dac zona de adrese pentru porturi rmne 8000h-0FFFFh, dar in loc de un singur port trebuie mapate 4 porturi de ieire i 4 porturi de intrare, n logica de decodificare se va ine seama i de adresele A0 i A1. Formele funciilor de selecie sunt: Port 0, Output: CLKPP0 # = A15 + A1 + A0 + WR # Port 1, Output: CLKPP # = A15 + A1 + A0 + WR # 1 Port 2, Output: CLKPP2 # = A15 + A1 + A0 + WR # Port 3, Output: CLKPP3 # = A15 + A1 + A0 + WR # Port 0, Input: Port 1, Input: Port 2, Input: Port 3, Input:

OETSD0 # = A15 + A1 + A0 + RD # OETSD1 # = A15 + A1 + A0 + RD # OETSD2 # = A15 + A1 + A0 + RD # OETSD3# = A15 + A1 + A0 + RD #

Decodificarea fiind incomplet, oricare port din cele 8 (4 de OUT i 4 de IN) primete un numr de adrese procesor egal cu 2 la puterea numrului de adrese care nu intr n funcia de decodificare. n cazul nostru, n funcia de decodificare intr doar 3 adrese din 16: deci fiecare port primete 213 adrese. n mod uzual, adresa folosit n software pentru un port 14

D0 D1 D2 D3 D4 D5 D6 D7

18 17 16 15 14 13 12 11

OE1 OE2 Y0 A0 Y1 A1 Y2 A2 Y3 A3 Y4 A4 Y5 A5 Y6 A6 Y7 A7

U1 74LS374

9 8 7 6 5 4 3 2 U4 OR16 U6A

U2 74LS541

decodificat incomplet este cea mai mica dintre toate adresele alocate acelui port. De exemplu, porturile 0 att de IN ct i de OUT sunt selectate cnd pe magistrala de adrese este prezent una din combinaiile A15A0=1xxx xxxx xxxx xx00. Cea mai mic adres dintre acestea este cea pentru toate valorile x sunt 0, adic 8000h. Astfel, adresele folosite n software pentru sunt: Port 0, Output: Port 1, Output: Port 2, Output: Port 3, Output: 8000h 8001h 8002h 8003h Port 0, Input: Port 1, Input: Port 2, Input: Port 3, Input: 8000h 8001h 8002h 8003h
A[15:0] A15 WR# ADDRESS BUS

1 A0 2 A1 3 Z

6 4 U1 74LS138

CLKPP0# CLKPP1# D[7:0] D0 D1 D2 D3 D4 D5 D6 D7 D0 D1 D2 D3 D4 D5 D6 D7 D0 D1 D2 D3 D4 D5 D6 D7 CLKPP2#

15 14 13 12 11 10 9 7

Y0 G2B Y1 Y2 A Y3 B Y4 C Y5 Y6 G1 Y7 G2A

1 11 3 4 7 8 13 14 17 18

1 11 3 4 7 8 13 14 17 18

1 11 3 4 7 8 13 14 17 18

OC CLK 1Q 1D 2Q 2D 3Q 3D 4Q 4D 5Q 5D 6Q 6D 7Q 7D 8Q 8D

OC CLK 1Q 1D 2Q 2D 3Q 3D 4Q 4D 5Q 5D 6Q 6D 7Q 7D 8Q 8D

OC CLK 1Q 1D 2Q 2D 3Q 3D 4Q 4D 5Q 5D 6Q 6D 7Q 7D 8Q 8D

2 5 6 9 12 15 16 19

2 5 6 9 12 15 16 19

2 5 6 9 12 15 16 19

74HCT374 U2

74HCT374 U3

74HCT374 U4 OUTSIDE WORLD

74HCT374 U5

74HCT541 U6 9 8 7 6 5 4 3 2 19 1

74HCT541 U7 9 8 7 6 5 4 3 2 19 1

74HCT541 U8 9 8 7 6 5 4 3 2 19 1

A7 A6 A5 A4 A3 A2 A1 A0 OE2 OE1

A7 A6 A5 A4 A3 A2 A1 A0 OE2 OE1

A7 A6 A5 A4 A3 A2 A1 A0 OE2 OE1

Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0

Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0

Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0

OETSD1#

D011 D112 D213 D314 D415 D516 D617 D718

D011 D112 D213 D314 D415 D516 D617 D718

D011 D112 D213 D314 D415 D516 D617 D718

OETSD2# OETSD3# OETSD0# 15 14 13 12 11 10 9 7

1 2 3

Figure 15

Atenie: Dei att un port de OUT ct i un port de IN au aceeai adres, acestea se selecteaz ca urmare a executrii unor instruciuni diferite: n faza de execuie instruciunea STORE 8000h,R1 provoac scrierea n portul 0 de OUT a coninutului registrului R1 iar instruciunea LOAD R1,8000h provoac nscrierea n R1 a informaiei din exterior citite prin intermediul portului 0 de IN. Deoarece selecia oricrui port de OUT se face cnd semnalul de control WR# = 0L iar selecia oricrui port de IN se face cnd semnalul de 15

A15 6 RD# 4

A0 A1

G2B Y0 Y1 A Y2 B Y3 C Y4 Y5 G1 Y6 G2A Y7

U10 74LS138

D011 D112 D213 D314 D415 D516 D617 D718

Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0

A7 A6 A5 A4 A3 A2 A1 A0 OE2 OE1

9 8 7 6 5 4 3 2 19 1

2 5 6 9 12 15 16 19 74HCT541 U9

OC CLK 1Q 1D 2Q 2D 3Q 3D 4Q 4D 5Q 5D 6Q 6D 7Q 7D 8Q 8D

1 11 3 4 7 8 13 14 17 18

D0 D1 D2 D3 D4 D5 D6 D7

Z Z

CLKPP3# DATA BUS

control RD# = 0L, rezult ca un port de OUT nu se poate selecta simultan cu un port de IN, chiar daca au alocat aceeai adres procesor. In figura 15 este prezentat schema electric pentru cele 8 porturi i decodificarea acestora. Decodificarea adreselor porturilor s-a fcut prin intermediul a dou decodificatoare DEC8 de tip 74LS138. Desenarea unor scheme ca cea din figura 15 s-a fcut folosind programe specializate n cazul de fa OrCAD. Desenarea cu mna a unei astfel de scheme este o operaie care ar consum prea mult timp. De aceea, ca i in cazul memoriei, desenarea manual se face folosind tehnica de comprimare detaliat n prezentarea 1master.ppt. La examen se va folosi numai aceast tehnic. Schema din figura 15 redesenat n modul comprimat este prezentat n figura 16.
A[15:0] A1 A0 ADDRESS BUS WR#

D0

A15

ADDR.DEC 1 I0 I1 I2 O2 I3 O3

O0 CLKPP0# CLKPP1# D[7:0] 1 11 1 11

O1

CLKPP3# CLKPP2# DATA BUS 1 11 1 11 74HCT374 U4 74HCT541 U8 A7 A6 A5 A4 Y(7..0) A3 A2 A1 A0 OE2 OE1 OETSD3# ADDR.DEC 2 D0_1 9 8 7 6 5 4 3 2 19 1 2 5 6 9 12 15 16 19 1Q 2Q 3Q 4Q D(7..0) 5Q 6Q 7Q 8Q OC CLK Z 1Q 2Q 3Q 4Q D(7..0) 5Q 6Q 7Q 8Q Z

Z 1Q 2Q 3Q 4Q D(7..0) 5Q 6Q 7Q 8Q

74HCT374 U1

74HCT374 U2

74HCT374 U3

2 5 6 9 12 15 16 19

2 5 6 9 12 15 16 19

OUTSIDE WORLD

9 8 7 6 5 4 3 2 19 1

9 8 7 6 5 4 3 2 19 1

A7 A6 A5 A4 Y(7..0) A3 A2 A1 A0 OE2 OE1

A7 A6 A5 A4 Y(7..0) A3 A2 A1 A0 OE2 OE1

74HCT541 U5

74HCT541 U6

OETSD1#

74HCT541 U7

OETSD0#

O0

O1

O2

I0

I1

I2

I3

O3

A0 A1 A15

Figure 16

n cazul porturilor se remarc o diferena fa de memorii: comprimarea nu se aplic semnalelor prin care porturile comunic cu lumea exterioar, deoarece fiecare semnal are o alt semnificaie. La examen, pentru decodificatoarele de adres nu se cere o anumit implementare (cu pori, cu DEC, cu MUX, cu PLD) deoarece implementarea funciilor logice nu face 16

A7 A6 A5 A4 Y(7..0) A3 A2 A1 A0 OE2 OE1 OETSD2# RD#

9 8 7 6 5 4 3 2 19 1

2 5 6 9 12 15 16 19

OC CLK 1Q 2Q 3Q 4Q D(7..0) 5Q 6Q 7Q 8Q

OC CLK

OC CLK

obiectul acestui curs. Este suficient s se figureze un bloc cum este ADDR. DEC1 sau 2 n figura 16 i s se specifice formele funciilor implementate n acel bloc. Formele pentru CLKPP0#... CLKPP3# i OETSD0#... OETSD3# au fost prezentate anterior. Arhitectura hardware-software a unei aplicaii cu microprocesor n continuare vom detalia ideea lui Ted Hoff privitor la contractul cu Busicom: n loc s se proiecteze 12 chipuri, s se proiecteze un singur chip prevzut cu utiliti generale de calcul ce poate emula cele 12 chipuri (vezi curs 0). Intel a proiectat o maina Von Neumann (un procesor) i a implementat-o pe un singur chip de siliciu. n jurul acestui procesor se construiete un sistem de calcul cu arhitectura din figura 17:
ADRESS BUS SLC I1 ROM Memory PROCESSOR WR# RD# WR# RD# D0 DATA BUS D0 RAM Memory RD# A=i RD#=0 RD# A=k RD#=0 SLC I2

D0 SLC D A=m WR#=0 Q

WR#

Out

Figure 17

Microsistemul este prevzut cu dou porturi de intrare de un bit i un port de ieire, tot de un bit. Porturile de intrare sunt la adresele i i k iar cel de ieire la adresa m. Acest microsistem execut urmtorul program, care se compileaz i se nscrie n memoria ROM: --varianta n asamblare MIPS:
again:LW LW AND SW J R1, i(R0) R2, k(R0) R1, R1,R2 R1, m(R0) again

--varianta n C:
#include #define i 0x0100 #define k 0x0101 #define m 0x0102 int Main(){ char i1,i2,val; while(1) { i1=inportb(i); i2=inportb(k); val=i1 & i2; outportb( m, val); } }

Microsistemul care ruleaz acest program se comport exact ca o poart AND. De remarcat c spre deosebire de o poart AND real, ntrzierea porii AND soft (emulat) este mult mai mare, fiind egal cu timpul de execuie al buclei while(1). O poart AND real 17

are o ntrziere de ordinul nanosecundelor pe cnd o poart soft are o ntrziere de ordinul microsecundelor sau zecilor de microsecunde. Dac aplicaia n care se folosete o astfel de poart admite o astfel de ntrziere, aceast soluie are un mare avantaj: funcionalitatea se poate modifica doar prin schimbarea programului. Dac se dorete i o poart OR se va construi nc un microsistem, identic cu cel din exemplu, care ruleaz un program aproape identic, cu deosebirea c n loc de val=i1 & i2 scriem val=i1 | i2. Exemplu cu emularea unor pori a fost ales numai din motive didactice. n realitate nu are sens s folosim un ntreg microsistem ca s emulm o singur poart. Dar dac mrim numrul de porturi i scriem un program cu aceeai structur, dar care face mai multe calcule, putem emula orice bloc logic sau aritmetic fr s fie nevoie s folosim logic MSI (pori, sumatoare, DEC, MUX, bistabile, registre, numrtoare, etc.) Aceasta nsemna c inteligena poate fi nglobat n aplicaie prin intermediul software-ului, n loc s fie cablat n hardware. Astfel se salveaz att timp ct i bani. Procesor pe un singur chip proiectat de Intel pentru Busicom s-a numit I4004. Clasificarea microprocesoarelor Microcontrolere. n momentul apariiei microprocesorului densitatea mic de integrare a obligat ca un microsistem s fie realizat multe module: microprocesor, memorii PROM, memorii RAM, interfee de I/O. Microsistemele se realizau prin interconectarea acestor module, iar configuraia (ct RAM, ct PROM, ce interfee) depindea de destinaia microsistemului. Realizarea microsistemul n acest mod ofer flexibilitate. Ulterior, creterea densitii de integrare a permis realizarea unui microsistem pe un singur chip. Un astfel de chip se numete microcontroler i aste alctuit din procesor, PROM, RAM, numrtoare programabile, interfee seriale, porturi de I/O, multiplexoare analogice, DAC, ADC, PWM, toate pe acelai circuit integrat. Apariia microcontrolelor a fcut ca problema interconectrii modulelor aproape s dispar. Totui microcontrolerele sunt arhitecturi rigide i de multe ori apare necesitatea unor extensii. De cele mai multe ori memoria RAM este insuficient. n acest caz unele microcontrolere admit conectarea de modulele suplimentare n exterior iar interconectarea rmne n sarcina proiectantului. Astzi microcontrolerele sunt prezente n televizoare, cuptoare cu microunde, maini de splat, automobil i multe altele. Microcontrolerele au performane medii spre sczute - frecven ceasului este ntre 1MHz i 150MHz - dar au un pre de cost extrem de mic de la 2$ pn la 100$. n 1974 Ed Roberts a construit Altair bazat pe microprocesorul Intel 8080. Interpretorul de BASIC pentru Altair a fost scris de Bill Gates i Paul Allen (vezi curs 0) demonstrnd astfel c microprocesorul poate fi folosit i pentru construirea de sisteme de calcul de uz general, nu numai pentru emulare. Procesoarele care au aprut dup I8080 (I80286, I80386, I486, Pentium) au dus la construirea de calculatoare personale aa cum le tim astzi. Procesoarele destinate sistemelor de calcul de uz general au performante deosebite, dar i un pre pe msur. Astfel de procesoare se numesc procesoare de uz general. n afar de procesoarele de uz general i de sistemele ncorporate mai exist nc dou familii de procesoare: de tip DSP (Digital Signal Processors) i de reea (Network Processors).

18

Spaii de adres procesor. Un criteriu de clasificare a procesoarelor l constituie tipul spaiului de adres. Conform modelului Von Neumann spaiul de adrese procesor este omogen. O adres din spaiu de adrese poate fi alocat unei locaii de memorie sau unui port. Procesorul nu poate distinge natura locaiei. Folosirea unei adrese pentru locaie de memorie sau pentru port este lsat la latitudinea proiectantului de microsistem. Aceast soluie, prezentat anterior, se numete MAPPED I/O sau Von Neumann. Denumirea provine de la urmtoarea observaie: n orice sistem de calcul numrul adreselor alocate pentru memorarea datelor va fi ntotdeauna mult mai mare dect numrul celor folosite pentru transferul I/O. Senzaia provocat este aceea c, iniial tot spaiul exterior a fost conceput pentru memorarea datelor i apoi din el o mic parte a fost deturnat de la scopul iniial, fiind folosit pentru transferuri I/O. Sau, cu alte cuvinte spaiul, de I/O a fost proiectat (mapat) n spaiul de memorie. Schema bloc a unui astfel de sistem este prezentat n figurile 1 i 2. Transferurile care se fac ntre procesor i memorie sunt de tip citire locaie i scriere locaie: Pentru un transfer de tip citire locaie de memorie informaia vehiculat pe cele trei magistrala este: pe magistrala de adrese, adresa locaiei implicate n transfer; pe magistrala de date, datele furnizate de locaie; pe magistrala de control se precizeaz c transferul este de tip citire (RD# = 0, WR#=1). iar pentru un transfer de tip scriere locaie de memorie: pe magistrala de adrese, adresa locaiei implicate n transfer; pe magistrala de date, datele furnizate de procesor; pe magistrala de control se precizeaz c transferul este de tip scriere (WR# =0, RD#= 1). Aceast soluie prezint avantaje i dezavantaje. Avantaj: att transferurile I/O ct i transferurile cu memoria folosesc acelai set de instruciuni (instruciuni puternice, cu multe moduri de adresare). Dezavantaje: numrul de adrese de memorie este diminuat. Acest fapt nu constituie o problem pentru procesoarele cu spatii de adres mari, de 4GB adrese, dar poate crea inconveniente dac spaiul este de numai 64KB. Pentru a mri spaiul de adrese a fost imaginat o soluie care presupune dou spaii de adres : un spaiu de adrese pentru memorare i un spaiu pentru I/O. n acest caz adresa capt un atribut: de memorie sau de I/O. Pentru a preciza natura adresei se introduce un semnal de separare, semnal ce aparine magistralei de control. Acest semnal se poate numi de exemplu M/IO#, conform figurii 18:
Processor Address Bus Memory (code + data) M/IO#=1

Data Bus M/IO# RD# WR#


Figure 18

Ports M/IO#=0

19

Procesorul presupune c la fiecare adres se afl dou locaii: una de memorie i una de I/O (un port). La o adres se pot efectua cele dou operaii: scriere sau citire. Vor exista astfel urmtoarele patru tipuri de transfer. Informaia vehiculat pe cele trei magistrala pentru fiecare este : Transfer de tip citire locaie de memorie: pe magistrala de adrese, adresa locaiei implicate n transfer; pe magistrala de date, datele furnizate de locaie; pe magistrala de control se precizeaz c transferul este de tip citire locaie de memorie (M/IO# =1, RD# = 0, WR# = 1 ). Transfer de tip scriere locaie de memorie: pe magistrala de adrese, adresa locaiei implicate n transfer; pe magistrala de date, datele furnizate de procesor; pe magistrala de control se precizeaz c transferul este de tip scriere locaie de memorie (M/IO#=1, RD# = 1, WR# = 0). Transfer de tip citire locaie de I/O (port): pe magistrala de adrese, adresa locaiei implicate n transfer; pe magistrala de date, datele furnizate de locaie; pe magistrala de control se precizeaz c transferul este de tip citire port (M/IO# =0, RD# = 0, WR# = 1 ). Transfer de tip scriere port: pe magistrala de adrese, adresa locaiei implicate n transfer; pe magistrala de date, datele furnizate de procesor; pe magistrala de control se precizeaz c transferul este de tip scriere locaie de memorie (M/IO#=0, RD# = 1, WR# = 0). Existena celor 2 spaii presupune existena a dou seturi de instruciuni: un set pentru memorie i un set pentru porturi. De regul instruciunile pentru porturi sunt mai slabe dect cele pentru memorie, ceea ce constituie un dezavantaj. Pentru lucru cu porturi arhitectura 80x86 are numai 4 instruciuni! (Care sunt acestea?) Instruciunile pentru porturi se numesc, de regul, IN, OUT, MOVX, etc. Toate celelalte instruciuni (MOV, ADD, MUL, etc.) sunt pentru memorie. Instruciunile cu memoria, n faza de execuie, fac pe M/IO# = 1 iar cele cu porturile fac pe M/IO# = 0. Avantajul acestei soluii, pe lng cretere numrului de adrese de memorie, l constituie uurin cu care se protejeaz accesul la porturi n modul user. ncercarea de a executa o instruciune de tip IN sau OUT n mod user va provoca o excepie (vezi curs SO). Observaie: Existena celor 2 spaii nu oblig n nici un fel utilizatorul s foloseasc spaiul de memorie numai pentru memorare i spaiul de porturi numai pentru transfer I/O. Exist o multitudine de soluii practice posibile ca de exemplu: att circuitele fizice de memorare (pe scurt memorii) ct i circuitele fizice folosite n transferul I/O (pe scurt porturi) sunt decodificate n spaiul de memorie iar spaiul de porturi nu este folosit; n spaiul de memorie sunt numai memorii iar n spaiul de porturi se afl att porturi ct i memorii. Intrebare: Mrirea spaiului de adrese, conform acestei soluii, presupune un nou pin de control, M/IO. Nu ar fi fost mai simplu s se adauge nc un pin de adres n loc de pinul de control M/IO#? Mrirea spaiului de adrese prin introducerea unui nou semnal de control poate fi folosit pentru a crete acest spaiu de mai multe ori. Am vzut ca adugarea unui nou semnal de control dubleaz spaiul de adrese. Dac s-ar introduce dou semnale de control spaiul de adrese s-ar mri de 4 ori. Un exemplu de astfel de semnal este C#/D (CODE/DATA) care face distincia ntre cod i date, aa cum M/IO# fcea distincia ntre memorie i IO.

20

Arhitectura HARVARD. Spaiul de adrese de memorie este destinat memorrii codului i datelor. Pentru creterea vitezei de prelucrare acest spaiu se poate diviza n spaiu de adrese de cod i spaiu de date. Astfel de arhitecturi sunt prevzute cu dou seturi de magistrale: adrese, date, control pentru cod i adrese, date, control pentru spaiu de date. Aceast arhitectur este natural n cazul implementrilor pipeline i este prezentat n figura 19.
Code Address Bus Data Address Bus

Code Bus

Data Bus M/IO#

RDC#

RD# WR#

Figure 19

n timp ce codul instruciunii curente se ncarc folosind magistralele spaiului de cod, transferul datelor generat de faza de execuie a instruciunii precedente se face prin intermediul celuilalt set de magistrale. De exemplu, dac instruciunea precedent este ADD adr,reg n faza de execuie aceasta necesit un transfer cu memoria de date de tip scriere. Dac instruciunea ar fi ADD reg,adr transferul ar fi de tip citire. Arhitectura cu spaiu de cod separat de spaiu de date i cu dou seturi de magistrale se numete arhitectur HARVARD. n cazul arhitecturii Harvard apar trei tipuri de transferuri cu memoria: Transfer de tip citire locaie din memoria de date: pe magistrala de adrese a memoriei de date, adresa locaiei implicate n transfer; pe magistrala de date a memoriei de date, datele furnizate de locaie; pe magistrala de control a memoriei de date se precizeaz c transferul este de tip citire locaie de memorie (RD# = 0, WR# = 1). Transfer de tip scriere locaie din memoria de date: pe magistrala de adrese a memoriei de date, adresa locaiei implicate n transfer; pe magistrala de date a memoriei de date, datele furnizate de procesor; pe magistrala de control a memoriei de date se precizeaz c transferul este de tip scriere locaie de memorie (RD# = 1, WR# = 0). Transfer de tip citire locaie din memoria de cod: pe magistrala de adrese a memoriei de cod, adresa locaiei implicate n transfer; pe magistrala de date a memoriei de cod, datele furnizate de locaie; pe magistrala de control a memoriei de cod se precizeaz c transferul este activ (RDC# = 0). Si n cazul arhitecturii Harvard este posibil dublarea spaiului de date prin introducerea semnalului M/IO# (figurat cu albastru n figura 19). Cele 4 organizri ale spaiilor de adres procesor, detaliate anterior, sunt prezentate n figura 20.

21

ADDRESS 2 -1 . . . ADDRESS 1 ADDRESS 0 Spatiu omogen (Von Neumann) CBUS: RD#, WR#

ADDRESS 2 -1 . . . ADDRESS 1

ADDRESS 2 -1 . . . ADDRESS 1

ADDRESS 0 ADDRESS 0 Memorie Porturi CBUS: RD#, WR#, M/IO#

ADDRESS 2 -1 . . . ADDRESS 1 ADDRESS 0 Cod

ADDRESS 2 -1 . . . ADDRESS 1 ADDRESS 0 Date

ADDRESS 2 -1 . . . ADDRESS 1 ADDRESS 0 Cod

ADDRESS 2 -1 . . . ADDRESS 1 ADDRESS 0 Date

ADDRESS 2 -1 . . . ADDRESS 1 ADDRESS 0 Porturi

Harvard CBUS Code: RDC# (Read Code) CBUS Data: RD#, WR#
Figure 20

Modified Harvard CBUS: RD#, WR#, D/C#, M/IO#

Module master, module slave.


Din cele artate pn acum rezult c un calculator va fi construit din mai multe module: pentru calcul: procesoare, coprocesoare. Procesorul implementat pe un singur circuit integrat (CI) se numete microprocesor, pentru a-l distinge de procesorul implementat cu mai multe CI. Deoarece n prezent nu mai exist procesoare implementate cu mai multe CI, denumirile procesor i microprocesor nseamn acelai lucru. pentru stocarea datelor: memorii ROM, PROM, EPROM, RAM etc. pentru dialogul I/O: interfee seriale, paralele, video etc. pentru transferul datelor: DMA, procesoare de I/O. Fiecare modul ndeplinete o anumit funcie. Pentru a ndeplini respectiva funcie circuitul va avea o anumit arhitectur intern: ALU, unitate de comand, registre interne. Aceast arhitectur trebuie cunoscut pentru a putea programa respectivele module; programarea se face de preferin n limbaj de asamblare sau n C. Deoarece modulele sunt circuite integrate VLSI aceste dou denumiri se pot folosi una n locul celeilalte. Pentru a realiza un sistem de calcul cu circuite VLSI apare necesitate interconectrii modulelor. Interconectarea se face prin intermediul magistralelor. Exist configuraii de sisteme de calcul cu magistral unic sau cu mai multe magistrale. Practic aproximativ 90% din circuitele VLSI au fost concepute pentru conectarea pe principiul magistralei unice. Din punct de vedere al poziiei fa de magistral, pe durata unui transfer, modulele se clasific n module surs sau emitor i module destinaie sau receptor. Modulul surs este acel modul care dicteaz nivelele logice pe respectiva magistral (are conectate ieirile unor drivere sau pori la magistral). Se mai spune c modulul surs depune informaia pe magistral. Pe durata unui transfer exist un singur modul surs! Modul destinaie este acel modul care preia informaia (are conectate intrrile unor 22

drivere sau pori la magistral) i o vehiculeaz intern. Pe durata unui transfer, teoretic, ar putea exista mai multe module destinaie. Practic exist unul singur. Din punct de vedere al iniiativei transferului modulele se clasific n module master i module slave: Modulul master este surs pentru magistralele de adrese i de control. Modulul slave este destinaie pentru cele dou magistrale. Exist module care sunt numai master (procesorul), module care sunt numai slave (memoria) i module care pot fi la un moment dat master iar ulterior slave(DMA). In general, pentru a caracteriza un transfer, trebuie precizat modulul master, modulul slave, sursa datelor (cine este sursa pentru magistrala de date) ct i destinaia acestora. De exemplu, n transferul de tip citire din memorie procesorul este master i destinaie a datelor iar memoria este slave i surs de date.

23