Documente Academic
Documente Profesional
Documente Cultură
http://arh.pub.ro/lab/cid1
Pentru a face afisare pe un astfel de afisor avem nevoie de un circuit care in functie de numarul de intrare aprinde o combinatie de segmente corespunzatoare cifrei la iesire. Acest tip de circuit logic combinational activeaza simultan mai multe iesiri si se numeste transcodor (vezi fig.).
Pentru comanda segmentelor se folosesc 8 semnale (7 semnale (a...g) pentru segmentele ce 1/4
http://arh.pub.ro/lab/cid1
formeaza cifra si unul (h) pentru punctul zecimal. Pentru selectia cifrei se folosesc 4 semnale AN3...AN0. In acest laborator ne alegem urmatoarea ordine pentru cele 7 segmente, reprezentate ca o variabila pe 8 biti: abcdefgh. Deci, prin LSB controlam punctul zecimal iar prin MSB segmentul superior. Avantajul unui astfel de mod de lucru este ca folosim doar 12 semnale de comanda in loc de 32, cate ar fi fost daca fiecare cifra era comandata independent. Afisajele sunt conectate astfel incat pentru selectia unei anumite cifre trebuie sa aplicam '0' logic pe pinul respectiv(AN3..AN0), iar pe celelalte '1' logic. Pentru aprinderea unui segment se aplica '0' logic pe segmentul respectiv. Cu alte cuvinte, selectia cifrei si comanda segmentelor se face in logica negativa (activa pe 0).
Implementare in Verilog.
In continuare se pune problema descrierii in Verilog a transcodorului. Circuitul nostru are o intrare in, pe care se aplica numarul binar care urmeaza sa fie convertit. Intrarea in se leaga la switch-urile SW3-SW0. Avem doua iesiri: o iesire pe 8 biti (out_seg), care comanda propriu zis aprinderea segmentelor a...h, si a doua iesire (out_sel), care selecteaza cifra {AN3, AN2, AN1, AN0}. Deoarece folosim doar o cifra a afisajului (de ex. AN0), circuitul furnizeaza in permanenta {AN3, AN2, AN1, AN0} = 4'b1110.
out_sel = {AN3, AN2, AN1, AN0} // asignati la pinii: P75, P71, P69, P60. out_seg = {a,b,c,d,e,f,g,h}; // asignati (in ordine) la pinii: P74, P70, P67, P62, P61, P73, P68, P63. Maniera de definire a unui modul in limbajul Verilog este urmatoarea:
module <nume_modul> <lista de porturi>; <definire modul>; endmodule Codul nostru: module transcodor ( input[3:0] in , output reg [7:0] out_seg,
segmentelor // numele modulului // 8 biti pentru selectia // 4 biti pentru selectia // cifrei
output[3:0] out_sel);
always @ (in) // orice schimbare la intrare produce schimbarea la iesire case (in) // fiecarei combinatii la intrare ii corespunde o combinatie la // iesire 4'd0 : out_seg = 8'b00000011; 4'd1 : out_seg = 8'b10011111; 4'd2 : out_seg = 8'b00100101; 4'd3 : out_seg = 8'b00001101; 4'd4 : out_seg = 8'b10011001; 4'd5 : out_seg = 8'b01001001; 4'd6 : out_seg = 8'b01000001; 4'd7 : out_seg = 8'b00011111; 4'd8 : out_seg = 8'b00000001; 4'd9 : out_seg = 8'b00001001; endcase assign out_sel = 4'b1110; endmodule
2/4
http://arh.pub.ro/lab/cid1
Un circuit secvential are de obicei doua semnale mai importante: Reset : acest semnal face resetarea circuitului, adica aducerea lui intr-o stare initiala(cum este cazul unui microprocesor la resetare anumite registre se incarca automat cu valoarea 0); resetarea unui circuit se face de oricate ori pinul de reset are 0 logic; Clock: este un semnal periodic si dreptunghiular care sincronizeaza circuitul cu lumea exterioara. Frecventa acestui semnal da viteza de lucru a circuitului. O exemplificare a semnalelor reset si clock este aratata in figura urmatoare.Semnalul de clock are o variatie periodica cu o anumita frecventa intre 1 si 0. Tranzitia semnalului intre 0 si 1 se numeste front pozitiv (sau posedge clock) iar tranzitia semnalului intre 1 si 0 se numesc front negativ (sau negedge clock).
3/4
http://arh.pub.ro/lab/cid1
Implementare in Verilog.
In continuare se pune problema descrierii in Verilog a numaratorului: Circuitul nostru are doua intrari: clock (semanlul de ceas) si reset. Circuitul are o singura iesire, un registru de 32 de biti, out care se incrementeaza cu o unitate la fiecare front pozitiv al ceasului sau a semnalului de reset. Atunci cand reset este activ valoarea registrului va fi 0. Codul Verilog ce descrie acest circuit este descris in cele ce urmeaza:
module numarator ( input reset, input clock, output reg [31:0] out ); always @ (posedge clock or posedge reset) begin if (reset) begin out <= 0; end else begin out <= out +1; end end endmodule
Se observa ca in lista de senzitivitati (ce apare intre paranteze la always) a circuitului de numarare apare si resetul care va fi activ pe 1 (HIGH). Se va face sinteza circuitului dupa cum urmeaza:.
intrarea reset trebuie asignata la BTN0; intrarea clock se leaga la generatorul ceas extern (P77) iesirea out trebuie asignata la LD7 LD0 (se asigneaza doar out[31:24] pentru a avea o frecventa de aprindere a ledurilor perceptibila de ochiul uman).
4/4