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.
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
(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.
(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.
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
(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.
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.
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.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
(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).
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
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
(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.
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;
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