Sunteți pe pagina 1din 6

LATCH-URI I BISTABILE

IMPLEMENTATE N VERILOG

1. Scopul lucrrii
Descrierea structural i comportamental a celor mai simple circuite
secveniale (structurile de tip latch i bistabil) i nelegerea funcionrii lor prin testare
cu ajutorul simulatorului Veriwell.

2. Aparate necesare
- calculator compatibil Pentium
- sistem de operare Windows 95 sau superior
- programul VeriWell 2.0, produs de Wellspring Solutions, versiunea
freeware, disponibil pe Internet

3. Consideraii teoretice
Cea mai simpl structur secvenial este obinut prin introducerea unei reacii
de la ieirea unei pori I-NU cu dou intrri la una din intrrile sale. Circuitul este
prezentat n figura 3.1, iar analiza lui, prin reprezentarea funcionrii cu ajutorul
formelor de und n timp (cronograma circuitului), este realizat cu ajutorul modelului
logic asincron, care ine seam de timpul de propagare prin poart, notat cu .
O simulare Verilog a funcionrii circuitului se poate face astfel:
module wave_gen(out); // modulul are numai un port de ieire

output out;
reg enable; // intrare care nchide sau deschide bucla

initial begin enable = 0;


#15 enable = 1;
#50 enable = 0;
#15 $stop; // se oprete simularea la t = 80
end

nand #1 (out, enable, out); // descrierea structural a circuitului


initial $vw_dumpvars;

endmodule

B
A
Q
A Q

Q(t + ) = A(t) . Q(t) =


A

= A(t) + Q(t) B
Q
t LH = t r <

Fig. 3.1 Cea mai simpl structur secvenial

1
Se poate observa c semnalul enable, dei este o intrare a circuitului, nu este
considerat ca port de intrare pentru c valoarea sa este atribuit n interiorul modulului.
Observm c ieirea circuitului i modific valoarea chiar i atunci cnd valoarea lui
enable este constant, comportament tipic circuitelor secveniale, sau cu memorie.
Acest comportament se datoreaz buclei de reacie i nu poate aprea niciodat n
cazul circuitelor combinaionale.
n general, efectul introducerii unei bucle de reacie peste un numr impar de
pori logice inversoare genereaz un comportament de astabil. Dac numrul de
inversoare este par, atunci poate aprea funcia de memorare. Cel mai simplu circuit de
memorare, care folosete numai dou pori inversoare, este elementul de memorie S R
sau latch-ul S R . Schema logic a circuitului este prezentat n figura 3.2, n dou
variante echivalente, iar tabelul tranziiilor i ecuaiile care descriu funcionarea
circuitului sunt date n figura 3.3. Descrierea Verilog a circuitului poate fi urmtoarea:
module latch(q, q_negat, s_negat, r_negat);

input s_negat, r_negat;


output q, q_negat;

nand #1 gate_1(q, q_negat, s_negat);


nand #1 gate_2(q_negat, q, r_negat);

endmodule

iar programul de testare a circuitului:


module test_latch;

reg s_negat, r_negat;


wire q, q_negat;

initial #60 $stop;

initial begin s_negat = 1;


r_negat = 1;
#10 s_negat = 0;
#5 s_negat = 1;
#10 r_negat = 0;
#2 r_negat = 1;
#10 s_negat = 0;
r_negat = 0;
#5 r_negat = 1;
s_negat = 1;
end

latch dut(q, q_negat, s_negat,r_negat);


initial $monitor("timp=%0d ns=%b nr=%b q=%b nq=%b",
$time, s_negat, r_negat, q, q_negat);
initial $vw_dumpvars;

endmodule

Se observ c tranziia simultan a intrrilor din 0 logic n 1 logic determin o


oscilaie a ieirilor, adic transform circuitul ntr-un astabil. De fapt, datorit timpilor .

S
Q
S Q
Q
R
Q
R
Fig. 3.2 Schema logic a latch-ului S R

2
S(t) R(t) Q(t+) Q(t+) Dac t pHL t pLH = :
0 0 1 1 interzis
0 1 1 0 Q(t+2 ) = R(t+ ) + S(t) + Q(t)
1 0 0 1
1 1 Q(t) Q(t) S(t) + R(t) = 1

