Exo préparatoire : Test de l'afficheur (1 pt)
Testez sur la carte un circuit qui saisit un mot de 16 bits sur les switches et affiche un mot de 16 bits sur l'afficheur obtenu par permutation des tranches de 4 bits saisi.
ex : saisi de ABCD affiche DCBA
Exo 1 usage de Vivado (1pt)
Produire le RTL ANALYSIS>Schematic du code suivant:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity exo_1 is
port( CLK, CLR : in std_logic;
Q : out std_logic_vector(3 downto 0));
end exo_1;
architecture archi of exo_1 is
signal tmp: std_logic_vector(3 downto 0);
begin
process (CLK)
begin
if (CLK'event and CLK='1') then
if (CLR='1') then
tmp <= "0000";
else
tmp <= tmp + 1;
end if;
Q <= tmp;
end if;
end process;
end archi;
Que fait le code? Modifiez le code afin d’en simplifier le schéma en gardant les mêmes spécifications. Faire valider de suite en ouvrant vos fenêtres du code et du schéma.
Exo2 FSM: Machine de Control-Cola (1+1.5+0,5pts)
N’oubliez pas de changer le Set as Top !
Concevez une machine qui vend du Control-Cola. Une bouteille de Control-Cola coûte 1€. La
machine accepte des pièces de 20 centimes, 50 centimes et de 1€ et affiche la somme des pièces déjà acceptées sur l’afficheur 7 segments par exemple 0020 correspond à 20 centimes (euro_in).
Dès que la machine obtient exactement 1€ (ou 100 centimes), la valeur 0100 s’affiche et une canette tombe, on utilisera la led0 pour visualiser cette action.
Si la somme saisie ne permet pas d’atteindre la somme exacte (par ex dans l’ordre 50 puis 20 ou 20 puis 1€), la machine rend cet argent, affiche 0000 et retournera à son état initial lors du reset . Les valeurs affichables pendant le fonctionnement sont donc 20 40 60 80 ou 50 puis 100 quand la somme est atteinte. Vous pouvez vous en inspirer pour compléter la définition de vos états de la FSM... On utilisera la led1 pour visualiser ce remboursement retour_euro, elle reste allumée jusqu’à un reset et donc toutes les pièces suivantes sont retournées, à prendre en compte dans l'automate.
Il y a trois entrées : 20C 50C et 1€. Ces entrées pulsent à 1 pendant un seul cycle d'horloge et seront associées sur la carte aux boutons BTNL, BTND et BTNR.
BTNC fonctionne comme un reset de la FSM. Il doit être appliqué entre deux distributions de canette sinon toutes les pièces qui sont introduites après fourniture d’une canette sont rendues (led1 allumée).
Faire valider vos développements après chaque étape.
1 Concevez le code VHDL comme une machine de Moore avec le template Vivado. Validez la FSM par simulation (en créant un fichier test_bench). Voici l’entity que vous devez respecter!
entity controlcola is
Port ( piece20, piece50, piece100 : in STD_LOGIC;
reset : in std_logic;
clk : in STD_LOGIC;
euro_in : out STD_LOGIC_VECTOR (15 downto 0);
canette, retour_euro : out STD_LOGIC);
end controlcola;
2 En utilisant votre afficheur, le btn pulse développé en TP, construire un circuit sur la carte Basys3
3 En modifiant la FSM, proposez une version où led0 s'éteint après 2 secondes. La FSM revient alors dans l'état initia sans attendre le reset.