This is an old revision of the document!
Blocurile initial și always marchează secțiunile de cod procedural ale modulului, iar în interiorul lor se pot folosi construcții de control similare celor din limbajele procedurale.
Un bloc initial este un bloc ce va fi executat o singură dată și se folosește frecvent pentru inițializări sau resetarea circuitului.
initial begin A = 8'b01010101; // Atribuim registrului A o valoare binara ('b) pe 8 biti. B = {A[0:3], 4’b0000}; // Atribuim registrului B concatenarea intre primii 4 biti // ai registrului A si 4 biti de 0. C = 8'h4D; // Registrul C primeste o valoare in hexazecimal ('h) pe 8 biti. end
initial poate să nu fie sintetizabil. Pentru a inițializa registrele cu anumite valori este recomandat să folosiți o linie explicită de reset.
Un bloc always este un bloc ce va fi executat continuu, ca o buclă infinită. El poate fi executat încontinuu sau la apariția unui eveniment.
input clk; reg a; reg b; always @(posedge clk) begin a <= b; end
Construcția @(…) definiște lista de sensizitivitate a blocului always respectiv. Dacă ea lipsește, atunci blocul se va rula încontinuu. Dacă ea conține vreun semnal atunci blocul va rula doar la apariția unei schimbări a acelui semnal. Fiecare semnal poate fi prefixat cu posedge sau negedge, pentru a specifica execuția doar la fronturile pozitive sau negative ale semnalului.
always begin ... end // Se va executa încontinuu. always @(a) begin ... end // Se va executa la orice tranzitie a semnalului a. always @(posedge a) begin ... end // Se va executa la orice tranzitie pozitiva a semnalului a. always @(negedge a) begin ... end // Se va executa la orice tranzitie negativa a semnalului a. always @(a or b) begin ... end // Se va executa la orice tranzitie a semnalului a sau b. always @(*) begin b = a; end // Se va executa la orice tranzitie a oricarui semnal care poate // influenta rezultatul blocului (orice semnal citit in interiorul // blocului). In acest caz, cum o schimbare a semnalului a ar duce la // schimbarea valorii lui b, blocul se va executa pentru orice // tranzitie a semnalului a.