diff --git a/chapters/verilog/behavioral/assigments/led7/README.md b/chapters/verilog/behavioral/assigments/led7/README.md index 92533f31..afff8da5 100644 --- a/chapters/verilog/behavioral/assigments/led7/README.md +++ b/chapters/verilog/behavioral/assigments/led7/README.md @@ -1,2 +1,2 @@ -Implmentați modulul verilog pentru afisarea 7-led-segment dat prin iesirile o_w_ca, o_w_cb, o_w_cc, o_w_cd, o_w_ce, o_w_cf, o_w_cg pentru 4 cifre ce vor fi selectate in functie de i_w_in. +Implmentați modulul verilog pentru afisarea 7-led-segment dat prin iesirile o_w_ca, o_w_cb, o_w_cc, o_w_cd, o_w_ce, o_w_cf, o_w_cg pentru 4 cifre ce vor fi selectate in functie de i_w_in. Linile cx sunt active pe valoarea 0. Pentru numarul XYZT, pentru i_w_in=0 se va afisa cifra T, pentru i_w_in=1 cifra Z, pentru i_w_in=2 cifra Y, pentru i_w_in=3 cifra X. apasati run din VPL pentru a afla numarul vostru. \ No newline at end of file diff --git a/chapters/verilog/behavioral/assigments/led7/led7conv.v b/chapters/verilog/behavioral/assigments/led7/led7conv.v index 56bec80d..bce3bde6 100644 --- a/chapters/verilog/behavioral/assigments/led7/led7conv.v +++ b/chapters/verilog/behavioral/assigments/led7/led7conv.v @@ -6,16 +6,16 @@ module led7conv ( always @(*) begin case (i_w_value) - 4'd0: l_r_led7 = 7'b011_1111; - 4'd1: l_r_led7 = 7'b000_0110; - 4'd2: l_r_led7 = 7'b101_1011; - 4'd3: l_r_led7 = 7'b100_1111; - 4'd4: l_r_led7 = 7'b110_0110; - 4'd5: l_r_led7 = 7'b110_1101; - 4'd6: l_r_led7 = 7'b111_1101; - 4'd7: l_r_led7 = 7'b000_0111; - 4'd8: l_r_led7 = 7'b111_1111; - 4'd9: l_r_led7 = 7'b110_0111; + 4'd0: l_r_led7 = 7'b100_0000; + 4'd1: l_r_led7 = 7'b111_1001; + 4'd2: l_r_led7 = 7'b010_0100; + 4'd3: l_r_led7 = 7'b011_0000; + 4'd4: l_r_led7 = 7'b001_1001; + 4'd5: l_r_led7 = 7'b001_0010; + 4'd6: l_r_led7 = 7'b000_0010; + 4'd7: l_r_led7 = 7'b111_1000; + 4'd8: l_r_led7 = 7'b000_0000; + 4'd9: l_r_led7 = 7'b001_1000; default: l_r_led7 = 7'b111_1111; endcase end diff --git a/chapters/verilog/behavioral/drills/README.md b/chapters/verilog/behavioral/drills/README.md index 79bac377..24394291 100644 --- a/chapters/verilog/behavioral/drills/README.md +++ b/chapters/verilog/behavioral/drills/README.md @@ -15,14 +15,21 @@ Pentru mai multe detalii asupra acestui tip de modul, consultați pagina de [Wik Soluția se află în repo-ul materiei [GitHub](https://github.com/cs-pub-ro/computer-architecture/tree/main/chapters/verilog/behavioral/drills/tasks). - - Implementați și simulați un **multiplicator pe 4 biți** fără a folosi operatorul * (înmulțire). +1. Implementați și simulați un **multiplicator pe 4 biți** fără a folosi operatorul * (înmulțire). - _Hint_: Folosiți convenția Verilog pentru interfața modulului. Câți biți are ieșirea? - _Hint_: Înmulțiți pe hârtie, în baza 2, numerele 1001 și 1011. Transpuneți în limbajul Verilog algoritmul folosit. - - Implementați și simulați un modul de **afișaj cu 7 segmente** pentru numere în baza 10. +2. Implementați și simulați un modul de **afișaj cu 7 segmente** pentru numere în baza 10. - _Hint_: Există o ieșire validă pentru fiecare intrare? Nu uitați de cazul ''default''. - _Hint_: Se vor testa doar cifrele de la 0 la 9. - - Implementați o **unitate aritmetico-logică** simplă (UAL), pe **4** biți, cu 2 operații: adunare și înmulțire. Folosiți o intrare de selecție de 1 bit pentru a alege între cele două operații astfel: 0 - adunare, 1 - înmulțire. +3. Implementați o **unitate aritmetico-logică** simplă (UAL), pe **4** biți, cu 2 operații: adunare și înmulțire. Folosiți o intrare de selecție de 1 bit pentru a alege între cele două operații astfel: 0 - adunare, 1 - înmulțire. - _Hint_: Câți biți au ieșirea sumatorului și a multiplicatorului? Dar a UAL-ului? - _Hint_: Pentru selecția dintre ieșirea sumatorului și cea a multiplicatorului se poate folosi atribuirea continuă sau se poate implementa un modul multiplexor 2:1 - - Pentru o utilizare mai generală, implementați un UAL cu operatori cu dimensiune variabilă. - - _Hint_: Pentru a-l implementa, este necesară implementarea unui multiplicator parametrizat - atenție la dimensiunea semnalelor! + - Pentru o utilizare mai generală, implementați un UAL cu operatori cu dimensiune variabilă. + - _Hint_: Pentru a-l implementa, este necesară implementarea unui multiplicator parametrizat - atenție la dimensiunea semnalelor! + +## TEST + +1. Implmentați modulul verilog pentru afisarea 7-led-segment dat prin iesirile o_w_ca, o_w_cb, o_w_cc, o_w_cd, o_w_ce, o_w_cf, o_w_cg pentru 4 cifre ce vor fi selectate in functie de i_w_in. +Pentru numarul XYZT, pentru i_w_in=0 se va afisa cifra T, pentru i_w_in=1 cifra Z, pentru i_w_in=2 cifra Y, pentru i_w_in=3 cifra X. + +2. Implmentați modulul verilog pentru un ALU (arithmetic logic unit) cu 2 operanzi i_w_op1 și i_w_op2 pe 4 biți fiecare, cu rezultatul pe 4 biți o_w_out și o linie de selecție pe 2 biți a operație i_w_sel. \ No newline at end of file diff --git a/chapters/verilog/behavioral/drills/tasks/led7/led7.v b/chapters/verilog/behavioral/drills/tasks/led7/led7.v index c7436eab..0fecbbdf 100644 --- a/chapters/verilog/behavioral/drills/tasks/led7/led7.v +++ b/chapters/verilog/behavioral/drills/tasks/led7/led7.v @@ -9,16 +9,16 @@ module led7( always@(*) begin case(i_w_in) - 'd0: l_r_7seg = 7'b011_1111; - 'd1: l_r_7seg = 7'b000_0110; - 'd2: l_r_7seg = 7'b101_1011; - 'd3: l_r_7seg = 7'b100_1111; - 'd4: l_r_7seg = 7'b110_0110; - 'd5: l_r_7seg = 7'b110_1101; - 'd6: l_r_7seg = 7'b111_1101; - 'd7: l_r_7seg = 7'b000_0111; - 'd8: l_r_7seg = 7'b111_1111; - 'd9: l_r_7seg = 7'b110_0111; + 4'd0: l_r_7seg = 7'b100_0000; + 4'd1: l_r_7seg = 7'b111_1001; + 4'd2: l_r_7seg = 7'b010_0100; + 4'd3: l_r_7seg = 7'b011_0000; + 4'd4: l_r_7seg = 7'b001_1001; + 4'd5: l_r_7seg = 7'b001_0010; + 4'd6: l_r_7seg = 7'b000_0010; + 4'd7: l_r_7seg = 7'b111_1000; + 4'd8: l_r_7seg = 7'b000_0000; + 4'd9: l_r_7seg = 7'b001_1000; default: l_r_7seg = 7'b100_0000; //default case -> place "-" endcase end