Fig. 3.3 Tabelul i ecuaiile care descriu funcionarea latch-ului

S CL(t) S(t) R(t) Q(t+) Q(t+)


Q 1 0 0 Q(t) Q(t)
CL 1 0 1 1 0
1 1 0 0 1
Q 1 1 1 1 1 interzis
0 x x Q(t) Q(t)
R
Fig. 3.4 Latch-ul SR cu ceas i tabelul tranziiilor

de propagare uor diferii prin cele dou pori, n realitate ieirile circuitului capt una
din urmtoarele combinaii: fie QQ 01 , fie QQ 10 . Datorit acestor
asimetrii din circuitul real, care nu pot fi controlate de proiectant, combinaia 00
aplicat pe intrri este interzis.
n figura 3.4 s-au reprezentat latch-ul SR cu ceas i tabelul tranziiilor pentru
acest circuit. Acest circuit funcioneaz la fel ca i cel anterior dac intrarea de ceas CL
= 1 (primul nivel de pori este deschis) i este blocat, memornd starea anterioar, dac
CL = 0. Datorit inversrii semnalelor prin nivelul de pori de la intrri, semnalele devin
acum active pe 1 logic, de unde i modificarea denumirii lor n S i R.
n figura 3.5 s-au reprezentat bistabilul de tip D (modelul circuitului CMOS
4013) i tabelul tranziiilor pentru acest bistabil. Intrarea de date D este sincron, ea
determin modificarea ieirilor numai pe frontul cresctor al ceasului, n timp ce
intrrile S i R seteaz (Q = 1) sau reseteaz (Q = 0) bistabilul, asincron, fr nicio
legtur cu ceasul, imediat ce sunt activate (prin 1 logic). Modelul Verilog al circuitului
este urmtorul:
module D_flipflop(q, q_negat, d, set, reset, clock);

input d, set, reset, clock;


output q, q_negat;
reg q;

always @(posedge clock or posedge set or posedge reset)


if (set) #1 q = 1;
else if (reset) #1 q = 0;
else if(clock) #2 q = d;

assign #1 q_negat = ~q;

endmodule

CLK D S R Q Q
S 0 0 0 0 1
D Q
1 0 0 1 0
x x 1 0 1 0
CLK Q x x 0 1 0 1
R
x x 1 1 1 1

Fig. 3.5 Bistabilul D cu basculare pe front pozitiv i tabelul tranziiilor

3
Specificaia always @ indic faptul c de fiecare dat cnd se modific
semnalele din list, se execut instruciunile care urmeaz. Modificarea acestor semnale
trebuie s se fac pe frontul cresctor, dup cum sugereaz specificaia posedge.
Putem observa c modelul prezentat nu descrie i cazul atipic cnd sunt activate ambele
intrri asincrone ale bistabilului, S i R, caz n care, conform tabelului tranziiilor
bistabilului D, ambele ieiri trec n 1 logic. Modulul de testare a circuitului, poate fi cel
descris mai jos :
module test_D_flipflop;

reg d, set, reset, clock;

initial begin clock = 0;


forever #5 clock = ~clock;
end

initial begin {d, set, reset} = 3'b000;


#23 {d, set, reset} = 3'b010;
#25 {d, set, reset} = 3'b000;
#20 {d, set, reset} = 3'b100;
#20 {d, set, reset} = 3'b100;
#27 {d, set, reset} = 3'b101;
#10 {d, set, reset} = 3'b100;
#20 $stop;
end

D_flipflop our_D_flipflop(q, q_negat, d, set, reset, clock);

initial $vw_dumpvars;

endmodule

n figura 3.6 s-a reprezentat o structur de bistabil master-slave, folosind latch-


uri SR cu ceas identice. O descriere structural a latch-ului SR cu ceas format din 4
pori I-NU este dat n exemplul de mai jos. Aici descrierea structural este mai
simpl dect cea comportamental, pentru care trebuie s descriem toate combinaiile
binare aplicate intrrilor:
module clocked_latch(q, q_negat, s, r, cl);

input s,r,cl;
output q, q_negat;

wire w1, w2;

nand #1 gate_3(q, q_negat, w1),


gate_2(q_negat, q, w2),
gate_1(w1, s, cl),
gate_0(w2, r, cl);

endmodule

master slave master-slave

S S Q S Q Q S S Q Q

