Skip to content
Snippets Groups Projects
Commit f7c5d7fd authored by Lucas DEBACKER's avatar Lucas DEBACKER
Browse files

TP Fini

parent 04ea2748
Branches main
No related tags found
No related merge requests found
......@@ -3,34 +3,34 @@
Énoncé du TP : [https://tp-vhdl.gitlab-pages.imt-atlantique.fr/loto/](https://tp-vhdl.gitlab-pages.imt-atlantique.fr/loto/)
## Question Loto 1 : Quels sont les signaux à renseigner dans la liste de sensibilité (si vous utilisez un process explicite) ?
Tous les signaux qui vont être en entrée du multiplexer (ici les 6 inputs et le signal trois bit qui les contrôle I_sel)
## Question Loto 2 : Que se passe-t-il si le test est incomplet, c’est-à-dire s’il ne couvre pas toutes les combinaisons d’entrées du module ? Est-ce grave ?
Non on ne teste pas toutes les combinaisons possibles car il y en a 2^39, on teste donc celles qui ont du sens (les modifications de Sel uniquement). Ce n’est donc pas grave de ne pas tout tester
## Question Loto 3 : Ce test est-il concluant ? Est-il suffisant pour valider le module ? Justifiez.
Le test est concluant : le changement de valeur de I_sel déclenche une mise à jour de la valeur de S, qui prend les bonnes valeurs d’entrées suivant la valeur de I_Sel. Cela est suffisant pour valider le module car on parcourt l’ensemble des valeurs de Sel possible et on vérifie les valeurs de sortie correspondante.
## Question Loto 4 : Quel(s) signal(aux) doit on renseigner dans la liste de sensibilité de ce processus séquentiel ? Pourquoi ?
La liste de signaux de sensibilité indique les signaux qui doivent faire bouger les valeurs : sur un processus synchrone, il faut mettre l’horloge, car les changements de valeurs se font sur les fronts montants, et le rst, car dès que rst = 1, il faut que la valeur se mette à 0.
## Question Loto 5 : Que se passe-t-il si le test est incomplet, c’est-à-dire s’il ne couvre pas toutes les combinaisons d’entrées du module ? Est-ce grave ici ?
On ne teste pas toutes les combinaisons d’entrée du module, on cherche surtout à valider le comportement du compteur. Tant que les changements de valeur se font au bon endroit (front montant d’horloge/rst) et que le compteur s’arrête à la bonne valeur (5 ici), alors le comportement est validé.
## Question Loto 6 : Ce test est-il concluant ? Est-il suffisant pour valider le module ? Justifiez.
Le test est concluant : le compteur compte de 0 à 5 en boucle, se réinitialise à 0 quand I_rst = 1 et se bloque à la valeur enregistrée lorsque I_block = 1
## Question Loto 7 : Combien de processus avez-vous décris ?
Nous avons décrit un seul processus
## Question Loto 8 : De quel(s) type(s) sont-ils
Il s'agit d'un processus séquentiel : l'état actuel dépend de l'état précédent
## Question Loto 9 : Serait-il possible de décrire cette machine d'état de manière différente, en terme de nombre et de type de process ?
pas en SEH
## Question Loto 10 : Ce test est-il concluant ? Justifiez.
Le test est concluant : les états changent sur les fronts montant d'horloge et sont les états attendues par rapport à l'état précédent. A la fin, les états st_end_red et st_end_green alternent et dure autant de temps chacun, traduisant le clignotement des deux leds rouge et verte
## Question Loto 11 : Le circuit inféré par l’outil est-il conforme à l’attendu ? Sinon, en quoi diffère-t-il et est-ce lié à une erreur de description VHDL ?
......
......@@ -36,10 +36,10 @@ begin
process (I_clk, I_rst)
begin
if(I_rst = '1')then
__BLANK_TO_FILL__
SR_STATE <= st_wait_success;
elsif rising_edge(I_clk)then
case SR_STATE is
case SR_STATE is
--case SR_STATE is
when st_wait_success =>
O_l_green <= '1';
......@@ -50,9 +50,63 @@ begin
SR_STATE <= st_counting;
end if;
when __BLANK_TO_FILL__
when st_counting =>
O_l_green <= '0';
O_l_red <= '0';
O_counting <= '1';
O_store <= '0';
if I_button = '0' then
SR_STATE <= st_compar;
end if;
when st_compar =>
O_l_green <= '0';
O_l_red <= '0';
O_counting <= '0';
O_store <= '0';
if I_invalide = '0' then
SR_STATE <= st_store;
else
SR_STATE <= st_wait_failed;
end if;
when st_store =>
O_l_green <= '0';
O_l_red <= '0';
O_counting <= '0';
O_store <= '1';
if I_end = '0' then
SR_STATE <= st_wait_success;
else
SR_STATE <= st_end_red;
end if;
__BLANK_TO_FILL__
when st_end_red =>
O_l_green <= '0';
O_l_red <= '1';
O_counting <= '0';
O_store <= '0';
if I_clk_display = '1' then
SR_STATE <= st_end_green;
end if;
when st_end_green =>
O_l_green <= '1';
O_l_red <= '0';
O_counting <= '0';
O_store <= '0';
if I_clk_display = '0' then
SR_STATE <= st_end_red;
end if;
when st_wait_failed =>
O_l_green <= '0';
O_l_red <= '1';
O_counting <= '0';
O_store <= '0';
if I_button = '1' then
SR_STATE <= st_counting;
end if;
end case;
end if;
......
......@@ -20,14 +20,20 @@ architecture modulo6_a of compteur_modulo6 is
begin
process (_BLANK_)
mod6 : process (I_rst, I_clk)
begin
if I_rst = '1' then
_BLANK_
SR_Counter <= "000";
elsif rising_edge(I_clk) then
_BLANK_
if I_block = '0' then
if SR_Counter = "101" then
SR_Counter <= "000";
else
SR_Counter <= SR_Counter + 1;
end if;
end if;
end if;
end process;
end process mod6;
O_CounterMod6 <= std_logic_vector(SR_Counter);
......
......@@ -20,8 +20,23 @@ end mux6_1;
architecture a_mux6_1 of mux6_1 is
begin
__BLANK_TO_FILL__
process(I_0, I_1, I_2, I_3, I_4, I_5, I_sel)
begin
case I_Sel is
when "000"=>
O_mux6<=I_0;
when "001"=>
O_mux6<=I_1;
when "010"=>
O_mux6<=I_2;
when "011"=>
O_mux6<=I_3;
when "100"=>
O_mux6<=I_4;
when others=>
O_mux6<=I_5;
end case;
end process;
end a_mux6_1;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment