Sunteți pe pagina 1din 4

Circuite Integrate Digitale

http://arh.pub.ro/lab/cid1

Transcodorul binar-zecimal. Circuite secventiale. Numaratorul


Notiuni de Verilog necesare in acest laborator:
Pentru gruparea mai multor instructiuni ce trebuie executate impreuna nu se folosesc acoladele ci cuvintele cheie begin si end. Dupa end nu se pune punct si virgula. Se foloseste cuvantul cheie always pentru crearea unor liste de senzitivitati astfel incat variabilele de la iesire sa se modifice doar atunci cand una din variabilele de la intrare prezente pe lista de senzitivitati isi schimba starea. Exemple: always @(x) begin end (cand se modifica x, se executa instructiunile dintre begin si end). Variabilele carora le sunt atribuite valorile in cadrul unui always trebuie declarate de tip reg. In cazul circuitelor secventiale modificarile variabilelor de la iesire se vor face in mod sincron cu semnalele interne ale sistemului (clock si/sau reset), astfel incat lista de senzitivitati va include fronturile pozitive sau negative ale semnalelor. Exemplu: always @(posedge clock) begin end (instructiunile dintre begin si end se vor executa la fiecare front crescator al ceasului). Pe langa operatorul ? prezentat in laboratorul 1 in verilog se mai pot folosi doua intructiuni conditionate if si case care au aceeasi sintaxa ca in C/C++: if (cond) begin case (in) instructiuni; expr; end else begin endcase instructiuni; end Instructiunile if si case se folosesc tot timpul in interiorul unui always (spre deosebire de operatorul ? care se foloseste cu assign), variabilele care se modifica in interiorul lor fiind de tip reg.

1. Transcodorul binar-zecimal Analiza problemei:


In aplicatiile anterioare afisarea unui numar se facea in binar folosind led-urile LD0-LD7. Afisarea aceluiasi numar se poate face si pe unul din cele 4 afisoare cu 7 segmente prezente pe placa de dezvoltare: Punctul prezent pe cele 4 afisoare este notat, prin conventie, cu litera h. Este folosit rareori in aplicatii.

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

Circuite Integrate Digitale

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

Circuite Integrate Digitale

http://arh.pub.ro/lab/cid1

2. Numaratorul Analiza problemei:


Pina acum, s-a discutat de circuite care realizeaza functii simple (sumator, transcodor, etc). Circuitele digitale se impart in doua categorii: circuite combinationale: circuite care au o anumite functie de implementat si la care rezultatul calculului apare dupa un anumit timp pe iesirea circuitului. In aceasta categorie intra circuitele studiate pana acum la laborator: sumator, transcodor, etc. circuite secventiale: sunt circuitele care au in componenta un registru peste care se inchide o bucla combinationala; registrele sunt cele care au conexiune directa cu semnalul de clock;

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

Fig 3: Diagramele semnalelor de clock si de reset


Pentru exemplificare vom considera cazul, unui numarator pe 32 biti. Acesta are un semnal de clock, unul de reset si o iesire (aceasta este conectata direct la registrul de 32 biti). Schematic numaratorul arata dupa cum urmeaza:

3/4

Circuite Integrate Digitale

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

3. Exercitii pentru laborator:


1. 2. 3. Sa se modifice modulul Numarator astfel incat numararea sa se faca invers. Sa se afiseze cu ajutorul transcodorului valoarea numaratorului (cei mai semnificativi 4 biti). Modificati modulul transcodorului astfel incat sa realizati pe un digit o rama ,formata dintr-un singur segment, care se misca in sensul acelor de ceasornic, in patratul format din segmetele c,d,e si g. De exemplu daca rama initial era formata din segmentul g la iteratia urmatoare segmentul afisat va fi c. Hint: Vor fi 4 pozitii posibile care vor alterna cu ajutorul unui numarator.

4/4

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