240 LECT¸ IA 17. Registre ¸si num˘ar˘atoare
Registre serie-serie (cod Verilog)
input[7:0] Dff;
reg[7:0] Qff;
always @(posedge ck or posedge resetAsync)
if (resetAsync) Qff <= ’b0; else
if (load) Qff <= {Qff[6:0], serialIn};
assign serialOut = Qff[7];
1. Un num˘ar˘ator Johnson (Engl. ”Johnson counter”) utilizeaz˘a N bistabile pentru a obt¸ine un ciclu de num˘arare
de 2 × N secvent¸e. Structura acestui num˘ar˘ator, figura 17.21, este similar˘a cu a num˘ar˘atorului ˆın inel, prezint˘a
N bistabile D, fiecare avˆand ie¸sirea conectat˘a la intrarea urm˘atorului bistabil, cu except¸ia unui bistabil care
utilizeaz˘a ie¸sirea inversat˘a. De obicei, num˘ar˘atorul este init¸ializat cu o valoare avˆand tot¸i bit¸ii egali cu 0. La
fiecare comutare, bitul mai put¸in semnificativ este negat ¸si reintrodus la intrarea lant¸ului de bistabile.
Figura 17.21 Num˘ar˘ator Johnson de 4 bit¸i, problema 1.
a) Listat¸i secvent¸a de st˘ari a num˘ar˘atorului ˆın inel pornind de la starea init¸ial˘a 0000.
b) Listat¸i celelalte st˘ari ale num˘ar˘atorului ˆın inel ¸si precizat¸i evolut¸ia acestuia ˆın ipoteza aparit¸iei acestora.
c) Modificat¸i circuitul astfel ˆıncˆat, ˆın ipoteza unei st˘ari din afara ciclului dorit, num˘ar˘atorul s˘a revin˘a ˆın ciclul
proiectat (ˆın urm˘atoarea stare sau ˆıntr-un num˘ar finit de st˘ari). Evaluat¸i solut¸iile din punct de vedere al costului
implement˘arii.
Solut¸ie
a) Secvent¸a de st˘ari pe care num˘ar˘atorul le parcurge pornind din starea 0000 este urm˘atoarea:
0000, 1000, 1100, 1111, 1110, 0111, 0011, 0001, 0000, ...
b) Din totalul de 16 st˘ari posibile r˘amˆan 8 st˘ari care nu fac parte din ciclul dorit al num˘ar˘atorului:
0010, 0100, 0101, 0110, 1001, 1010, 1011, 1101, 0010, ....
Din starea 0010 evolut¸ia este urm˘atoarea:
0010, 1001, 0100, 1010, 1101, 0110, 1011, 0101
Se observ˘a c˘a, ˆın cazul aparit¸iei oric˘arei st˘ari din afara ciclului dorit, num˘ar˘atorul va trece succesiv prin toate
cele 8 st˘ari ¸si nu va reveni la funct¸ionarea dorit˘a.
c) Circuitul are 8 st˘ari ˆın ciclul dorit ¸si 8 st˘ari ˆıntr-un alt ciclu. Pentru a reveni la ciclul proiectat, ˆın cazul
aparit¸iei unei st˘ari nedorite, circuitul trebuie extins cu logic˘a adit¸ional˘a. Dac˘a se dore¸ste ca num˘ar˘atorul s˘a revin˘a
la ciclul normal ˆıntr-un singur tact trebuie s˘a se detecteze toate st˘arile ilegale ¸si s˘a se fort¸eze ca urm˘atoarea stare
s˘a fie una din ciclul valid (de exemplu 0000).
ˆ
In tabelul de adev˘ar s-a notat Clear1 semnalul care detecteaz˘a
aparit¸ia unei st˘ari din afara ciclului. Dac˘a Clear1 = 1 starea urm˘atoare este 0000. Acest lucru este implementat
cu circuitul din figura 17.22-a.
Clear1 = Z
3
· Z
1
· Z
0
+ Z
3
· Z
2
· Z
1
+ Z
3
· Z
2
· Z
1
+ Z
3
· Z
1
· Z
0
Dac˘a se dore¸ste ca num˘ar˘atorul s˘a revin˘a la ciclul normal, dar nu neap˘arat ˆıntr-un singur tact, va trebui s˘a se
detecteze o singur˘a stare ilegal˘a (de exemplu, 0010) ¸si s˘a se fort¸eze ca urm˘atoarea stare s˘a fie una din ciclul
valid (de exemplu 0000). Revenirea se va obt¸ine ˆın maximum 8 tacte, presupunˆand c˘a num˘ar˘atorul este init¸ial
ˆın starea 1001 ¸si parcurge tot ciclul alternativ.
ˆ
In tabelul de adev˘ar s-a notat Clear semmnalul care detecteaz˘a
aparit¸ia st˘ari 1001 (din afara ciclului). Dac˘a Clear = 1 starea urm˘atoare este 0000. Acest lucru este implementat
cu circuitul din figura 17.22-b.
Clear = Z
3
· Z
2
· Z
1
· Z
0