Documente Academic
Documente Profesional
Documente Cultură
Laborator 4
1. Comparator în Verilog
În acest sens, dacă dorim să scriem codul pentru pătrățelul de mai jos:
endmodule
endmodule
always @ ( a, b ) begin
ls = a < b;
eq = a == b;
gt = a > b;
end
endmodule
module comparator_tb;
wire [2:0] a_tb, b_tb; // intrari in DUT
wire ls_tb, eq_tb, gt_tb; // iesiri din DUT
// Instantiere DUT
comparator myInstance ( a_tb, b_tb, ls_tb, eq_tb, gt_tb);
end
endmodule
Trebuie reținut faptul că între ghilimele putem scrie orice pentru că este un șir
de caractere, ca urmare nu afectează compilatorul, dar ne afectează pe noi, astfel încât
utilizăm un format specific pentru funcția sistem $monitor astfel încât să vedem ce
tipărește într-un mod cât mai ordonat și ușor de citit.
Trebuie să avem mare grijă cu acest mod de instanțiere. În acest laborator vom
utiliza această metodă de instanțiere pentru a vedea că funcționează, dar după acest
laborator vom utiliza prima variantă de instanțieri pentru a evita erori.
Putem da valori într-un format specific Verilog x’yZ în care x este numărul de
biți pe care vom reprezenta numărul Z ( și este opțional deoarece Verilog va ști pe
câți biți trebuie să reprezinte numărul Z), y este baza sistemului de numerație în care
îl scriem pe numărul Z, iar Z = zn-1...zi...z1z0 este un număr format din cifre în
baza y .
Fundamentele Calculatoarelor 2018 - 2019 Laborator 4
Pentru a scrie valoarea 13 putem scrie în Verilog: 13, 4’d13, 4’b1101, 4’hd
și chiar și ’d13 pentru că spuneam că specificarea numărului de biți este opțională.
Având cronograma de mai sus, putem scrie foarte ușor generarea de stimuli în
testbench astfel :
module comparator_tb;
reg [2:0] a_tb, b_tb; // intrari in DUT
wire ls_tb, eq_tb, gt_tb; // iesiri din DUT
// Instantiere DUT
comparator myInstance ( a_tb, b_tb, ls_tb, eq_tb, gt_tb);
Apăsăm pe butonul Run -All și apoi vedem semnalele în fereastra Wave selectând
fereastra respectivă și apăsând tasta F pentru Zoom Full. Desigur, vedem și în fereastra
Transcript mesajele tipărite de funcția sistem $monitor.
Dacă am avut grijă la cum am generat stimulii pentru DUT, cronograma după
care ne-am orientat o vedem în fereastra Wave.
Fundamentele Calculatoarelor 2018 - 2019 Laborator 4
2. Exerciții propuse
if(a == b) begin
eq = 1;
end else begin
eq = 0;
end
module comparator (
input [2:0] a,b,
output ls,eq,gt
);
assign ls = a < b;
assign eq = a == b;
assign gt = a > b;
endmodule
module comparator (
input [2:0] a,b,
output ls,eq,gt
);
assign ls = (a < b) ? 1 : 0 ;
assign eq = (a == b) ? 1 : 0 ;
assign gt = (a > b) ? 1 : 0 ;
endmodule
assign ls = (a < b) ? 1 : 0 ;
if (a < b) begin
ls = 1;
end else begin
ls = 0;
end
CONGRATS !!!
Tocmai ai învățat să descrii în două feluri diferite
funcționalitatea unui pătrățel!