Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

CATEGORII DOCUMENTE





AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


LATCH-URI SI BISTABILE IMPLEMENTATE IN VERILOG

algoritmi

+ Font mai mare | - Font mai mic







DOCUMENTE SIMILARE

Trimite pe Messenger
ALGORITMI DE CALCUL SI STRUCTURI DE DATE
REPREZENTAREA SI PRELUCRAREA INFORMATIEI IN CALCULATOARELE NUMERICE
Utilizarea mediului ActiveHDL pentru proiectarea, simularea si implementarea structurilor de calculatoare numerice
Limbaje de prezentare a algoritmilor ( pseudocod )
ALGORITMUL SIMPLEX - Algoritmul simplex dual
Algoritmi semnatura digitala
Data mining cu Weka Preprocesarea Datelor
Stiva - Utilitatea stivelor - Accesarea elementului de la varf
Algoritmi - Probleme laborator
Conducerea Proiectelor software - Evaluarea costurilor proiectelor software

LATCH-URI SI BISTABILE

implementate In verilog



1. 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

de propagare usor diferiti prin cele doua porti, in realitate iesirile circuitului capata una din urmatoarele combinatii: fie , fie . Datorita acestor asimetrii din circuitul real, care nu pot fi controlate de proiectant, combinatia 00 aplicata pe intrari este interzisa.

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

4.1. 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.

4.2. 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.

4.3. 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.

4.4. 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.

4.5. 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.

4.6. 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

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1563
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2019 . All rights reserved

Distribuie URL

Adauga cod HTML in site