Documente Academic
Documente Profesional
Documente Cultură
Modulele reprezinta parti hardware, care pot fi de la simple porti pana la sisteme
complete cum ar fi un microprocesor.
O specificare comportamentala
defineste comportarea unui sistem numeric (modul)
folosind constructiile limbajelor de programare
traditionale.
O specificare structural exprim comportarea unui sistem
numeric (modul) ca o conectare ierarhica de submodule.
Exemplu
module NAND(in1, in2, out);
input in1, in2;
output out;
// instructiune de atribuire continu
assign out = ~(in1 & in2);
endmodule
Porturile in1, in2 i out sunt etichete pe fire.
.
assign urmarete n permanen eventualele modificari ale variabilelor din membrul
drept, pentru reevaluarea expresiei i pentru propagarea rezultatului n membrul stang
(out).
Observaie!!!!
Instruciunea de atribuire continu este utilizat pentru a modela circuitele
combinaionale la care ieirile se modific ca urmare a modificrilor intrrilor.
continue
Atribuiri
procedurale
Variabilele reg stocheaza ultima valoare, care le-a fost atribuit procedural.
Exemplu 1:
reg [0:7] A, B;
wire [0:3] Dataout;
reg [7:0] C;
Exemplu 2:
initial begin: int1
A = 8'b01011010;
B = {A[0:3] | A[4:7], 4'b0000}; // B este fortat la o valoare egala cu suma
logica a primilor patru biti din A si a ultimilor patru biti din A, concatenata
cu 0000. B are acum valoarea 11110000
end
time
tmetici binari: + ; - ; *; / ; + %
Construciile de control
sunt utilizate n seciunile procedurale de cod,
adic n cadrul blocurilor initial i always
1. Selecia
instructiunea if
if (A == 4)
begin
B = 2;
end
else
begin
B = 4;
end
instruciunea case.
case (<expression>)
<value1>: <instructiune>
<value2>: <instructiune>
default: <instructiune>
endcase
blocuri procedurale
Blocurile initial i always au aceeai construcie dar difer prin comportare:
blocurile initial sunt utilizate pentru iniializarea variabilelor, pentru efectuarea
funciilor legate de aplicarea tensiunii de alimentare, pentru specificare stimulilor
iniiali, monitorizare, generarea unor forme de und;
un bloc initial se execut o singur dat; dup terminarea tuturor instruciunilor
din blocul dat, fluxul ia sfrit, fiind reluat odata cu simularea;
blocurile always sunt utilizate pentru a descrie comportamentul sistemului;
un bloc always este executat n mod repetat, ntr-o bucl infinit pan la
terminarea simulrii specificat printr-o funcie sau task de system: $finish, $stop.
este important ca blocul always s conin cel puin o instruciune cu ntrziere
sau controlat de un eveniment, n caz contrar blocul se va repeta la timpul zero,
blocnd simularea.
Task-uri si functii
Task-urile sunt asemntoare procedurilor din alte limbaje de programare.
Funciile se comport ca subrutinele din alte limbaje de programare.
Excepii:
1. O funcie Verilog trebuie s se execute ntr-o unitate de timp simulat. Nu
vor exista instruciuni de control al timpului: comanda ntrzierii (#),
comanda de eveniment (@) sau instructiunea wait. Un task poate conine
instructiuni controlate de timp.
2. O funcie Verilog nu poate invoca (call, enable) un task; in timp ce un
task poate chema alte task-uri i funcii.
Definiie task:
task <nume_task >;
<porturi argumente>
<declaratii>
<instructiuni>
endtask
Invocare task:
<nume_task > (<lista de porturi>);
Controlul sincronizrii/Timing-ului.
Limbajul Verilog ofer trei tipuri explicite de control al sincronizrii, atunci cnd
urmeaz s apar instruciuni procedurale.
comanda ntrzierii n care o expresie specific durata de timp ntre prima
apariie a instruciunii i momentul n care ea se execut.
expresia eveniment, care permite execuia instruciunii.
instruciunea wait, care asteapt modificarea unei variabile specifice.
Controlul ntrzierii:
#10 A = A + 1;
specific o ntrziere de 10 uniti de timp
nainte de a executa instruciunea de asignare procedural.
Instruciunea wait