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.
1. Scop! !"#or"$or!%
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
limbaul !"#$.
&. Co'pon(n$( )(c*(n+%"!( , con)%-(r"+%% $(or($%c(
ntr%un sistem de calcul, de obicei dorim s stocm mai mult dect un bit de
informaie. &ai mult, vom dori ca s grupm civa bii mpreun i s%i considerm ca o
unitate, aa cum un ntreg este alctuit din ' bii. n laboratorul nr. ( am prezentat
circuitele pentru lac)%uri i bistabile care memorau un bit de informaie. n acest laborator,
vom prezenta regitrii care memoreaz bii multiplii ai informaiei ca o unitate. #e
asemenea regitrii sunt realizai mult mai versatil prin utilizarea de funcionaliti, precum
numrarea i deplasarea. *e vom uita i peste sc)emele numrtoarelor i a regitrilor de
deplasare.
+oarte 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. +iierele 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. #e aceea, n loc s le reproiectm de fiecare
dat, de obicei sunt disponibile n librriile standard.
2.1 Regitriihttps://github.com/alexand7u/Facultate
,tunci cnd dorim s memorm un octet -b.te/ de date, vom avea nevoie s
combinm ' bistabile i s le facem s funcioneze ca o unitate. 0n registru este doar un
circuit cu dou sau mai multe bistabile de tip # conectate ntre ele astfel nct vor lucra
e1act 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. +igura 2%3 prezint un registru pe 4 bii cu ncrcare paralel i tergere
asincron. Sunt utilizate patru bistabile de tip # cu un semnal activ pe 3 pentru validare i
tergere asincron. #e notat c n circuit, intrrile de control precum Clk, E i Clear, sunt
conectate n comun pentru toate bistabilele.
1
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
."/
Clear Load Op(r"+%"
3 1 5eseteaz registrul. 6ntrare asincron
7 7 +r sc)imbare
7 3 ncarc valoarea pe frontul cresctor al
ceasului
.#/
.c/
F%0r" &.1. Un r(0%)$r p( 1 #%+% c 2nc3rc"r( p"r"!(!3 4% 4$(r0(r( ")%ncron3 5 ."/ c%rc%$ 6 .#/
$"#(!" -( op(r"+%% 6 .c/ )%'#o!! !o0%c.
F%0r" &.&. Co-! V7DL p(n$r n r(0%)$r p( 1 #%+% c )('n"!( Clear 4% Load "c$%*( p( 1.
&
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;
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
F%0r" &.8. O $r")"r( )%'p!3 " )%'!3r%% p(n$r n r(0%)$r p( 1 #%+%
&.1.& R(0%4$r%% -( -(p!")"r(
Similar circuitelor combinaionale de deplasare i rotaii e1ist i circuite secveniale
de deplasare i de rotaie. Circuitele pentru operaiile de rotire i de deplasare sunt
construite e1act la fel. Singura diferen este c operaiile sunt e1ecutate 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 serie%
paralel, biii sunt deplasai ntr%un registru la fiecare ciclu de ceas iar cnd toi biii -de
obicei ' bii/ sunt deplasai, registrul pe ' bii poate fi citit ca o dat paralel pe ' bii.
Pentru o conversie paralel%serie, registrul pe ' bii este prima dat ncrcat cu data de
intrare. #up aceasta biii sunt deplasai afar individual, un bit pe fiecare ciclu de ceas,
pe o linie serial de ieire.
&.1.8 R(0%4$r%% -( -(p!")"r( )(r%"!9p"r"!(!%
+igura 2.4.-a/ prezint un convertor serial%paralel pe 4 bii. 8iii datei de intrare vin
pe linia Serial_line pe o vitez de un bit pe un ciclu de ceas. ,tunci 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 Q
3
, n timp ce bitul
original din Q
3
este ncrcat n Q
2
, Q
2
este ncrcat n Q
1
, .a.m.d. n al doilea ciclu de
ceas, bitul care este n Q
3
-de e1., primul bit de pe linia Serial_in/ este ncrcat n Q
2
, n
timp ce Q
3
este ncrcat cu al doilea bit de pe linia Serial_in. ,cest lucru continu pn la
al patrulea ciclu de ceas pn cnd cei patru bii sunt deplasai n patru bistabile, cu primul
bit n Q
0
, al doilea bit n Q
1
, .a.m.d. ,tunci aceti patru bii sunt disponibili pentru citirea
paralel prin ieirea Q. +igura 2.4.-b/ i -c/ prezint tabela de operaii i simbolul logic,
respectiv, pentru acest registru de deplasare.
."/
Clear Op(r"+%"
7 +r sc)imbare
3 9ste deplasat un bit din Serial_in
.#/
8
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
.c/
F%0r" &.1. Un r(0%)$r ( -(p!")"r( )(r%"!9p"r"!(!3 p( 1 #%+%5 ."/ c%rc%$6 .#/ $"#(!" -( op(r"+%%6 .c/
)%'#o!! !o0%c
F%0r" &.:. Co-! V7DL )$rc$r"! p(n$r n r(0%)$r -( -(p!")"r( )(r%"!9p"r"!(!3 p( 1 #%+%
Codul !"#$ structural pentru registru de deplasare serial%paralel pe 4 bii este
prezentat n figura 2.:. Codul este scris la nivel structural. Prima dat este definit
operarea unui bistabil de tip # cu activare. Corpul ar)itecturii pentru entitatea ShiftReg
1
-- 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;
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 #. &ai
apoi, aceste patru bistabile sunt conectate mpreun folosind semnale interne, *
7
, *
3
, *
2
i
*
;,
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, Q
0
pn la Q
3
. #e notat c nu putem s folosim semnalele de ieire, Q
0
pn la Q
3
, pentru a conecta mpreun cele patru bistabile, din moment ce semnalele de
ieire nu pot fi citite.
F%0r" &.;. O $r")"r( )%'p!3 " )%'!3r%% p(n$r n r(0%)$r -( -(p!")"r( )(r%"!9
p"r"!(!3 p( 1 #%+% p(n$r <%0r" &.:.
n figura 2.<. este prezentat o trasare simpl a simulrii unui registru de deplasare
serial%paralel. $a primul front al ceasului cresctor de la timpul 377 ns, bitul Serial_in este
7, astfel c pn la al patrulea bit nu e1ist nici o sc)imbare la Q, din moment ce sunt
iniializate pe 7. $a urmtorul front cresctor al ceasului la timpul ;77ns, bitul Serial_in
este un 3 i este deplasat n bitul cel mai de la stnga din =. #e aceea, = are valoarea
3777. $a timpul :77ns, este deplasat alt bit, dndu%i lui = valoarea 3377. $a timpul (77ns,
este deplasat un 7, dndu%i lui = valoarea lui 7337. #e notat c din moment ce biii sunt
deplasai, biii cei mai din dreapta sunt pierdui. $a timpul >77ns, este dezactivat Shift,
astfel c bitul 3 din linia Serial_in nu este deplasat. n final, la timpul 3.3 s, este deplasat
alt bit pe 3.
&.1.1 R(0%)$r -( -(p!")"r( )(r%(9p"r"!(! 4% p"r"!(!9)(r%(
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 e1ecutm mai nti o citire paralel dup
deplasare sau o scriere paralel nainte de deplasare.
."/
SSel
1
SSel
!
Op(r"+%"
7 7 *ici o operaie -de e1., reine valoarea curent/
7 3 ncrcarea paralel a unei noi valori
3 7 #eplasare la dreapta
3 3 5otire la dreapta
.#/
:
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
.c/
F%0r" &.=. Un r(0%)$r -( -(p!")"r( -( !" )(r%"! !" p"r"!(! 4% -( !" p"r"!(! !" )(r%"! p(
1 #%+%5 ."/ c%rc%$6 .#/ $"#(!" -( op(r"+%%6 .c/ )%'#o!! !o0%c.
F%0r" &.>. Co-! V7DL co'por$"'(n$"! p(n$r n r(0%)$r -( -(p!")"r( p( 1 #%+% -(
!" )(r%"! !" p"r"!(! 4% -( !" p"r"!(! !" )(r%"!.
Pentru operaia serie%paralel se va e1ecuta o citire paralel dup ce biii au fost
deplasai. Pe de alt parte, pentru operaia paralel%serie se va e1ecuta 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.(.-a/. Se
utilizeaz 4 multiple1oare pentru a se selecta una dintre situaiile? deplasarea se face la
dreapta, se face rotire la dreapta, registrul se ncarc cu o valoare paralele. +uncionarea
acestui circuit este dependent de cele dou linii de selecie, SHSel
1
i SHSel
0
, care
controleaz ce intrare a multiple1oarelor este selectat. @abela de operaii i simbolul logic
sunt prezentate n figura 2.(. -b/ i -c/. Codul !"#$ comportamental i simpla trasare a
simulrii pentru acest registru de deplasare sunt prezentate n figurile 2.'. i respectiv 2.>.
;
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;
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
F%0r" &.9. O )%'p!3 $r")"r( " )%'!3r%% p(n$r n r(0%)$r -( -(p!")"r( p( 1 #%+% -(
!" )(r%"! !" p"r"!(! 4% -( !" p"r"!(! !" )(r%"!
2.2 "um#r#toare
*umrtoarele, aa cum sugereaz i numele, sunt pentru a numra o secven de
valori. @otui, e1ist 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 7, 3, 2, pn la n%3 i napoi pn la 7. Sunt descrise cteva
numrtoare dup cum urmeaz?
"um#r#tor modulo n. *umr zecimal de la 7 pn la n%3 i napoi pn la 7. #e
e1emplu, o secven a numrtorului modulo : n zecimal este? 7, 3, 2, ; i 4.
"um#r#torul $C% &'ecimal codat (n binar). Precum un numrtor modulo%n, cu
e1cepia cnd n este fi1at la 37. #e aceea, secvena este ntotdeauna de la 7 la >.
"um#r#tor binar pe n bi*i. 9ste similar ca i la numrtorul modulo n doar c
ordinea este de la 7 la 2
n
%3 i napoi la 7, unde n este numrul de bii folosii la
numrare. #e e1emplu, o secven a numrtorului binar pe ; bii n zecimal este 7,
3, 2, ;, 4, :, < i (.
"um#r#tor (n cod +ra,. Secvena este codat astfel nct oricare dou valori
consecutive trebuie s difere doar la un bit. #e e1emplu, o secven posibil a
numrtorului n cod Ara. pe ; bii este posibil astfel 777, 773, 733, 737, 337,
333, 373 i 377.
"um#r#tor inel: Secvena ncepe cu ir de 7 bii urmat de ctre un bit 3, precum
773. ,cest numrtor simplu rotete bii ctre stnga la fiecare numrare. #e
e1emplu, o secven a unui numrtor n inel pe 4 bii este 7773, 7737, 7377, 3777
i napoi la 7773.
&.&.1 N'3r3$or #%n"r c %ncr('(n$"r(
0n 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 3. Putem folosi sumatorul
complet ca intrare pentru registru, dar se poate i mai bine de att. Sumatorul complet
adun doi operanzi plus un carr.. #ar ceea ce dorim este s adunm un 3, astfel c cel
de%al doilea operand pentru sumatorul complet este ntotdeauna un 3. #in moment ce un 3
poate fi de asemenea adus prin intermediul unui semnal carr.%in la sumator, n realitate nu
vom avea nevoie de cea de%a doua intrarea a operandului. ,cest sumator modificat care
adun doar un operand cu autorul lui carr.%in este denumit sumator incomplet &hal-
adder ./). @abela de adevr pentru acesta este prezentat n figura 2.37. -a/. ,vem a ca
singurul operand de intrare, c
in
i c
out
sunt semnale carr.%in i carr.%out, respectiv este
=
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
suma de la adunare. n tabela de adevr, pur i simplu adunm a cu !
in
pentru a da suma
i un posibil car.%out, !
"#t
. #in tabela de adevr vom obine dou ecuaii pentru !
"#t
i
prezentate ca n figura 2.37.-b/. Circuitul ", este prezentat n figura 2.37.-c/ iar simbolul
logic n figura 2.37.-d/.
a c
in
c
out
S
7 7 7 7
7 3 7 3
3 7 7 3
3 3 3 7
."/
c
out
B a C c
in
s B a c
in
.#/
.c/ .-/
F%0r" &.1?. S'"$or %nco'p!($ .@"!< "--(r/5 ."/ $"#(!" -( "-(*3r6 .#/ (c"+%%!(6 .c/
c%rc%$!6 .-/ )%'#o!! !o0%c.
Pot fi legate mpreun cteva sumatoare incomplete, e1act ca i sumatoarele
complete pentru a forma sumatoare pe n bii. Singura intrare a operandului a provine de la
registru. Semnalul carr.%in iniial, c
7
, este utilizat ca un semnal de activare a numrtorului,
din moment ce un 3 pe c
7
va duce la incrementarea cu 3 a valorii registrului, iar un c
7
pe 7
nu incrementeaz registrul. *umrtorul cresctor binar pe 4 bii rezultat este prezentat n
figura 2.33.-a/ mpreun cu tabela de operare i simbolul logic n -b/ i -c/.
."/
Clear Count 0pera*ia
3 1 5esetarea numrtorului pe 7.
7 7 +r sc)imbare
7 3 *umrtor cresctor
.#/
>
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
.c/
F%0r" &.11. Un n'3r3$or #%n"r cr()c3$or .c %ncr('(n$"r(/ p( 1 #%+% c 4$(r0(r( ")%ncron35
."/ c%rc%$!6 .#/ $"#(!" -( op(r"r(6 .c/ )%'#o!! !o0%c.
,tt timp ct este setat C"#nt, numrtorul va incrementa un 3 la fiecare puls de ceas
pn cnd este deselectat C"#nt. ,tunci cnd numrtorul aunge la 2
n
D 3 -care este
ec)ivalent cu numrul binar cu toi pe 3/ urmtorul numrtor va reveni napoi pe 7,
deoarece adunarea cu 3 la un numr binar cu toi bii pe 3 va da o depire -overfloE/ iar
toi biii originali se vor reseta pe 7. Semnalul Clear permite un reset asincron al
numrtorului pe 7.
Codul !"#$ comportamental pentru un numrtor binar cresctor pe 4 bii este prezentat
n figura 2.32. 6nstruciunea 0S9 6999.S@#F$GA6CF0*S6A*9#.,$$ este necesar pentru a
realiza adunrile din S@#F$GA6CF!9C@G5s. Semnalul intern $al#e este folosit pentru a
memora numrtorul curent. ,tunci cnd este setat Clear, $al#e este asignat valorii H7777I
utiliznd e1presia G@"95S BJK7K. ,ltfel, dac C"#nt este setat, atunci $al#e va fi incrementat
cu 3 la urmtorul front cresctor al ceasului. &ai departe, numrul din $al#e este transmis
ctre ieirea numrtorului, =, utiliznd instruciunea Q %& $al#e, deoarece este n afara
blocului P5GC9SS. G trasare simpl a simulrii este prezentat n figura 2.3;.
F%0r" &.1&. Co-! V7DL co'por$"'(n$"! p(n$r n n'3r3$or cr()c3$or #%n"r p( 1 #%+%
9
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;
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
F%0r" &.18. O $r")"r( " )%'!3r%% p(n$r n n'3r3$or cr()c3$or #%n"r p( 1 #%+%
&.&.& N'3r3$or cr()c3$or9-()cr()c3$or #%n"r
Putem proiecta un numrtor binar cresctor%descresctor pe 4 bii este e1act ca i
la proiectare unui numrtor cresctor, cu e1cepia c vom avea nevoie att de sumator
ct i de scztor -circuitul de scdere/ pentru fiecare intrare de date din registru. @abela
de adevr pentru sumatorul.sc#1#tor incomplet este prezentat n figura 2.34.-a/.
Semnalul '"(n este selectat atunci cnd dorim s avem un numrtor cresctor sau
descresctor. Setarea lui '"(n -setarea pe 3/ va determina numrarea descresctoare.
Prima umtate a tabelului este e1act la fel ca i tabela de adevr pentru ",. Pentru a
doua umtate a tabelului, se va e1ecuta o scdere a%c
in
, unde s este diferena scderii iar
c
out
este un 3 dac vom avea nevoie s mprumutm. #e e1emplu, pentru 7%3, vom avea
nevoie s mprumutm, astfel c c
out
este 3. ,tunci cnd mprumutm, vom obine un 2L iar
2%3B3, astfel c s este de asemenea un 3. Cele dou ecuaii rezultate pentru c
out
i s sunt
prezentate n figura 2.34.-b/. Circuitul logic i simbolul pentru sumatorul%scztor
incomplet este prezentat n figura 2.34. -c/ i -d/.
%o2
n
a c
in
c
out
s
7 7 7 7 7
7 7 3 7 3
7 3 7 7 3
7 3 3 3 7
3 7 7 7 7
3 7 3 3 3
3 3 7 7 3
3 3 3 7 7
."/
c
out
B #oEnK a c
in
M #oEn aK c
in
B -#oEn a/ c
in
s B #oEnK -a c
in
/ M #oEn -a c
in
/ B a c
in
.#/
.c/ .-/
F%0r" &.11. S'"$or! , )c3A3$or %nco'p!($ .7AS/5 ."/ $"#(!" -( "-(*3r6 .#/ (c"+%%!(6 .c/
c%rc%$!6 .-/ )%'#o!! !o0%c.
Putem pur i simplu nlocui ",%urile cu ",S%urile n circuitul numrtorului
cresctor pentru a obine circuitul numrtorului cresctor%descresctor, aa cum este
prezentat n figura 2.3:.-a/. @abela de operare i simbolul logic sunt prezentate n figura
1?
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
2.3:.-b/ i -c/. #in nou, semnalul O$erfl"( este setat daci numrtorul trece de la 3333
napoi la 7777.
."/
Clear Count %o2n 0pera*ia
3 1 1 5esetarea numrtorului pe 7.
7 7 1 +r sc)imbare
7 3 7 *umrtor cresctor.
7 3 3 *umrtor descresctor.
.#/
.c/
F%0r" &91: Un n'3r3$or cr()c3$or9-()cr()c3$or #%n"r p( 1 #%+% c 4$(r0(r(
")%ncron35 ."/ c%rc%$6 .#/ $"#(!" -( op(r"+%%6 .c/ )%'#o!! !o0%c6
11
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;
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
F%0r" &.1;. Co-! V7DL p(n$r n n'3r3$or cr()c3$or9-()cr()c3$or #%n"r p( 1#.
Codul !"#$ pentru numrtorul cresctor%descresctor, prezentat n figura 2.3<.
este similar cu codul numrtorului cresctor dar cu o logic n plus pentru semnalul
'"(n. #ac '"(n este setat, atunci $al#e este decrementat cu 3, altfel este incrementat
cu 3. Pentru a face codul un pic diferit, semnalul de ieire al numrtorului, =, este
declarat ca un ntreg cu intervalul cuprins ntre 7 i 3:. ,cest interval, bineneles, este
intervalul pentru o valoare binar pe 4 bii. &ai departe, memorarea pentru numrtorul
curent, $al#e, este declarat mai degrab ca o variabil de tip ntreg dect un semnal. #e
notat de asemenea c instruciunea de asignare a semnalului Q %& $al#e, este plasat n
interiorul blocului P5GC9SS. n loc s devin o instruciune concurenial -atunci cnd a
fost plasat n afara blocului P5GC9SS din figura 2.32/ acum este o instruciune
secvenial. G trasare simpl a simulrii este prezentat n figura 2.3(.
F%0r" &.1=. O $r")"r( " )%'!3r%% p(n$r n n'3r3$or cr()c3$or9-()cr()c3$or #%n"r
p( 1 #%+%
&.&.8 N'3r3$or cr()c3$or9-()cr()c3$or #%n"r c 2nc3rc"r( p"r"!(!3
Pentru a realiza un numrtor mult mai versatil, trebuie s fim capabili s ncepem
secvena numrtorului cu un numr diferit de zero. ,cest lucru este realizat uor prin
modificarea circuitului numrtorului prezentat n figura 2.3'.-a/. Singura diferen dintre
acest circuit i circuitul numrtorului cresctor%descresctor prezentat n figura 2.3:.-a/
este aceea c este adus un multiple1or cu 2 intrri ntre ieirea a ",S%ului i o intrare #
i,
la intrarea n bistabil. 5ealiznd acest lucru, intrarea bistabilului poate fi selectat fie
pentru o valoare de intrare e1tern -dac este setat )"a*/ sau pentru urmtoarea valoare
numrat de la ieirea ",S%ului -dac nu este setat )"a*/. #ac este selectat ieirea lui
",S, atunci circuitul funcioneaz e1act ca nainte. #ac este selectat intrarea e1tern,
atunci valoarea de la liniile de date a intrrii se ncarc n registru. @abela de operare i
simbolul logic pentru acest circuit sunt prezetate n figura 2.3'. -b/ i -c/.
@rebuie s pstrm linia Clear, astfel nct numrtorul s fie nc iniializat cu 7 la
orice moment de timp. #e notat c e1ist un moment de timp diferit ntre setarea liniei
Clear pn la resetarea numrtorului cu 7, fa de ncrcarea cu 7 prin setarea liniei
)"a* i setarea intrrii de date cu 7. n primul caz, numrtorul este resetat pe 7 imediat
ce este setat Clear, n timp ce cellalt caz va reseta numrtorul la 7 la urmtorul front
cresctor al ceasului.
,cest numrtor va ncepe cu orice valoare care va fi ncrcat ntr%un registru, dar
ntotdeauna va numra cresctor pn la 2
n
%3 unde n este numrul biilor pentru un
registru. ,cest lucru este posibil atunci cnd registrul conine toi biii pe 3. ,tunci cnd
numrtorul aunge la sfritul secvenei numrtorului, ntotdeauna ciclul se va ntoarce
napoi pe 7 i nu la valoarea iniial care a fost ncrcat. @otui, putem aduce un
comparator simplu la acest circuit al numrtorului astfel nct secvena de numrare s
1&
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.
."/
Clear Load Count %o2n 0pera*ia
3 1 1 1 5esetarea numrtorului pe 7.
7 7 7 1 +r sc)imbare
7 7 3 7 *umrtor cresctor.
7 7 3 3 *umrtor descresctor.
7 3 1 1 !aloarea de ncrcare.
.#/
.c/
F%0r" &.1>. Un n'3r3$or cr()c3$or9-()cr()c3$or #%n"r p( 1 #%+% c 2nc3rc"r(
p"r"!(!3 4% 4$(r0(r( ")%ncron35 ."/ c%rc%$6 .#/ $"#(!" -( op(r"+%%6 .c/ )%'#o!! !o0%c.
&.&.1 N'3r3$or cr()c3$or -( $%p BCD
G limitare cu numrtorul cresctor%descresctor binar cu ncrcare paralel este
c ntotdeauna numr pn la 2
n
D 3 pentru un registru pe n bii dup care ciclul se
rentoarce napoi pe 7. #ac dorim ca o secven a numrtorului s se termine cu un
numr mai mic dect 2
n
D 3, 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. ,tunci cnd
numrtorul atinge acest nou numr de sfrit, comparatorul activeaz intrrile de date.
*umrtorul poate ncepe de la un numr n care este ncrcat. @otui, dac dorim
ca secvena de numrare s se ntoarc napoi de fiecare dat la acest numr de nceput,
vom avea nevoie s setm semnalul )"a*, la sfritul fiecrei secvene de numrare, care
va genera rencrcarea acestui nou numr de nceput. 6eirea comparatorului este
conectat la linia )"a*, astfel nct atunci cnd numrtorul aunge la numrul de sfrit,
18
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
va fi setat linia )"a* i registrul va fi ncrcat cu numrul de nceput. #e aceea,
numrtoarea se poate termina cu un nou numr de sfrit i se poate rentoarce la un
nou numr de nceput.
F%0r" &.19. N'3r3$or cr()c3$or BCD
*umrtorul cresctor n codul binar zecimal -8C#/ numr de la 7 la > iar apoi se
ntoarce napoi pe 7. Circuitul pentru acesta este prezentat n figura 2.3>. 6nima circuitului
este doar un numrtor cresctor%descresctor binar pe 4 bii cu ncrcare paralel. 9ste
folosit o poart ,*# cu 4 intrri pentru a compara valoarea numrtorului cu numrul 7.
,tunci cnd valoarea numrtorului este >, poarta ,*# a comparatorul transmite un 3
pentru a se seta linia )"a*. Gdat ce linia )"a* este setat, valoarea urmtoare a
numrtorului va fi valoarea ncrcat de la intrarea #. #in moment ce # este conectat cu
toate intrrile la 7, numrtorul se va ntoarce pe 7 la urmtorul front cresctor al ceasului.
$inia '"(n este conectat la 7, din moment ce dorim s numrm cresctor.
Pentru ca numrarea s aib o secven egal n timp pentru fiecare numr, trebuie
s utilizm intrarea )"a* pentru a ncrca valoarea 7, n loc de a utiliza intrarea asincron
Clear. #ac conectm ieirea porii ,*# la intrarea Clear n loc de intrarea )"a*, vom
obine secvena corect a numrtorului. @otui, atunci cnd numrtorul aunge la >, se
va sc)imba pe 7 aproape imediat, deoarece atunci cnd ieirea porii ,*# transmite
semnalul asincron Clear, numrtorul este resetat pe 7 imediat i nu la urmtorul front
cresctor al ceasului.
3xemplul 1: 5ealizarea unui circuit pentru numrtorul cresctor
,cest e1emplu 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 ; la ' -n zecimal/ i napoi la ;.
Circuitul pentru acest numrtor, prezentat n figura 2.27, este aproape identic cu
circuitul numrtorului cresctor 8C#. Singura diferen este aceea c avem nevoie s
testm numrul ' n loc de > ca ultim numr al secvenei, iar primul numr cu care se face
ncrcarea este ; n loc de 7. #e aceea, intrrile porii ,*# pentru compararea cu ieirea
numrtorului binar sunt pregtite pentru numrul 3777 iar numrul cu care se face
ncrcarea este 7733.
11
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
F%0r" &.&?. N'3r3$or p(n$r (B('p!! 1.
&.&.: N'3r3$or cr()c3$or9-()cr()c3$or BCD
Putem obine un numrtor cresctor%descresctor 8C# printr%o mic modificare a
circuitului numrtorului 8C# cresctor. *umrtorul numr de la 7 la > pentru o
secven cresctoare i de la > la 7 pentru o secven descresctoare. Pentru secvena
cresctoare, atunci cnd numrtorul aunge la >, linia )"a* este setat pentru a se
ncrca cu 7 -7777 n binar/. Pentru secvena descresctoare, atunci cnd numrtorul
aunge la 7, linia )"a* este setat pentru a se ncrca cu > -3773 n binar/.
n figura 2.23. este prezentat circuitul numrtorului cresctor%descresctor 8C#.
Sunt utilizate dou pori ,*# cu : intrri care acioneaz ca un comparator. Poarta
etic)etat H0pI va scoate un 3 atunci cnd nu este setat '"(n -de e1., numrtor
descresctor/ iar numrtorul este >. Poarta etic)etat H#nI va scoate un 3 atunci cnd
este setat '"(n, iar numrtorul este 7. Semnalul )"a* este setat pe una dintre aceste
dou pori ,*#. Sunt folosite patru multiple1oare cu 2 intri i 3 ieire pentru a selecta
care dintre acestea dou va genera valorile de nceput, 7777 sau 3773, pentru a fi
ncrcate atunci cnd linia )"a* este setat. $iniile de selecie pentru aceste patru
multuple1oare sunt conectate n comun la semnalul '"(n, astfel nct atunci cnd
numrtorul este numrtor cresctor, este ncrcat cu 7777 i cu 3773 atunci cnd
numrtorul este cu decrementare. ,r trebuie s fie clar c cele dou valori, 7777 i 3773,
pot fi ncrcate i fr s folosim cele patru multiple1oare -dou au ambele intrri pe 7/.
F%0r" &.&1. N'3r3$or cr()c3$or9-()cr()c3$or BCD.
3xemplul 2: 5ealizarea unui circuit numrtor cresctor%descresctor
,cest e1emplu 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, :, >, 3; i 34 se repet.
1:
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
*umrtorul 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 : numere, astfel c
vom proiecta mai nti un numrtor care numr de la 7 la 4. Circuitul de ieire va mapa
atunci numerele, 7, 3, 2, ; i 4 pentru numerele de ieire solicitate 2, :, >, 3; i 34.
In$r3r%
A(c%'"!(
C8 C& C1 C? I(4%r%
A(c%'"!(
C8 C& C1 C?
7 7 7 7 7 2 7 7 3 7
3 7 7 7 3 : 7 3 7 3
2 7 7 3 7 > 3 7 7 3
; 7 7 3 3 3; 3 3 7 3
4 7 3 7 7 34 3 3 3 7
5estul de combinaii N 1 1 1
."/
G
7
B =
3
M =
7
G
3
B =
3
K=
7
K
G
2
B =
2
M =
7
G
;
B =
2
M =
3
.#/
.c/
F%0r" &.&?. N'3r3$or p(n$r (B('p!! &
6ntrrile circuitului de ieire sunt cei patru bii de ieire ai numrtorului =
;
, =
2
, =
3
i =
7
.
6eirile din acest circuit sunt cei patru bii modificai, =
;
, =
2
, =
3
i =
7
pentru a reprezenta
cele : numere de ieire. @abela 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 O completat cu 1 pentru
situaiile care nu conteaz. Circuitul numrtorului complet este prezentat n figura 2.22-c/.
2.4 Fiierele cu regitrii &registrele unui microprocesor)
,tunci cnd dorim s memorm concurenial cteva numere ntr%un circuit digital,
putem folosi n circuit civa regitrii individuali. @otui, e1ist 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. ,stfel, n loc s avem civa regitrii individuali, vom dori s avem
o arie de regitri. ,cest set de regitrii este cunoscut ca fiind un -iier de regitrii
&register -ile). ntr%un fiier de registre, toate semnalele de control respective pentru
regitrii individuali sunt conectate n comun. &ai departe, toate liniile de ieire i de intrare
a datei respective pentru toi regitrii sunt de asemenea conectate n comun. #e e1emplu,
1;
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
liniile )"a* pentru toi regitrii sunt conectate mpreun, iar toate liniile de date d
;
sunt
conectate mpreun. ,stfel 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 ,$0, de obicei fiierul de
registre este folosit pentru operanzii surs ai ,$0. #in moment ce ,$0 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. @oate aceste trei porturi vor avea propriile lor linii de activare i de adrese. ,tunci
cnd linia de activare pentru citire nu este setat, portul de citire va scoate un 7. 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. $inia 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 41' -patru regitrii, fiecare avnd cte '
bii/ este prezentat n figura 2.2;.
F%0r" &.&8. S%'#o!! !o0%c p(n$r n <%4%(r -( r(0%4$r%% 1B>
Portul de scriere pe ' bii este denumit +n iar porturile de citire pe ' bii sunt
denumite P"rt A i P"rt ,. -E este linia de activare a scrierii activ pe 3. ,ceast linie
trebuie s fie setat pentru a scrie o valoare ntr%un registru al fiierului de registre. -A
1
i
-A
0
sunt cele dou linii de adrese pentru selecia unei locaii de scriere. #in moment ce
e1ist patru locaii n fiierul registrului, sunt necesare astfel dou linii de adrese. $inia
RAE este linia de activare a citirii pentru P"rt#l A. $iniile selectate pentru cele dou adrese
de citire pentru P"rt#l A sunt RAA
3
i RAA
0
. Pentru P"rt#l ,, vom avea linia de activare a
P"rt#l ,, R,E, i cele dou linii de adrese, R,A
1
i R,A
0
.
Pentru a controla ieirea de date, putem folosi o poart ,*# cu 2 intrri pentru a
activa sau dezactiva fiecare dintre liniile de ieire a datei, =
i
. !om dori ca s controlm
toate liniile de ieire a datei laolalt, de aceea, o intrare de la toate porile ,*# cu dou
intrri vor fi conectate mpreun. ,tunci cnd aceast intrare comun este setat pe 7,
toate porile ,*# vor avea ieirea 7. ,tunci cnd aceast intrare comun este setat pe 3,
ieirea pentru toate porile ,*# va fi valoarea de la intrare. G alternativ la folosirea
porilor ,*#, pentru a controla porturile de citire, este aceea n care se folosete buffere
cu trei stri.
+iierul 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 ,*#
cu 2 intrri pentru linia de ieire, =
i
, vom avea nevoie s conectm dou pori ,*# la
fiecare linie de ieire? una pentru P"rt#l A i una pentru P"rt#l ,. 0n fiier de registre cu '
legturi pe ' bii va avea ' pori ,*# pentru P"rt#l A i alte ' pori ,*# pentru P"rt#l ,,
aa cum este prezentat n figura 2%24. AE i ,E sunt semnale de activare pentru P"rt#l A
i pentru P"rt#l ,. Pentru fiecare port de citire, este conectat n comun semnalul de
1=
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
activare a citirii cu o intrare la toate cele ' pori ,*#. , doua intrare de la fiecare din cele '
pori ,*# leag cele ' linii de ieire, de la =
7
la =
(
.
F%0r" &.&1. O c(!!3 " <%4%(r!% r(0%)$r .D%-(/ !(0"$ p( > #%+% c n por$ -( )cr%(r(
4% -o3 por$r% -( c%$%r(.
Pentru un fiier de registre 41', vom avea nevoie s folosim patru celule ale
fiierului de registre pe ' 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, -A
1
,
-A
0
, RAA
0
, RAA
0
, R,A
1
i R,A
0
. 0n decodificator este folosit pentru adresele de scriere,
P,
3
i P,
7
L unul pentru adresele de citire a P"rt#l#i A, 5,,
3
i 5,,
7
L iar unul pentru
adresele de citire a P"rt#l#i ,, 58,
3
i 58,
7
. 6eirile decodificatorului sunt folosite pentru
a activa liniile individuale ale registrelor din fiierul de registre pentru scriere, )"a*, i
pentru liniile de activare a citirii, AE i ,E. Circuitul complet pentru un fiier de registre 41'
este prezentat n figura 2.2:.
#e e1emplu, pentru a citi din 5egistrul ; prin P"rt#l ,, trebuie s fie setat linia
589, iar liniile adresei P"rt#l#i ,, 58,
7
i 58,
3
trebuie s fie setate pe 33
2
-pentru
5egistrul ;/. #ata din registrul ; va fi imediat disponibil pe P"rt#l ,. Pentru a scrie o
valoare la 5egistrul 2, liniile adresei de scriere, P,
7
i P,
3
sunt setate pe 37
2
, i atunci
este setat linia de activare a scrierii, P9. ,tunci, data de la intrarea # este scris n
5egistrul 2 la urmtorul front activ -cresctor/ al ceasului. #in 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.
1>
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
F%0r" &.&:. Un c%rc%$ p(n$r <%4%(r! -( r(0%4$r% 1B> c n por$ -( )cr%(r( 4% -o3
por$r% -( c%$%r(
#in 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. #in cauza acestui lucru, acelai registru poate
fi accesat att pentru citire ct i pentru scriere n acelai timpL 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. ,tunci 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. ,ceast temporizare este
prezentat n figura 2.2<. Ceea ce este important de re*inut este aceea c# atunci c5nd
sunt executate opera*iile de scriere c5t i de citire (n acelai timp (n acelai registru6
(ntotdeauna opera*ia de citire citete 7aloarea curent# memorat# (n registru i
niciodat# nu se citete noua 7aloare care este scris# prin intermediul opera*iei de
scriere.
19
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

F%0r" &.&;. T%'p%% -( )cr%(r( 4% -( c%$%r( p(n$r o c(!!3 " <%4%(r!% -( r(0%)$r(.
Codul !"#$ pentru un fiier de registre este prezentat n figura 2.2(. Codul
principal este compus din trei procese? procesul de scriere i dou procese pentru portul
de citire. ,ceste trei procese sunt identice prin cele ; instruciuni concureniale n care
sunt e1ecutate n paralel. Procesul de scriere este sensibil la ceas, i asta din cauza
instruciunii H6+ clocQI din procesL o scriere apare doar la un front cresctor al semnalului
de ceas. Cele dou procese ale porturilor de citire nu sunt sensibile la ceas ci doar la
activarea citirii i la semnalele adresei de citire. ,stfel data de citire este disponibil
imediat ce aceste linii sunt setate. +uncia CG*!F6*@9A95-P,/ convertete P,
S@#F$GA6CF!9C@G5 la un ntreg astfel nct adresele s poat fi utilizate ca un inde1 ntr%o
arie 5+.
G trasare simpl a simulrii este prezentat n figura 2.2'. n trasarea simulrii,
ambele adrese de scriere P, i adresa de citire a Portului ,, 5,,, sunt setate pentru
5egistrul ;. $a 7ns, data de intrare, #, este :. Cu activarea scrierii, P9, setat, data :
este memorat n 5+ -;/ la urmtorul front cresctor al ceasului, care se ntmpl la
377ns. ,tunci cnd este setat 5,9 la 277ns, data : din 5+-;/ este imediat disponibil pe
Portul ,. $a 477ns, ambele P9 i 5,9 sunt setate n acelai timp. #ata curent : din
5+-;/ apare imediat pe Portul ,. @otui, n 5+-;/ este scris noua dat ( la :77ns, la
urmtorul front cresctor al ceasului. *oua dat ( este disponibil pe Portul , doar dup
timpul :77ns.
&?
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; -- necesar pentru CONV_INTEGER()
ENTITY regfile IS port(
clock: IN std_logic; --ceas
WE: IN std_logic; --activarea scrierii
WA: IN std_logic_vector(1 DOWNTO 0); --adresa de scriere
D: IN std_logic_vector(7 DOWNTO 0); --intrare
RAE, RBE: IN std_logic; --porturi de activare a citirii A & B
RAA, RBA: IN std_logic_vector(1 DOWNTO 0); --Porturile
adreselor de citire A & B
PortA, PortB: OUT std_logic_vector(7 DOWNTO 0)); --portul de
ie ire A & B
END regfile;
ARCHITECTURE Behavioral OF regfile IS
SUBTYPE reg IS std_logic_vector(7 DOWNTO 0);
TYPE regArray IS array(0 to 3) OF reg;
SIGNAL RF: regArray; -- con inutul fi ierului registru
BEGIN
WritePort: PROCESS (clock)
BEGIN
IF (clock'EVENT AND clock='1') THEN
IF (WE = '1') THEN
RF(CONV_INTEGER(WA)) <= D; -- pentru a face conversia din vector la
ntreg
END IF;
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');
END IF;
END PROCESS;
END Behavioral;
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR

F%0r" &.&=. Co-! V7DL p(n$r n <%4%(r r(0%)$r 1B> c n por$ -( )cr%(r( 4% -o3
por$r% -( c%$%r(.
&1
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
F%0r" &.&>. O )%'p!3 $r")"r( " )%'!3r%% p(n$r n <%4%(r -( r(0%4$r% 1B>
2.8 SR/9 &Static Random /cces 9emor,)
G alt component principal dintr%un sistem de calcul este memoria. ,ceasta se
poate referi fie la memoria cu acces aleatoriu -5,&/ sau la memoria care permite doar
citirea -5G&/. Putem realiza memoria n acelai mod cum am realizat i fiierul de registre
dar cu mai multe locaii de memorare. @otui, e1ist cteva motive pentru care nu dorim
s realizm memoria aa. 0n 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. 0n 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. ,cest 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.2>.-a/, ne prezint toate legturile pentru un c)ip 5,&.
91ist un set de linii de date, #
i
i un set de linii de adrese, ,
i
.
*umrul liniilor de adrese este dependent de cte locaii sunt n c)ipul de memorie.
#e e1emplu, un c)ip de memorie de :32 b.tes va avea ' linii de date -' bii B 3 octetRb.te/
i nou linii de adrese -2
>
B :32/.
+uncionarea unui c)ip de memorie este prezentat n figura 2.2>.-b/.
."/
C3 :R 0pera*ia
7 1 +r
3 7 Citire din locaia de memorie selectat prin liniile de adrese.
3 3 Scrierea n locaia de memorie selectat prin liniile de adrese.
.#/
F%0r" &.&9. Un c@%p RAM -( &
n
B '5 ."/ )%'#o!! !o0%c6 .#/ $"#(!" -( op(r"+%%.
#e notat c n figura 2.2>.-a/, circuitul 5,& nu are nevoie de un semnal de ceas.
+igura 2.;7.-a/ prezint o diagram de stare pentru operaia de scriere n memorie. n
figura 2.;7. -b/ se prezint o diagram de stare pentru operaia de citire.
+iecare bit din c)ip%ul 5,& static este stocat n celula de memorie aa cum se
prezint n figura 2.;3.-a/. Principala component din celul este un latc) de tip # cu
activare. 9ste conectat un buffer cu trei stri la ieirea latc)%ului # ca s se poat face
&&
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
citirea selectiv din acesta. Semnalul Cell ena.le este folosit pentru a activa celula de
memorie att pentru citire ct i pentru scriere.
."/ .#/
F%0r" &.8?. D%"0r"'" -( )$"r( " '('or%(%5 ."/ op(r"+%" -( c%$%r(6 .#/ op(r"+%" -(
)cr%(r(.
."/ .#/
F%0r" &.81. C(!!" -( '('or%(5 ."/ )c@('36 .#/ )%'#o!
Pentru a realiza un c)ip 5,& static 414, avem nevoie de 3< celule de memorie
care formeaz un grid 414, aa cum se prezint n figura 2.;2. +iecare rnd formeaz o
singur locaie de memorare iar numrul de celule de memorare dintr%un rnd determin
limea bitului pentru fiecare locaie.
Codul !"#$ pentru un c)ip 5,& 3<14 este prezentat n figura 2.;;. Portul de date
bidirecional, #, este declarat ca 80++95 astfel c poate fi citit ct i scris. Coninutul
memoriei actuale este memorat ntr%o variabil /e/, care este o arie de dimensiune 3< a
tipului S@#F$GA6CF!9C@G5.
F%0r" &.8&. C%rc%$! RAM 1B1
&8
UNIVERSITATEA TEFAN CEL MARE SUCEAVA
FACULTATEA DE INGINERIE ELECTRIC I TIINA CALCULATOARELOR
F%0r" &.88. Co-! V7DL p(n$r n c@%p RAM 1;B1.
8. D()<34r"r(" !cr3r%%
3. 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 e1emplele scrise n !"#$.

&1
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;