Sunteți pe pagina 1din 24

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

LABORATOR nr. 9
Componente secveniale. Proiectarea unui microprocesor. Scopul laboratorului
n cadrul acestei lucrri se prezint modul n care se realizeaz circuitele secveniale standard cum ar fi registrele i numrtoarele, precum i aplicaii ale acestora cum ar fi fiierul de registre i memoria. Se prezint i modul de implementarea a acestora utiliznd limbajul VHDL.

Componente secveniale consideraii teoretice


ntr-un sistem de calcul, de obicei dorim s stocm mai mult dect un bit de informaie. Mai mult, vom dori ca s grupm civa bii mpreun i s-i considerm ca o unitate, aa cum un ntreg este alctuit din 8 bii. n laboratorul nr. 7 am prezentat circuitele pentru lach-uri i bistabile care memorau un bit de informaie. n acest laborator, vom prezenta regitrii care memoreaz bii multiplii ai informaiei ca o unitate. De asemenea regitrii sunt realizai mult mai versatil prin utilizarea de funcionaliti, precum numrarea i deplasarea. Ne vom uita i peste schemele numrtoarelor i a regitrilor de deplasare. Foarte des, circuitele calculatorului au nevoie s memoreze cteva valori n acelai timp. n loc s utilizm civa regitrii separat, vom dori ca s combinm aceti regitrii mpreun. Fiierele de registre i memoriile sunt ca nite arii de registre pentru stocarea valorilor multiple. n acest laborator, vom prezenta de asemenea construcia fiierelor de regitrii i circuitele de memorie. Ca i componentele combinaionale standard, componentele secveniale sunt utilizate aproape n fiecare circuit digital. De aceea, n loc s le reproiectm de fiecare dat, de obicei sunt disponibile n librriile standard.

2.1 Regitrii
Atunci cnd dorim s memorm un octet (byte) de date, vom avea nevoie s combinm 8 bistabile i s le facem s funcioneze ca o unitate. Un registru este doar un circuit cu dou sau mai multe bistabile de tip D conectate ntre ele astfel nct vor lucra exact n acelai mod i vor fi sincronizate de ctre acelai ceas i semnale de activare. Singura diferen este c fiecare bistabil din grup este folosit pentru a stoca cte un bit de dat diferit. Figura 2-1 prezint un registru pe 4 bii cu ncrcare paralel i tergere asincron. Sunt utilizate patru bistabile de tip D cu un semnal activ pe 1 pentru validare i tergere asincron. De notat c n circuit, intrrile de control precum Clk, E i Clear, sunt conectate n comun pentru toate bistabilele.

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

(a) Clear 1 0 0 Load x 0 1 Operaia Reseteaz registrul. Intrare asincron Fr schimbare ncarc valoarea pe frontul cresctor al ceasului (b)

