This is an old revision of the document!
În acest laborator vom recapitula noțiuni învățate la CN1.
Verilog este un HDL (Hardware Description Language) folosit pentru specificarea formală a circuitelor electronice digitale.
Modulul este unitatea de bază a limbajului Verilog. Definește interfața (intrările și ieșirile) și comportamentul unui circuit electronic. Putem descrie comportamentul unui modul în trei moduri:
module A(input in, output out); not(out, in); endmodule module B(input in, output out); assign out = ~in; endmodule module C(input in, output reg out); always @(*) begin out = ~in; end end
În Verilog putem folosi două tipuri de date:
wire
: reprezintă conexiuni fizice între componentele, se folosesc pentru transmisia semnalelor și nu au capacitate de reținere a informațieireg
: folosite pentru a stoca date, care persistă chiar dacă registrul este deconectatwire a; wire [7:0] b; reg c; reg [0:7] d;
Pentru a controla ce date se află pe fire sau în registre, avem la dispoziție mai multe tipuri de atribuiri:
assign
): reprezintă relații directe între semnalele, funcționează doar pe wire
=
): sunt folosite pentru descrierea logicii combinaționale, executându-se secvențial, funcționează doar pe reg
<=
): sunt folosite pentru descrierea logicii secvențiale, executându-se în paralel, funcționează doar pe reg
module A(input in); wire a; reg b; reg c; assign a = in; always @(*) begin b = in; end always @(*) begin c <= in; end endmodule
Dacă alegem descrierea procedurală avem la dispoziție doua blocuri speciale:
initial
: va fi executat o singură dată și se folosește frecvent pentru inițializări sau resetarea circuituluialways
: va fi executat continuu, ca o buclă infinită. El poate fi executat încontinuu sau la apariția unui evenimentCircuitele logice combinaționale sunt circuitele reprezentate prin porți logice ce aplică o funcție pe intrări. Valorile de ieșire depind doar de valorile de intrare, nu și de stări de reactie (feedback), iar cand starea unei intrări se schimbă, se reflectă imediat la ieșiri.
Spre deosebire de circuitele logice combinaționale, la cele secvențiale valorile de ieșire nu mai depind exclusiv de starea curentă a intrărilor, ci și de stările anterioare ale circuitului.
Un automat finit este, în sensul cel mai abstract, un model de calculabilitate. Trăsătura fundamentală a automatelor finite este faptul că se află, la orice moment de timp, într-una dintr-un număr finit de stări posibile. De asemenea, în anumite condiţii, ele pot executa tranziţii între aceste stări. Astfel, un automat este descris de: intrări, ieșiri, stări și tranziții.
În funcție de relația dintre intrare, ieșire și starea curentă există două tipuri de automate: Mealy și Moore. La automatele Mealy, ieşirea depinde de starea curentă şi de input-ul curent. Astfel, o ieșire corespunde unei tranziții.
La automatele Moore, pe de altă parte, ieșirea este determinată exclusiv de starea în care se află.
initial
always
wire
vs reg
assign
), blocante (=
) și non-blocante (<=
)Task 01 (4p) Scrieți un modul cu 4 intrări pe 1 bit și o ieșire pe 1 bit care implementează următoarea funcție: out = (in3 NAND (in1 OR in2)) AND (not in0 AND (in1 OR in3)). Simulați comportamentul modulului.
Task 02 (4p) Implementați un shift register pe 8 biți. Acesta are o intrare de date pe 1 bit, o intrare de ceas, o intrare de reset și o ieșire pe 1 bit. Ieșirea va reflecta intrarea, dar cu o întârziere de 8 cicli de ceas. Simulați comportamentul modulului. Folosiți descriere procedurală.
reg clk; ... always begin #5 clk = ~clk; end ... initial begin ... clk = 0; ... end
Task 03 (2p + 1p bonus) Implementați un automat cu o intrare de date pe 8 biți, o intrare de ceas, o intrare de reset și o ieșire pe 1 bit. Automatul va primi ca intrare litere ale alfabetului (a-zA-Z), câte o literă pe fiecare front al semnalului de ceas, iar ieșirea va fi 0 până în momentul în care este recunoscută secvența “DCBA”, după care aceasta va trece pe 1. Pentru bonus, adaugati 4 intrari si folosindu-va de modulul creat la Task 01 faceți modificarile necesare astfel încat iesirea sa fie egală cu rezultatul aplicarii funcției de la Task 01 pe cele 4 intrări în momentul în care este recunoscută secvența “DCBA”.