R R Q R Q Q R R Q Q
CL CL CLK

CLK CLK

Fig. 3.6 Bistabil SR master-slave

4
Descrierea structurii master-slave se poate face folosind urmtorul model:
module master_slave(q, q_negat, set, reset, clock);

input set, reset, clock;


output q, q_negat;

wire clock_negat, master_q, master_q_negat;

clocked_latch master_latch(master_q, master_q_negat, set, reset, clock),


slave_latch(q, q_negat, master_q, master_q_negat, clock_negat);

not #1 clock_inverter(clock_negat, clock);

endmodule

Fiierul care conine modulul de test poate avea urmtorul coninut:


module test_master_slave;

reg set, reset, clock;

initial begin clock = 0;


forever #10 clock = ~clock;
end

initial begin {set, reset} = 2'b0;


#20 {set, reset} = 2'b10;
#40 {set, reset} = 2'b00;
#40 {set, reset} = 2'b01;
#20 {set, reset} = 2'b00;
#60 {set, reset} = 2'b11;
#60 {set, reset} = 2'b00;
#20 {set, reset} = 2'b10;
#60 $stop;
end

master_slave our_flip_flop(q, q_negat, set, reset, clock);

initial $vw_dumpvars;

endmodule

4. Modul de lucru
4.1. Se lanseaz n execuie VeriWell 2.0 i se vizualizeaz fiierul
astabil_1poarta.v. Se deschide un proiect care conine numai acest fiier i se
ruleaz, verificnd c nu exist erori de compilare. Vizualizai formele de und i
explicai funcionarea circuitului. Modificai fiierul, introducnd n reacie nc dou
pori inversoare, i salvai-l cu numele astabil_3porti.v. Comentai formele de und
obinute i formulai o concluzie referitoare la efectul buclei de reacie nchis peste un
numr impar de pori inversoare.

4.2. Se vizualizeaz fiierele latch_SR.v i test_latch_SR.v i se deschide


proiectul care conine cele dou fiiere. Facei simularea circuitului i verificai
funcionarea corect a circuitului urmrind formele de und. Modificai timpii de
propagare prin cele dou pori I-NU i vedei care este efectul lor atunci cnd apare
combinaia interzis pe intrri. ncercai s activai intrrile circuitului un timp inferior
lui 2 i vedei cum rspunde circuitul la semnale de acest fel.

4.3. Descriei structural latch-ul cu ceas reprezentat n figura 3.4. Testai acest
circuit folosind un semnal periodic de ceas i atribuind diferite valori logice intrrilor.
ncercai s micorai duratele semnalelor de intrare i observai ce se ntmpl dac

5
durata de activare a semnalelor scade sub 3. nlocuii toate porile din structur cu
pori SAU-NU i refacei simulrile. Explicai cum funcioneaz noul circuit, dac are
sens, i comentai rezultatele obinute.

4.4. Vizualizai fiierele bistabil_D.v i test_bistabil_D.v i deschidei


proiectul care conine cele dou fiiere. Facei simularea circuitului i verificai
funcionarea corect a circuitului urmrind formele de und. Modificai modelul
bistabilului de tip D, introducnd i posibilitatea ca ambele intrri asincrone de set i
reset s fie activate simultan, caz n care ieirile bistabilului se poziioneaz pe 1 logic.
Modificai i fiierul test_bistabil_D.v pentru a pune n eviden acest eveniment i
repetai simularea circuitului, n toate situaiile posibile.

4.5. Vizualizai fiierele latch_cu_ceas.v, master_slave.v i


test_master_slave.v. Observai c proiectul pentru testarea funcionrii bistabilului
master-slave este compus din cele trei fiiere. Facei simularea circuitului i verificai
funcionarea corect a circuitului urmrind formele de und. Explicai funcionarea
programului i a circuitului. Modificai circuitul pentru ca bistabilul s-i schimbe starea
pe frontul cresctor al ceasului. Verificai prin simulare funcionarea n acest ultim caz.

4.6. Construii modelul comportamental al bistabilului JK master-slave, folosind


foaia de catalog pentru circuitul CMOS 4027. Verificai funcionarea circuitului n
toate situaiile descrise n tabelul tranziiilor, folosind simularea n mediul VeriWell.

S-ar putea să vă placă și