(c)
Figura 2.1. Un registru pe 4 bii cu ncrcare paralel i tergere asincron : (a) circuit ; (b) tabela de operaii ; (c) simbolul logic.
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY reg IS GENERIC (size: INTEGER := 3); -- size of the register PORT ( Clock, Clear, Load: IN STD_LOGIC; D: IN STD_LOGIC_VECTOR(size DOWNTO 0); Q: OUT STD_LOGIC_VECTOR(size DOWNTO 0)); END reg; ARCHITECTURE Behavior OF reg IS BEGIN PROCESS(Clock, Clear) BEGIN IF Clear = '1' THEN Q <= (OTHERS => '0'); ELSIF (Clock'EVENT AND Clock = '1') THEN IF Load = '1' THEN Q <= D; END IF; END IF; END PROCESS; END Behavior;

Figura 2.2. Codul VHDL pentru un registru pe 4 bii cu semnale Clear i Load active pe 1.

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.3. O trasare simpl a simulrii pentru un registru pe 4 bii

2.1.2 Regitrii de deplasare


Similar circuitelor combinaionale de deplasare i rotaii exist i circuite secveniale de deplasare i de rotaie. Circuitele pentru operaiile de rotire i de deplasare sunt construite exact la fel. Singura diferen este c operaiile sunt executate pe valoarea care este memorat n registru i nu pe datele de intrare. Principala utilizare pentru un registru de deplasare este conversia datelor serie-paralel sau vice-versa. Pentru o conversie serieparalel, biii sunt deplasai ntr-un registru la fiecare ciclu de ceas iar cnd toi biii (de obicei 8 bii) sunt deplasai, registrul pe 8 bii poate fi citit ca o dat paralel pe 8 bii. Pentru o conversie paralel-serie, registrul pe 8 bii este prima dat ncrcat cu data de intrare. Dup aceasta biii sunt deplasai afar individual, un bit pe fiecare ciclu de ceas, pe o linie serial de ieire.

2.1.3 Regitrii de deplasare serial-paraleli


Figura 2.4.(a) prezint un convertor serial-paralel pe 4 bii. Biii datei de intrare vin pe linia Serial_line pe o vitez de un bit pe un ciclu de ceas. Atunci cnd este setat Shift, biii de date sunt ncrcai cu un bit la un semnal de ceas. n primul ciclu de ceas, primul bit din irul serial de intrare de pe intrarea, Serial_in, este ncrcat n Q3, n timp ce bitul original din Q3 este ncrcat n Q2, Q2 este ncrcat n Q1, .a.m.d. n al doilea ciclu de ceas, bitul care este n Q3 (de ex., primul bit de pe linia Serial_in) este ncrcat n Q2, n timp ce Q3 este ncrcat cu al doilea bit de pe linia Serial_in. Acest lucru continu pn la al patrulea ciclu de ceas pn cnd cei patru bii sunt deplasai n patru bistabile, cu primul bit n Q0, al doilea bit n Q1, .a.m.d. Atunci aceti patru bii sunt disponibili pentru citirea paralel prin ieirea Q. Figura 2.4.(b) i (c) prezint tabela de operaii i simbolul logic, respectiv, pentru acest registru de deplasare.

(a) Clear 0 1 Operaia Fr schimbare Este deplasat un bit din Serial_in (b)

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

(c)
Figura 2.4. Un registru e deplasare serial-paralel pe 4 bii: (a) circuit; (b) tabela de operaii; (c) simbolul logic -- bistabil de tip D cu activare LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY D_flipflop IS PORT(D, Clock, E : IN STD_LOGIC; Q : OUT STD_LOGIC); END D_flipflop; ARCHITECTURE Behavior OF D_flipflop IS BEGIN PROCESS(Clock) BEGIN IF (Clock'EVENT AND Clock = '1') THEN IF (E = '1') THEN Q <= D; END IF; END IF; END PROCESS; END Behavior; -- registrul de deplasare pe 4 bi i LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ShiftReg IS PORT(Serial_in, Clock, Shift : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(3 downto 0)); END ShiftReg; ARCHITECTURE Structural OF ShiftReg IS SIGNAL N0, N1, N2, N3 : STD_LOGIC; COMPONENT D_flipflop PORT (D, Clock, E : IN STD_LOGIC; Q : OUT STD_LOGIC); END COMPONENT; BEGIN U1: D_flipflop PORT MAP (Serial_in, Clock, Shift, N3); U2: D_flipflop PORT MAP (N3, Clock, Shift, N2); U3: D_flipflop PORT MAP (N2, Clock, Shift, N1); U4: D_flipflop PORT MAP (N1, Clock, Shift, N0); Q(3) <= N3; Q(2) <= N2; Q(1) <= N1; Q(0) <= N0; END Structural; Figura 2.5. Codul VHDL structural pentru un registru de deplasare serial-paralel pe 4 bii

Codul VHDL structural pentru registru de deplasare serial-paralel pe 4 bii este prezentat n figura 2.5. Codul este scris la nivel structural. Prima dat este definit operarea unui bistabil de tip D cu activare. Corpul arhitecturii pentru entitatea ShiftReg 4

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR utilizeaz patru instruciuni PORT MAP pentru a instania cele patru bistabile de tip D. Mai apoi, aceste patru bistabile sunt conectate mpreun folosind semnale interne, N0, N1, N2 i N3, iar ieirea unui bistabil este conectat la intrarea urmtorului bistabil. Pentru ieirea registrului, aceste patru semnale interne sunt de asemenea conectate la cele patru semnale de ieire, Q0 pn la Q3. De notat c nu putem s folosim semnalele de ieire, Q0 pn la Q3, pentru a conecta mpreun cele patru bistabile, din moment ce semnalele de ieire nu pot fi citite.

Figura 2.6. O trasare simpl a simulrii pentru un registru de deplasare serialparalel pe 4 bii pentru figura 2.5. n figura 2.6. este prezentat o trasare simpl a simulrii unui registru de deplasare serial-paralel. La primul front al ceasului cresctor de la timpul 100 ns, bitul Serial_in este 0, astfel c pn la al patrulea bit nu exist nici o schimbare la Q, din moment ce sunt iniializate pe 0. La urmtorul front cresctor al ceasului la timpul 300ns, bitul Serial_in este un 1 i este deplasat n bitul cel mai de la stnga din Q. De aceea, Q are valoarea 1000. La timpul 500ns, este deplasat alt bit, dndu-i lui Q valoarea 1100. La timpul 700ns, este deplasat un 0, dndu-i lui Q valoarea lui 0110. De notat c din moment ce biii sunt deplasai, biii cei mai din dreapta sunt pierdui. La timpul 900ns, este dezactivat Shift, astfel c bitul 1 din linia Serial_in nu este deplasat. n final, la timpul 1.1 s, este deplasat alt bit pe 1.

2.1.4 Registru de deplasare serie-paralel i paralel-serie


Pentru ambele operaii de deplasare la serie la paralel i de la paralel la serie, vom efectua aceeai deplasare a biilor de la stnga la dreapta prin registru. Singura diferen dintre cele dou operaii este c vom dori s executm mai nti o citire paralel dup deplasare sau o scriere paralel nainte de deplasare.

(a) SHSel1 0 0 1 1 SHSel0 0 1 0 1 Operaia Nici o operaie (de ex., reine valoarea curent) ncrcarea paralel a unei noi valori Deplasare la dreapta Rotire la dreapta (b) 5

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

(c) Figura 2.7. Un registru de deplasare de la serial la paralel i de la paralel la serial pe 4 bii: (a) circuit; (b) tabela de operaii; (c) simbolul logic.
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY shiftreg IS PORT ( Clock: IN STD_LOGIC; SHSel: IN STD_LOGIC_VECTOR(1 DOWNTO 0); Serial_in: IN STD_LOGIC; D: IN STD_LOGIC_VECTOR(3 DOWNTO 0); Serial_out: OUT STD_LOGIC; Q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END shiftreg; ARCHITECTURE Behavioral OF shiftreg IS SIGNAL content: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(Clock) BEGIN IF (Clock'EVENT AND Clock='1') THEN CASE SHSel IS WHEN "01" => -- ncrcare content <= D; WHEN "10" => -- deplasare la dreapta content <= Serial_in & content(3 DOWNTO 1); WHEN OTHERS => NULL; END CASE; END IF; END PROCESS; Q <= content; Serial_out <= content(0); END Behavioral;

Figura 2.8. Codul VHDL comportamental pentru un registru de deplasare pe 4 bii de la serial la paralel i de la paralel la serial. Pentru operaia serie-paralel se va executa o citire paralel dup ce biii au fost deplasai. Pe de alt parte, pentru operaia paralel-serie se va executa mai nti o scriere paralel i dup aceea se va realiza deplasarea la ieire sub forma unui ir serial. Putem implementa ambele operaii prin simpla completare a circuitului anterior serial-paralel cu o funcie de ncrcare paralel, aa cum se prezint n figura 2.7.(a). Se utilizeaz 4 multiplexoare pentru a se selecta una dintre situaiile: deplasarea se face la dreapta, se face rotire la dreapta, registrul se ncarc cu o valoare paralele. Funcionarea acestui circuit este dependent de cele dou linii de selecie, SHSel1 i SHSel0, care controleaz ce intrare a multiplexoarelor este selectat. Tabela de operaii i simbolul logic sunt prezentate n figura 2.7. (b) i (c). Codul VHDL comportamental i simpla trasare a simulrii pentru acest registru de deplasare sunt prezentate n figurile 2.8. i respectiv 2.9. 6

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.9. O simpl trasare a simulrii pentru un registru de deplasare pe 4 bii de la serial la paralel i de la paralel la serial

2.2 Numrtoare
Numrtoarele, aa cum sugereaz i numele, sunt pentru a numra o secven de valori. Totui, exist multe tipuri diferite de numrtoare care depind de numrul total de valori numrate, secvena valorilor care sunt ieiri, indiferent dac se numr prin incrementare sau decrementare .a.m.d. Cel mai simplu este un numrtor modulo-n care numr o secven zecimal 0, 1, 2, pn la n-1 i napoi pn la 0. Sunt descrise cteva numrtoare dup cum urmeaz: Numrtor modulo n. Numr zecimal de la 0 pn la n-1 i napoi pn la 0. De exemplu, o secven a numrtorului modulo 5 n zecimal este: 0, 1, 2, 3 i 4. Numrtorul BCD (Zecimal codat n binar). Precum un numrtor modulon, cu excepia cnd n este fixat la 10. De aceea, secvena este ntotdeauna de la 0 la 9. Numrtor binar pe n bii. Este similar ca i la numrtorul modulo n doar c ordinea este de la 0 la 2n -1 i napoi la 0, unde n este numrul de bii folosii la numrare. De exemplu, o secven a numrtorului binar pe 3 bii n zecimal este 0, 1, 2, 3, 4, 5, 6 i 7. Numrtor n cod Gray. Secvena este codat astfel nct oricare dou valori consecutive trebuie s difere doar la un bit. De exemplu, o secven posibil a numrtorului n cod Gray pe 3 bii este posibil astfel 000, 001, 011, 010, 110, 111, 101 i 100. Numrtor inel: Secvena ncepe cu ir de 0 bii urmat de ctre un bit 1, precum 001. Acest numrtor simplu rotete bii ctre stnga la fiecare numrare. De exemplu, o secven a unui numrtor n inel pe 4 bii este 0001, 0010, 0100, 1000 i napoi la 0001.

2.2.1 Numrtor binar cu incrementare


Un numrtor binar pe n bii poate fi realizat utiliznd un registru pe n bii modificat unde intrrile de date pentru un registru provine dintr-o incrementare (sumator) pentru un numrtor cresctor i dintr-o decrementare (scztor) pentru un numrtor descresctor. Pentru a obine secvena urmtoare a numrtorului cresctor, din valoarea care este memorat ntr-un registru, pur i simplu trebuie s adunm cu 1. Putem folosi sumatorul complet ca intrare pentru registru, dar se poate i mai bine de att. Sumatorul complet adun doi operanzi plus un carry. Dar ceea ce dorim este s adunm un 1, astfel c cel de-al doilea operand pentru sumatorul complet este ntotdeauna un 1. Din moment ce un 1 poate fi de asemenea adus prin intermediul unui semnal carry-in la sumator, n realitate nu vom avea nevoie de cea de-a doua intrarea a operandului. Acest sumator modificat care adun doar un operand cu ajutorul lui carry-in este denumit sumator incomplet (half adder -HA). Tabela de adevr pentru acesta este prezentat n figura 2.10. (a). Avem a ca 7

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR singurul operand de intrare, cin i cout sunt semnale carry-in i carry-out, respectiv s este suma de la adunare. n tabela de adevr, pur i simplu adunm a cu cin pentru a da suma s i un posibil cary-out, cout. Din tabela de adevr vom obine dou ecuaii pentru cout i s prezentate ca n figura 2.10.(b). Circuitul HA este prezentat n figura 2.10.(c) iar simbolul logic n figura 2.10.(d). a 0 0 1 1 cin 0 1 0 1 (a) cout = a * cin s = a cin (b) cout 0 0 0 1 S 0 1 1 0

(c) (d) Figura 2.10. Sumator incomplet (half adder): (a) tabela de adevr; (b) ecuaiile; (c) circuitul; (d) simbolul logic. Pot fi legate mpreun cteva sumatoare incomplete, exact ca i sumatoarele complete pentru a forma sumatoare pe n bii. Singura intrare a operandului a provine de la registru. Semnalul carry-in iniial, c0, este utilizat ca un semnal de activare a numrtorului, din moment ce un 1 pe c0 va duce la incrementarea cu 1 a valorii registrului, iar un c0 pe 0 nu incrementeaz registrul. Numrtorul cresctor binar pe 4 bii rezultat este prezentat n figura 2.11.(a) mpreun cu tabela de operare i simbolul logic n (b) i (c).

(a) Clear 1 0 0 Count x 0 1 Operaia Resetarea numrtorului pe 0. Fr schimbare Numrtor cresctor (b)

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

(c)
Figura 2.11. Un numrtor binar cresctor (cu incrementare) pe 4 bii cu tergere asincron: (a) circuitul; (b) tabela de operare; (c) simbolul logic.

Att timp ct este setat Count, numrtorul va incrementa un 1 la fiecare puls de ceas pn cnd este deselectat Count. Atunci cnd numrtorul ajunge la 2n 1 (care este echivalent cu numrul binar cu toi pe 1) urmtorul numrtor va reveni napoi pe 0, deoarece adunarea cu 1 la un numr binar cu toi bii pe 1 va da o depire (overflow) iar toi biii originali se vor reseta pe 0. Semnalul Clear permite un reset asincron al numrtorului pe 0. Codul VHDL comportamental pentru un numrtor binar cresctor pe 4 bii este prezentat n figura 2.12. Instruciunea USE IEEE.STD_LOGIC_UNSIGNED.ALL este necesar pentru a realiza adunrile din STD_LOGIC_VECTORs. Semnalul intern value este folosit pentru a memora numrtorul curent. Atunci cnd este setat Clear, value este asignat valorii 0000 utiliznd expresia OTHERS =>0. Altfel, dac Count este setat, atunci value va fi incrementat cu 1 la urmtorul front cresctor al ceasului. Mai departe, numrul din value este transmis ctre ieirea numrtorului, Q, utiliznd instruciunea Q <= value, deoarece este n afara blocului PROCESS. O trasare simpl a simulrii este prezentat n figura 2.13.
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; -- pentru adunarea din STD_LOGIC_VECTORs ENTITY counter IS PORT ( Clock: IN STD_LOGIC; Clear: IN STD_LOGIC; Count: IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END counter; ARCHITECTURE Behavioral OF counter IS SIGNAL value: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (Clock, Clear) BEGIN IF Clear = '1' THEN value <= (OTHERS => '0'); --vector pe 4 bi i precum "0000" ELSIF (Clock'EVENT AND Clock='1') THEN IF Count = '1' THEN value <= value + 1; END IF; END IF; END PROCESS; Q <= value; END Behavioral;

Figura 2.12. Codul VHDL comportamental pentru un numrtor cresctor binar pe 4 bii

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.13. O trasare a simulrii pentru un numrtor cresctor binar pe 4 bii

2.2.2 Numrtor cresctor-descresctor binar


Putem proiecta un numrtor binar cresctor-descresctor pe 4 bii este exact ca i la proiectare unui numrtor cresctor, cu excepia c vom avea nevoie att de sumator ct i de scztor (circuitul de scdere) pentru fiecare intrare de date din registru. Tabela de adevr pentru sumatorul-scztor incomplet este prezentat n figura 2.14.(a). Semnalul Down este selectat atunci cnd dorim s avem un numrtor cresctor sau descresctor. Setarea lui Down (setarea pe 1) va determina numrarea descresctoare. Prima jumtate a tabelului este exact la fel ca i tabela de adevr pentru HA. Pentru a doua jumtate a tabelului, se va executa o scdere a-cin, unde s este diferena scderii iar cout este un 1 dac vom avea nevoie s mprumutm. De exemplu, pentru 0-1, vom avea nevoie s mprumutm, astfel c cout este 1. Atunci cnd mprumutm, vom obine un 2; iar 2-1=1, astfel c s este de asemenea un 1. Cele dou ecuaii rezultate pentru c out i s sunt prezentate n figura 2.14.(b). Circuitul logic i simbolul pentru sumatorul-scztor incomplet este prezentat n figura 2.14. (c) i (d). Dow a cin cout s n 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 0 1 0 1 1 1 1 1 0 0 1 1 1 1 0 0 (a) cout = Down a cin + Down a cin = (Down a) cin s = Down (a cin) + Down (a cin) = a cin (b)

(c)

(d)

Figura 2.14. Sumatorul scztor incomplet (HAS): (a) tabela de adevr; (b) ecuaiile; (c) circuitul; (d) simbolul logic.

Putem pur i simplu nlocui HA-urile cu HAS-urile n circuitul numrtorului cresctor pentru a obine circuitul numrtorului cresctor-descresctor, aa cum este prezentat n figura 2.15.(a). Tabela de operare i simbolul logic sunt prezentate n figura

10

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR 2.15.(b) i (c). Din nou, semnalul Overflow este setat daci numrtorul trece de la 1111 napoi la 0000.

(a)
Clear 1 0 0 0 Count x 0 1 1 Down x x 0 1 Operaia Resetarea numrtorului pe 0. Fr schimbare Numrtor cresctor. Numrtor descresctor.

(b)

(c) Figura 2-15 Un numrtor cresctor-descresctor binar pe 4 bii cu tergere asincron: (a) circuit; (b) tabela de operaii; (c) simbolul logic;
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY udcounter IS PORT ( Clock: IN STD_LOGIC; Clear: IN STD_LOGIC; Count: IN STD_LOGIC; Down: IN STD_LOGIC; Q: OUT INTEGER RANGE 0 TO 15); END udcounter; ARCHITECTURE Behavioral OF udcounter IS BEGIN PROCESS (Clock, Clear) VARIABLE value: INTEGER RANGE 0 TO 15; BEGIN IF (Clear = '1') THEN value := 0; ELSIF (Clock'EVENT AND Clock='1') THEN IF (Count = '1') THEN IF (Down = '0') THEN value := value + 1; ELSE value := value - 1; END IF; END IF; END IF; Q <= value; END PROCESS; END Behavioral;

11

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR Figura 2.16. Codul VHDL pentru un numrtor cresctor-descresctor binar pe 4b. Codul VHDL pentru numrtorul cresctor-descresctor, prezentat n figura 2.16. este similar cu codul numrtorului cresctor dar cu o logic n plus pentru semnalul Down. Dac Down este setat, atunci value este decrementat cu 1, altfel este incrementat cu 1. Pentru a face codul un pic diferit, semnalul de ieire al numrtorului, Q, este declarat ca un ntreg cu intervalul cuprins ntre 0 i 15. Acest interval, bineneles, este intervalul pentru o valoare binar pe 4 bii. Mai departe, memorarea pentru numrtorul curent, value, este declarat mai degrab ca o variabil de tip ntreg dect un semnal. De notat de asemenea c instruciunea de asignare a semnalului Q <= value, este plasat n interiorul blocului PROCESS. n loc s devin o instruciune concurenial (atunci cnd a fost plasat n afara blocului PROCESS din figura 2.12) acum este o instruciune secvenial. O trasare simpl a simulrii este prezentat n figura 2.17.

Figura 2.17. O trasare a simulrii pentru un numrtor cresctor-descresctor binar pe 4 bii

2.2.3 Numrtor cresctor-descresctor binar cu ncrcare paralel


Pentru a realiza un numrtor mult mai versatil, trebuie s fim capabili s ncepem secvena numrtorului cu un numr diferit de zero. Acest lucru este realizat uor prin modificarea circuitului numrtorului prezentat n figura 2.18.(a). Singura diferen dintre acest circuit i circuitul numrtorului cresctor-descresctor prezentat n figura 2.15.(a) este aceea c este adus un multiplexor cu 2 intrri ntre ieirea s a HAS-ului i o intrare Di, la intrarea n bistabil. Realiznd acest lucru, intrarea bistabilului poate fi selectat fie pentru o valoare de intrare extern (dac este setat Load) sau pentru urmtoarea valoare numrat de la ieirea HAS-ului (dac nu este setat Load). Dac este selectat ieirea lui HAS, atunci circuitul funcioneaz exact ca nainte. Dac este selectat intrarea extern, atunci valoarea de la liniile de date a intrrii se ncarc n registru. Tabela de operare i simbolul logic pentru acest circuit sunt prezetate n figura 2.18. (b) i (c). Trebuie s pstrm linia Clear, astfel nct numrtorul s fie nc iniializat cu 0 la orice moment de timp. De notat c exist un moment de timp diferit ntre setarea liniei Clear pn la resetarea numrtorului cu 0, fa de ncrcarea cu 0 prin setarea liniei Load i setarea intrrii de date cu 0. n primul caz, numrtorul este resetat pe 0 imediat ce este setat Clear, n timp ce cellalt caz va reseta numrtorul la 0 la urmtorul front cresctor al ceasului. Acest numrtor va ncepe cu orice valoare care va fi ncrcat ntr-un registru, dar ntotdeauna va numra cresctor pn la 2n -1 unde n este numrul biilor pentru un registru. Acest lucru este posibil atunci cnd registrul conine toi biii pe 1. Atunci cnd numrtorul ajunge la sfritul secvenei numrtorului, ntotdeauna ciclul se va ntoarce napoi pe 0 i nu la valoarea iniial care a fost ncrcat. Totui, putem aduce un comparator simplu la acest circuit al numrtorului astfel nct secvena de numrare s

12

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR poat ncepe sau s se termine cu orice numr iar ciclul s se rentoarc la noua valoare de nceput, aa cum vom arta n continuare.

(a) Clear 1 0 0 0 0 Load x 0 0 0 1 Count x 0 1 1 x Down x x 0 1 x (b) Operaia Resetarea numrtorului pe 0. Fr schimbare Numrtor cresctor. Numrtor descresctor. Valoarea de ncrcare.

(c) Figura 2.18. Un numrtor cresctor-descresctor binar pe 4 bii cu ncrcare paralel i tergere asincron: (a) circuit; (b) tabela de operaii; (c) simbolul logic.

2.2.4 Numrtor cresctor de tip BCD


O limitare cu numrtorul cresctor-descresctor binar cu ncrcare paralel este c ntotdeauna numr pn la 2n 1 pentru un registru pe n bii dup care ciclul se rentoarce napoi pe 0. Dac dorim ca o secven a numrtorului s se termine cu un numr mai mic dect 2n 1, vom avea nevoie s folosim un comparator de egalitate pentru a testa acest nou numr de sfrit. Comparatorul compar valoarea curent a numrtorului care se afl n registru cu acest nou numr de sfrit. Atunci cnd numrtorul atinge acest nou numr de sfrit, comparatorul activeaz intrrile de date. Numrtorul poate ncepe de la un numr n care este ncrcat. Totui, dac dorim ca secvena de numrare s se ntoarc napoi de fiecare dat la acest numr de nceput, vom avea nevoie s setm semnalul Load, la sfritul fiecrei secvene de numrare, care va genera rencrcarea acestui nou numr de nceput. Ieirea comparatorului este conectat la linia Load, astfel nct atunci cnd numrtorul ajunge la numrul de sfrit, 13

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR va fi setat linia Load i registrul va fi ncrcat cu numrul de nceput. De aceea, numrtoarea se poate termina cu un nou numr de sfrit i se poate rentoarce la un nou numr de nceput.

Figura 2.19. Numrtor cresctor BCD Numrtorul cresctor n codul binar zecimal (BCD) numr de la 0 la 9 iar apoi se ntoarce napoi pe 0. Circuitul pentru acesta este prezentat n figura 2.19. Inima circuitului este doar un numrtor cresctor-descresctor binar pe 4 bii cu ncrcare paralel. Este folosit o poart AND cu 4 intrri pentru a compara valoarea numrtorului cu numrul 0. Atunci cnd valoarea numrtorului este 9, poarta AND a comparatorul transmite un 1 pentru a se seta linia Load. Odat ce linia Load este setat, valoarea urmtoare a numrtorului va fi valoarea ncrcat de la intrarea D. Din moment ce D este conectat cu toate intrrile la 0, numrtorul se va ntoarce pe 0 la urmtorul front cresctor al ceasului. Linia Down este conectat la 0, din moment ce dorim s numrm cresctor. Pentru ca numrarea s aib o secven egal n timp pentru fiecare numr, trebuie s utilizm intrarea Load pentru a ncrca valoarea 0, n loc de a utiliza intrarea asincron Clear. Dac conectm ieirea porii AND la intrarea Clear n loc de intrarea Load, vom obine secvena corect a numrtorului. Totui, atunci cnd numrtorul ajunge la 9, se va schimba pe 0 aproape imediat, deoarece atunci cnd ieirea porii AND transmite semnalul asincron Clear, numrtorul este resetat pe 0 imediat i nu la urmtorul front cresctor al ceasului. Exemplul 1: Realizarea unui circuit pentru numrtorul cresctor Acest exemplu folosete un numrtor cresctor-descresctor binar pe 4 bii cu ncrcare paralel pentru a realiza un circuit pentru un numrtor cresctor care numr de la 3 la 8 (n zecimal) i napoi la 3. Circuitul pentru acest numrtor, prezentat n figura 2.20, este aproape identic cu circuitul numrtorului cresctor BCD. Singura diferen este aceea c avem nevoie s testm numrul 8 n loc de 9 ca ultim numr al secvenei, iar primul numr cu care se face ncrcarea este 3 n loc de 0. De aceea, intrrile porii AND pentru compararea cu ieirea numrtorului binar sunt pregtite pentru numrul 1000 iar numrul cu care se face ncrcarea este 0011.

14

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.20. Numrtor pentru exemplul 1.

2.2.5 Numrtor cresctor-descresctor BCD


Putem obine un numrtor cresctor-descresctor BCD printr-o mic modificare a circuitului numrtorului BCD cresctor. Numrtorul numr de la 0 la 9 pentru o secven cresctoare i de la 9 la 0 pentru o secven descresctoare. Pentru secvena cresctoare, atunci cnd numrtorul ajunge la 9, linia Load este setat pentru a se ncrca cu 0 (0000 n binar). Pentru secvena descresctoare, atunci cnd numrtorul ajunge la 0, linia Load este setat pentru a se ncrca cu 9 (1001 n binar). n figura 2.21. este prezentat circuitul numrtorului cresctor-descresctor BCD. Sunt utilizate dou pori AND cu 5 intrri care acioneaz ca un comparator. Poarta etichetat Up va scoate un 1 atunci cnd nu este setat Down (de ex., numrtor descresctor) iar numrtorul este 9. Poarta etichetat Dn va scoate un 1 atunci cnd este setat Down, iar numrtorul este 0. Semnalul Load este setat pe una dintre aceste dou pori AND. Sunt folosite patru multiplexoare cu 2 intri i 1 ieire pentru a selecta care dintre acestea dou va genera valorile de nceput, 0000 sau 1001, pentru a fi ncrcate atunci cnd linia Load este setat. Liniile de selecie pentru aceste patru multuplexoare sunt conectate n comun la semnalul Down, astfel nct atunci cnd numrtorul este numrtor cresctor, este ncrcat cu 0000 i cu 1001 atunci cnd numrtorul este cu decrementare. Ar trebuie s fie clar c cele dou valori, 0000 i 1001, pot fi ncrcate i fr s folosim cele patru multiplexoare (dou au ambele intrri pe 0).

Figura 2.21. Numrtor cresctor-descresctor BCD. Exemplul 2: Realizarea unui circuit numrtor cresctor-descresctor Acest exemplu folosete un numrtor cresctor-descresctor binar pe 4 bii cu ncrcare paralel pentru a genera un numrtor cresctor-descresctor n care secvena de ieire 2, 5, 9, 13 i 14 se repet. 15

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR Numrtorul binar pe 4 bii poate numra doar numere consecutive. Pentru numerele de ieire care nu sunt consecutive, vom avea nevoie s realizm un circuit de ieire care mapeaz de la un numr la altul. Secvena solicitat are 5 numere, astfel c vom proiecta mai nti un numrtor care numr de la 0 la 4. Circuitul de ieire va mapa atunci numerele, 0, 1, 2, 3 i 4 pentru numerele de ieire solicitate 2, 5, 9, 13 i 14.
Intrri Q3 Q2 Q1 zecimale 0 0 0 0 1 0 0 0 2 0 0 1 3 0 0 1 4 0 1 0 Restul de combinaii Q0 0 1 0 1 0 Ieiri zecimale 2 5 9 13 14 Q3 0 0 1 1 1 X Q2 0 1 0 1 1 x Q1 1 0 0 0 1 x Q0 0 1 1 1 0 x

(a) O0 = Q1 + Q0 O1 = Q1Q0 O2 = Q2 + Q0 O3 = Q2 + Q1 (b)

(c) Figura 2.20. Numrtor pentru exemplul 2 Intrrile circuitului de ieire sunt cei patru bii de ieire ai numrtorului Q 3, Q2, Q1 i Q0. Ieirile din acest circuit sunt cei patru bii modificai, Q3, Q2, Q1 i Q0 pentru a reprezenta cele 5 numere de ieire. Tabela de adevr i ecuaiile de ieire rezultate pentru circuitul de ieire sunt prezentate n figura 2.22 (a) i (b). Pentru a vedea cea mai simpl cale prin care sunt obinute aceste ecuaii de ieire vom folosi diagramele K completat cu x pentru situaiile care nu conteaz. Circuitul numrtorului complet este prezentat n figura 2.22(c).

2.3 Fiierele cu regitrii (registrele unui microprocesor)


Atunci cnd dorim s memorm concurenial cteva numere ntr-un circuit digital, putem folosi n circuit civa regitrii individuali. Totui, exist i momente cnd dorim s tratm aceti regitri ca o unitate, n mod identic ca n cazul adresrii locaiilor individuale a unei arii de memorie. Astfel, n loc s avem civa regitrii individuali, vom dori s avem o arie de regitri. Acest set de regitrii este cunoscut ca fiind un fiier de regitrii (register file). ntr-un fiier de registre, toate semnalele de control respective pentru regitrii individuali sunt conectate n comun. Mai departe, toate liniile de ieire i de intrare a datei respective pentru toi regitrii sunt de asemenea conectate n comun. De exemplu, 16

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR liniile Load pentru toi regitrii sunt conectate mpreun, iar toate liniile de date d 3 sunt conectate mpreun. Astfel c fiierul de registre are doar un singur set de linii de intrare i un set de linii de ieire pentru toi regitrii. n completare, liniile de adrese sunt folosite pentru a specifica care registru poate fi accesat din fiierul de registre. ntr-un circuitul de tip microprocesor care folosete un ALU, de obicei fiierul de registre este folosit pentru operanzii surs ai ALU. Din moment ce ALU preia cei doi operanzi de intrare, vom dori ca fiierul de registre s fie capabil s scoat cele dou valori din cele dou locaii diferite posibile ale fiierului de registre n acelai timp. Prin urmare, un fiier de regitrii tipic va avea un port de scriere i dou porturi pentru citire. Toate aceste trei porturi vor avea propriile lor linii de activare i de adrese. Atunci cnd linia de activare pentru citire nu este setat, portul de citire va scoate un 0. Pe de alt parte, atunci cnd este setat linia de activare a citirii, coninutul registrului specificat prin liniile adresei de citire este trecut la portul de ieire. Linia de activare a scrierii este folosit pentru a ncrca valoarea ntr-un registru specificat de ctre liniile adresei de scriere. Simbolul logic pentru un fiier de registre 4x8 (patru regitrii, fiecare avnd cte 8 bii) este prezentat n figura 2.23.

Figura 2.23. Simbolul logic pentru un fiier de regitrii 4x8 Portul de scriere pe 8 bii este denumit In iar porturile de citire pe 8 bii sunt denumite Port A i Port B. WE este linia de activare a scrierii activ pe 1. Aceast linie trebuie s fie setat pentru a scrie o valoare ntr-un registru al fiierului de registre. WA1 i WA0 sunt cele dou linii de adrese pentru selecia unei locaii de scriere. Din moment ce exist patru locaii n fiierul registrului, sunt necesare astfel dou linii de adrese. Linia RAE este linia de activare a citirii pentru Portul A. Liniile selectate pentru cele dou adrese de citire pentru Portul A sunt RAA1 i RAA0. Pentru Portul B, vom avea linia de activare a Portul B, RBE, i cele dou linii de adrese, RBA1 i RBA0. Pentru a controla ieirea de date, putem folosi o poart AND cu 2 intrri pentru a activa sau dezactiva fiecare dintre liniile de ieire a datei, Qi. Vom dori ca s controlm toate liniile de ieire a datei laolalt, de aceea, o intrare de la toate porile AND cu dou intrri vor fi conectate mpreun. Atunci cnd aceast intrare comun este setat pe 0, toate porile AND vor avea ieirea 0. Atunci cnd aceast intrare comun este setat pe 1, ieirea pentru toate porile AND va fi valoarea de la intrare. O alternativ la folosirea porilor AND, pentru a controla porturile de citire, este aceea n care se folosete buffere cu trei stri. Fiierul de registre pe care l folosim are dou porturi de citire, care controleaz cele dou ieiri pentru fiecare registru. Prin urmare, n loc s avem o singur poart AND cu 2 intrri pentru linia de ieire, Qi, vom avea nevoie s conectm dou pori AND la fiecare linie de ieire: una pentru Portul A i una pentru Portul B. Un fiier de registre cu 8 legturi pe 8 bii va avea 8 pori AND pentru Portul A i alte 8 pori AND pentru Portul B, aa cum este prezentat n figura 2-24. AE i BE sunt semnale de activare pentru Portul A i pentru Portul B. Pentru fiecare port de citire, este conectat n comun semnalul de 17

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR activare a citirii cu o intrare la toate cele 8 pori AND. A doua intrare de la fiecare din cele 8 pori AND leag cele 8 linii de ieire, de la Q0 la Q7.

Figura 2.24. O celul a fiierului registru (wide) legat pe 8 bii cu un port de scriere i dou porturi de citire. Pentru un fiier de registre 4x8, vom avea nevoie s folosim patru celule ale fiierului de registre pe 8 bii. Pentru a selecta care celul a fiierului de registre vom dori s o accesm, ar trebui s folosim trei decodificatoare pentru a decodifica adresele, WA1, WA0, RAA0, RAA0, RBA1 i RBA0. Un decodificator este folosit pentru adresele de scriere, WA1 i WA0; unul pentru adresele de citire a Portului A, RAA1 i RAA0; iar unul pentru adresele de citire a Portului B, RBA1 i RBA0. Ieirile decodificatorului sunt folosite pentru a activa liniile individuale ale registrelor din fiierul de registre pentru scriere, Load, i pentru liniile de activare a citirii, AE i BE. Circuitul complet pentru un fiier de registre 4x8 este prezentat n figura 2.25. De exemplu, pentru a citi din Registrul 3 prin Portul B, trebuie s fie setat linia RBE, iar liniile adresei Portului B, RBA0 i RBA1 trebuie s fie setate pe 112 (pentru Registrul 3). Data din registrul 3 va fi imediat disponibil pe Portul B. Pentru a scrie o valoare la Registrul 2, liniile adresei de scriere, WA0 i WA1 sunt setate pe 102, i atunci este setat linia de activare a scrierii, WE. Atunci, data de la intrarea D este scris n Registrul 2 la urmtorul front activ (cresctor) al ceasului. Din moment ce toate cele trei decodificatoare pot fi activate n acelai timp, prin urmare, cele dou operaii de citire i operaia de scriere pot si setate toate odat.

18

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.25. Un circuit pentru fiierul de regitri 4x8 cu un port de scriere i dou porturi de citire Din punctul de vedere al evoluiei n timp, datele din porturile de citire sunt imediat disponibile dup ce linia de activare a citirii este setat, de aceea, scrierea apare la urmtorul front activ (cresctor) al ceasului. Din cauza acestui lucru, acelai registru poate fi accesat att pentru citire ct i pentru scriere n acelai timp; se ntmpl aa pentru c liniile de activare a scrierii pot fi setate n acelai timp n care se folosesc aceleai adrese de scriere ct i de citire. Atunci cnd se ntmpl acest lucru, valoarea care este momentan n registru este citit prin intermediul portului de citire iar noua valoare va fi scris ntr-un registru la urmtorul front cresctor a ceasului. Aceast temporizare este prezentat n figura 2.26. Ceea ce este important de reinut este aceea c atunci cnd sunt executate operaiile de scriere ct i de citire n acelai timp n acelai registru, ntotdeauna operaia de citire citete valoarea curent memorat n registru i niciodat nu se citete noua valoare care este scris prin intermediul operaiei de scriere.

19

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.26. Timpii de scriere i de citire pentru o celul a fiierului de registre.


ENTITY regfile IS port( clock: IN un fiier --ceas Codul VHDL pentru std_logic;de registre este prezentat n figura 2.27. Codul WE: IN std_logic; --activarea scrierii principal este compus din trei procese: procesul de scriere i dou procese pentru portul WA: IN std_logic_vector(1 DOWNTO 0); --adresa de scriere de citire. AcesteD: INprocese sunt identice DOWNTO 0); instruciuni concureniale n care trei std_logic_vector(7 prin cele 3 --intrare sunt executate n paralel. Procesul de scriere este sensibil la ceas,a i asta din & B RAE, RBE: IN std_logic; --porturi de activare citirii A cauza instruciunii IF clock RBA: IN std_logic_vector(1 DOWNTO 0); --Porturileal semnalului RAA, din proces; o scriere apare doar la un front cresctor adreselor procese ale & B de ceas. Cele dou de citire A porturilor de citire nu sunt sensibile la ceas ci doar la PortA, PortB: adresei de citire. Astfel data 0)); --portul de activarea citirii i la semnalele OUT std_logic_vector(7 DOWNTOde citire este disponibil ie ire A & B imediat regfile; ce aceste linii sunt setate. Funcia CONV_INTEGER(WA) convertete WA END STD_LOGIC_VECTOR la un ntreg astfel nct adresele s poat fi utilizate ca un index ntr-o arie RF. ARCHITECTURE Behavioral OF regfile IS SUBTYPE reg IS std_logic_vector(7 DOWNTO 0); n figura 2.28. n trasarea simulrii, O trasare simpl a simulrii este prezentat TYPE regArray scriere WA i 3) OF de ambele adrese de IS array(0 to adresareg;citire a Portului A, RAA, sunt setate pentru SIGNAL RF: regArray; -- con inutul fi ierului registru Registrul 3. La 0ns, data de intrare, D, este 5. Cu activarea scrierii, WE, setat, data 5 BEGIN este memorat n RFPROCESS urmtorul front cresctor al ceasului, care se ntmpl la WritePort: (3) la (clock) BEGIN 100ns. Atunci cnd este setat RAE la 200ns, data 5 din RF(3) este imediat disponibil pe Portul A. IF (clock'EVENT AND clock='1') THEN La 400ns, ambele WE i RAE sunt setate n acelai timp. Data curent 5 din IF RF(3) apare (WE = '1') Portul A. Totui, n RF(3)aeste scris noua dat vector la la imediat pe THEN 7 la 500ns, RF(CONV_INTEGER(WA)) <= D; -- pentru face conversia din urmtorul front cresctor al ceasului. Noua dat 7 este disponibil pe Portul A doar dup ntreg timpul 500ns. IF; END END IF; END PROCESS; ReadPortA: PROCESS (RAA, RAE) BEGIN -- Citirea Portului A IF (RAE = '1') THEN PortA <= RF(CONV_INTEGER(RAA)); -- pentru a face conversia din vector la ntreg ELSE PortA <= (others => '0'); END IF; END PROCESS; ReadPortB: PROCESS (RBE, RBA) BEGIN -- Citirea Portului B IF (RBE = '1') THEN PortB <= RF(CONV_INTEGER(RBA)); -- pentru a face conversia din vector la ntreg ELSE PortB <= (others => '0'); 20 END IF; END PROCESS; END Behavioral;

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

-- necesar pentru CONV_INTEGER()

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.27. Codul VHDL pentru un fiier registru 4x8 cu un port de scriere i dou porturi de citire.

21

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

Figura 2.28. O simpl trasare a simulrii pentru un fiier de regitri 4x8

2.4 SRAM (Static Random Acces Memory)


O alt component principal dintr-un sistem de calcul este memoria. Aceasta se poate referi fie la memoria cu acces aleatoriu (RAM) sau la memoria care permite doar citirea (ROM). Putem realiza memoria n acelai mod cum am realizat i fiierul de registre dar cu mai multe locaii de memorare. Totui, exist cteva motive pentru care nu dorim s realizm memoria aa. Un motiv este acela c de obicei ne dorim o memorie mai mare dar i foarte ieftin, astfel c o s vrem s realizm celula de memorie ct mai mic cu putin. Un alt motiv este acela c vom dori s folosim o magistral de date comun pentru ambele ci de citire i pentru operaia de scriere n memorie. Acest lucru se realizeaz dac circuitul de memorie are cel puin un port de date (i nu dou sau trei ca la fiierul de registre) att pentru citirea ct i pentru scrierea datei. Simbolul logic din figura 2.29.(a), ne prezint toate legturile pentru un chip RAM. Exist un set de linii de date, Di i un set de linii de adrese, Ai. Numrul liniilor de adrese este dependent de cte locaii sunt n chipul de memorie. De exemplu, un chip de memorie de 512 bytes va avea 8 linii de date (8 bii = 1 octet/byte) i nou linii de adrese (29 = 512). Funcionarea unui chip de memorie este prezentat n figura 2.29.(b).

(a) Operaia Fr Citire din locaia de memorie selectat prin liniile de adrese. Scrierea n locaia de memorie selectat prin liniile de adrese. (b) Figura 2.29. Un chip RAM de 2n x m: (a) simbolul logic; (b) tabela de operaii. De notat c n figura 2.29.(a), circuitul RAM nu are nevoie de un semnal de ceas. Figura 2.30.(a) prezint o diagram de stare pentru operaia de scriere n memorie. n figura 2.30. (b) se prezint o diagram de stare pentru operaia de citire. Fiecare bit din chip-ul RAM static este stocat n celula de memorie aa cum se prezint n figura 2.31.(a). Principala component din celul este un latch de tip D cu activare. Este conectat un buffer cu trei stri la ieirea latch-ului D ca s se poat face 22 CE 0 1 1 WR x 0 1

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR citirea selectiv din acesta. Semnalul Cell enable este folosit pentru a activa celula de memorie att pentru citire ct i pentru scriere.

(a) (b) Figura 2.30. Diagrama de stare a memoriei: (a) operaia de citire; (b) operaia de scriere.

(a) (b) Figura 2.31. Celula de memorie: (a) schem; (b) simbol Pentru a realiza un chip RAM static 4x4, avem nevoie de 16 celule de memorie care formeaz un grid 4x4, aa cum se prezint n figura 2.32. Fiecare rnd formeaz o singur locaie de memorare iar numrul de celule de memorare dintr-un rnd determin limea bitului pentru fiecare locaie. Codul VHDL pentru un chip RAM 16x4 este prezentat n figura 2.33. Portul de date bidirecional, D, este declarat ca BUFFER astfel c poate fi citit ct i scris. Coninutul memoriei actuale este memorat ntr-o variabil mem, care este o arie de dimensiune 16 a tipului STD_LOGIC_VECTOR.

Figura 2.32. Circuitul RAM 4x4 23

UNIVERSITATEA TEFAN CEL MARE SUCEAVA FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; -- necesar pentru CONV_INTEGER() ENTITY memory IS PORT ( CE, WR: IN STD_LOGIC; --activare chip, scriere activ A: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --adres D: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); --data END memory; ARCHITECTURE Behavioral OF memory IS BEGIN PROCESS (CE, WR) SUBTYPE cell IS STD_LOGIC_VECTOR(3 DOWNTO 0); TYPE memArray IS array(0 TO 15) OF cell; VARIABLE mem: memArray; --con inutul memoriei VARIABLE ctrl: STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN ctrl := CE & Wr; -- semnale grupate pentru decodificarea CASE CASE ctrl IS WHEN "10" => -- cite te D <= mem(CONV_INTEGER(A)); -- conversia din vetorul bit la ntreg WHEN "11" => -- scriere mem(CONV_INTEGER(A)) := D; -- conversia din vetorul bit la ntreg WHEN OTHERS => -- activare valid sau invalid D <= (OTHERS => 'Z'); END CASE; END PROCESS; END Behavioral;

Figura 2.33. Codul VHDL pentru un chip RAM 16x4.

3. Desfurarea lucrrii
1. Se studiaz circuitele secveniale standard precum registrele i numrtoarele dar i aplicaiile acestora cum ar fi fiierul de registre i memoria. 2. Se vor testa exemplele scrise n VHDL.

24