CATEGORII DOCUMENTE |
LATCH-URI SI BISTABILE
implementate In verilog
Scopul lucrarii
Descrierea structurala si comportamentala a celor mai simple circuite secventiale (structurile de tip latch si bistabil) si intelegerea functionarii 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, disponibila pe Internet
3. Consideratii teoretice
Cea mai simpla structura secventiala este obtinuta prin introducerea unei reactii de la iesirea unei porti SI-NU cu doua intrari la una din intrarile sale. Circuitul este prezentat in figura 3.1, iar analiza lui, prin reprezentarea functionarii cu ajutorul formelor de unda in timp (cronograma circuitului), este realizata cu ajutorul modelului logic asincron, care tine seama de timpul de propagare prin poarta, notat cu τ.
O simulare Verilog a functionarii circuitului se poate face astfel:
module wave_gen(out); // modulul are numai un port de iesire
output out;
reg enable; // intrare care inchide sau deschide bucla
initial begin enable = 0;
#15 enable = 1;
#50 enable = 0;
#15 $stop; // se opreste simularea la t = 80
end
nand #1 (out, enable, out); // descrierea structurala a circuitului
initial $vw_dumpvars;
endmodule
Fig. 3.1 Cea mai simpla structura secventiala
Se poate observa ca semnalul enable, desi este o intrare a circuitului, nu este considerat ca port de intrare pentru ca valoarea sa este atribuita in interiorul modulului. Observam ca iesirea circuitului isi modifica valoarea chiar si atunci cand valoarea lui enable este constanta, comportament tipic circuitelor secventiale, sau cu memorie. Acest comportament se datoreaza buclei de reactie si nu poate aparea niciodata in cazul circuitelor combinationale.
In general, efectul introducerii unei bucle de reactie peste un numar impar de porti logice inversoare genereaza un comportament de astabil. Daca numarul de inversoare este par, atunci poate aparea functia de memorare. Cel mai simplu circuit de memorare, care foloseste numai doua porti inversoare, este elementul de memorie sau latch-ul . Schema logica a circuitului este prezentata in figura 3.2, in doua variante echivalente, iar tabelul tranzitiilor si ecuatiile care descriu functionarea circuitului sunt date in figura 3.3. Descrierea Verilog a circuitului poate fi urmatoarea:
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 observa ca tranzitia simultana a intrarilor din 0 logic in 1 logic determina o oscilatie a iesirilor, adica transforma circuitul intr-un astabil. De fapt, datorita timpilor
Fig. 3.2 Schema logica a latch-ului
Fig. 3.3 Tabelul si ecuatiile care descriu functionarea latch-ului
Fig. 3.4 Latch-ul SR cu ceas si tabelul tranzitiilor
In figura 3.4 s-au reprezentat latch-ul SR cu ceas si tabelul tranzitiilor pentru acest circuit. Acest circuit functioneaza la fel ca si cel anterior daca intrarea de ceas CL = 1 (primul nivel de porti este deschis) si este blocat, memorand starea anterioara, daca CL = 0. Datorita inversarii semnalelor prin nivelul de porti de la intrari, semnalele devin acum active pe 1 logic, de unde si modificarea denumirii lor in S si R.
In figura 3.5 s-au reprezentat bistabilul de tip D (modelul circuitului CMOS 4013) si tabelul tranzitiilor pentru acest bistabil. Intrarea de date D este sincrona, ea determina modificarea iesirilor numai pe frontul crescator al ceasului, in timp ce intrarile S si R seteaza (Q = 1) sau reseteaza (Q = 0) bistabilul, asincron, fara nicio legatura cu ceasul, imediat ce sunt activate (prin 1 logic). Modelul Verilog al circuitului este urmatorul:
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
Fig. 3.5 Bistabilul D cu basculare pe front pozitiv si tabelul tranzitiilor
Specificatia always @ indica faptul ca de fiecare data cand se modifica semnalele din lista, se executa instructiunile care urmeaza. Modificarea acestor semnale trebuie sa se faca pe frontul crescator, dupa cum sugereaza specificatia posedge. Putem observa ca modelul prezentat nu descrie si cazul atipic cand sunt activate ambele intrari asincrone ale bistabilului, S si R, caz in care, conform tabelului tranzitiilor bistabilului D, ambele iesiri trec in 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 = 3'b000;
#23 = 3'b010;
#25 = 3'b000;
#20 = 3'b100;
#20 = 3'b100;
#27 = 3'b101;
#10 = 3'b100;
#20 $stop;
end
D_flipflop our_D_flipflop(q, q_negat, d, set, reset, clock);
initial $vw_dumpvars;
endmodule
In figura 3.6 s-a reprezentat o structura de bistabil master-slave, folosind latch-uri SR cu ceas identice. O descriere structurala a latch-ului SR cu ceas format din 4 porti SI-NU este data in exemplul de mai jos. Aici descrierea structurala este mai simpla decat cea comportamentala, pentru care trebuie sa descriem toate combinatiile binare aplicate intrarilor:
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
Fig. 3.6 Bistabil SR master-slave
Descrierea structurii master-slave se poate face folosind urmatorul 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
Fisierul care contine modulul de test poate avea urmatorul continut:
module test_master_slave;
reg set, reset, clock;
initial begin clock = 0;
forever #10 clock = ~clock;
end
initial begin = 2'b0;
#20 = 2'b10;
#40 = 2'b00;
#40 = 2'b01;
#20 = 2'b00;
#60 = 2'b11;
#60 = 2'b00;
#20 = 2'b10;
#60 $stop;
end
master_slave our_flip_flop(q, q_negat, set, reset, clock);
initial $vw_dumpvars;
endmodule
4. Modul de lucru
Se lanseaza in executie VeriWell 2.0 si se vizualizeaza fisierul astabil_1poarta.v. Se deschide un proiect care contine numai acest fisier si se ruleaza, verificand ca nu exista erori de compilare. Vizualizati formele de unda si explicati functionarea circuitului. Modificati fisierul, introducand in reactie inca doua porti inversoare, si salvati-l cu numele astabil_3porti.v. Comentati formele de unda obtinute si formulati o concluzie referitoare la efectul buclei de reactie inchisa peste un numar impar de porti inversoare.
Se vizualizeaza fisierele latch_SR.v si test_latch_SR.v si se deschide proiectul care contine cele doua fisiere. Faceti simularea circuitului si verificati functionarea corecta a circuitului urmarind formele de unda. Modificati timpii de propagare prin cele doua porti SI-NU si vedeti care este efectul lor atunci cand apare combinatia interzisa pe intrari. Incercati sa activati intrarile circuitului un timp inferior lui 2τ si vedeti cum raspunde circuitul la semnale de acest fel.
Descrieti structural latch-ul cu ceas reprezentat in figura 3.4. Testati acest circuit folosind un semnal periodic de ceas si atribuind diferite valori logice intrarilor. Incercati sa micsorati duratele semnalelor de intrare si observati ce se intampla daca durata de activare a semnalelor scade sub 3τ. Inlocuiti toate portile din structura cu porti SAU-NU si refaceti simularile. Explicati cum functioneaza noul circuit, daca are sens, si comentati rezultatele obtinute.
Vizualizati fisierele bistabil_D.v si test_bistabil_D.v si deschideti proiectul care contine cele doua fisiere. Faceti simularea circuitului si verificati functionarea corecta a circuitului urmarind formele de unda. Modificati modelul bistabilului de tip D, introducand si posibilitatea ca ambele intrari asincrone de set si reset sa fie activate simultan, caz in care iesirile bistabilului se pozitioneaza pe 1 logic. Modificati si fisierul test_bistabil_D.v pentru a pune in evidenta acest eveniment si repetati simularea circuitului, in toate situatiile posibile.
Vizualizati fisierele latch_cu_ceas.v master_slave.v si test_master_slave.v. Observati ca proiectul pentru testarea functionarii bistabilului master-slave este compus din cele trei fisiere. Faceti simularea circuitului si verificati functionarea corecta a circuitului urmarind formele de unda. Explicati functionarea programului si a circuitului. Modificati circuitul pentru ca bistabilul sa-si schimbe starea pe frontul crescator al ceasului. Verificati prin simulare functionarea in acest ultim caz.
Construiti modelul comportamental al bistabilului JK master-slave, folosind foaia de catalog pentru circuitul CMOS 4027. Verificati functionarea circuitului in toate situatiile descrise in tabelul tranzitiilor, folosind simularea in mediul VeriWell.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 3620
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved