diff --git a/docs/Q10.png b/docs/Q10.png new file mode 100644 index 0000000000000000000000000000000000000000..62429d2cda40e01ef09254f080eed327adf50d3e Binary files /dev/null and b/docs/Q10.png differ diff --git a/docs/Q2.png b/docs/Q2.png new file mode 100644 index 0000000000000000000000000000000000000000..03be944325aaea8685e96097edc47baa2ab94786 Binary files /dev/null and b/docs/Q2.png differ diff --git a/docs/Q6.png b/docs/Q6.png new file mode 100644 index 0000000000000000000000000000000000000000..159e95dba746b6e1a515ee5f1843725af486ee5e Binary files /dev/null and b/docs/Q6.png differ diff --git a/docs/compte-rendu.md b/docs/compte-rendu.md index bcc655d66913928d7dcdede3d6b09390249d6a4f..c9196d202c1c6ed59cbed245efd5131bc6072a8e 100644 --- a/docs/compte-rendu.md +++ b/docs/compte-rendu.md @@ -3,39 +3,55 @@ É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) ? +Liste de sensibilité : I_0, I_1, I_2, I_3, I_4, I_5 et 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 ? +Si le "when others" est supprimé, le code ne le détecte pas; mais sur la simulation, la sortie affiche une erreur car elle ne trouve pas les autres signaux : "case statement does not cover all choices; 'others' clause is needed". +De plus, sur la simulation, les valeurs de case "110" et "111" ne sont pas présents sur la simulation, mais cela n'a pas géné la simulation. + ## Question Loto 3 : Ce test est-il concluant ? Est-il suffisant pour valider le module ? Justifiez. +Tous les cas ont été testés, la sortie affiche bien la valeur de l'entrée selon les différents case (entre "000" à "101"). ## Question Loto 4 : Quel(s) signal(aux) doit on renseigner dans la liste de sensibilité de ce processus séquentiel ? Pourquoi ? +Liste de sensibilité : I_rst et I_clk. En effet, dans le compteur, on utilise l'horloge pour incrémenter le compteur, et la présence du reset réinitialise le compteur. ## 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 ? +Le code empêche la valeur du compteur de passer à "110" et "111", donc la simulation n'est pas affectée par ces combinaisons d'entrées. ## Question Loto 6 : Ce test est-il concluant ? Est-il suffisant pour valider le module ? Justifiez. +Tous les cas sont testés, le compteur repasse bien à 0 après avoir atteint la valeur 5. + ## Question Loto 7 : Combien de processus avez-vous décris ? +On a utilisé un processus. ## Question Loto 8 : De quel(s) type(s) sont-ils +C'est un processus synchrone. ## 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 ? +On peut la décrire avec 2 processus, le premier processus comprends la mise à jour de l'état, l'autre à changer les paramètres et déterminer l'état suivant. ## Question Loto 10 : Ce test est-il concluant ? Justifiez. + ## 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 ? +Le schéma n'affiche pas complètement le même que le résultat attendu, il y n'a pas la présence d'un buffer. La différence n'est pas liée à une erreur VHDL. ## Question Loto 12 : Quelles sont les ressources utilisées sur le FPGA ? En quelle quantité/proportion des ressources disponibles ? Des **LATCHES** sont-ils utilisés ? Est-ce positif ou pas, pourquoi ? +73 LUTs, 89 Flip Flops, 0 latch. S'il n'y a pas de latch, c'est un bon point car cela utilise moins de matériel. ## Question Loto 13 : Le tirage est-il aléatoire pour un humain ? pour une machine ? Justifiez. +C'est aléatoire pour un humain mais pas pour une machine car la machine se sert du cycle d'horloge pour créer un pseudo-aléatoire. diff --git a/src/automate.vhd b/src/automate.vhd index 1ccb931d7fe12fa743f62a8460c95a6d7fb05343..052f44b6e717272026b6047903a0107d98634204 100644 --- a/src/automate.vhd +++ b/src/automate.vhd @@ -36,10 +36,9 @@ 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 when st_wait_success => O_l_green <= '1'; @@ -50,9 +49,65 @@ 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; - __BLANK_TO_FILL__ + when st_store => + O_l_green <= '0'; + O_l_red <= '0'; + O_counting <= '0'; + O_store <= '1'; + if I_end = '1' then + SR_STATE <= st_end_red; + elsif I_end = '0' then + SR_STATE <= st_wait_success; + 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_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 others => + 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; diff --git a/src/compteur_modulo4.vhd b/src/compteur_modulo4.vhd index f2b951f07572fe0ebb6ed5fc58e6aaa9f185547b..c7d26dc03f3e61e1159f06be797fcd769b6da9e9 100644 --- a/src/compteur_modulo4.vhd +++ b/src/compteur_modulo4.vhd @@ -20,12 +20,12 @@ architecture modulo4_a of compteur_modulo4 is begin - mod4 : process (clk, rst) + mod4 : process (I_clk, I_rst) begin - if rst = '1' then + if I_rst = '1' then SR_Counter <= "00"; - elsif rising_edge(clk) then + elsif rising_edge(I_clk) then if SR_Counter = "11" then SR_Counter <= "00"; else diff --git a/src/compteur_modulo6.vhd b/src/compteur_modulo6.vhd index 7962a902901eb77362e130eb770ac5481684623d..33ff08e19c17b782cb0ef748f941e7fa2ad0d1c3 100644 --- a/src/compteur_modulo6.vhd +++ b/src/compteur_modulo6.vhd @@ -20,12 +20,16 @@ architecture modulo6_a of compteur_modulo6 is begin - process (_BLANK_) + process (I_rst, I_clk) begin if I_rst = '1' then - _BLANK_ - elsif rising_edge(I_clk) then - _BLANK_ + SR_Counter <= "000"; + elsif rising_edge(I_clk) and I_block = '0' then + if SR_Counter = "101" then + SR_Counter <= "000"; + else + SR_Counter <= SR_Counter + 1; + end if; end if; end process; diff --git a/src/mux6_1.vhd b/src/mux6_1.vhd index a689bef6c26f4dd324c13f5d0653dfd294f6d097..fda9a3504a3d097c8c237887406d522dd12e1e92 100644 --- a/src/mux6_1.vhd +++ b/src/mux6_1.vhd @@ -20,7 +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;