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 de droite et affiche un mot de 16 bits sur l'afficheur obtenu par permutation des tranches de 4 bits saisi.
ex : saisi de ABCD affiche BADC
On ne modifiera pas l'afficheur lui-même!
Exo 1 usage de Vivado (1pts)
Produire le RTL ANALYSIS>Schematic du code suivant:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
entity exo1 is
Port ( a : in STD_LOGIC_VECTOR (15 downto 0);
b : in STD_LOGIC_VECTOR (15 downto 0);
c : in STD_LOGIC_VECTOR (15 downto 0);
d : in STD_LOGIC_VECTOR (15 downto 0);
sel : in STD_LOGIC;
sum : out STD_LOGIC_VECTOR (15 downto 0));
end exo1;
architecture Behavioral of exo1 is
begin
process(a,b,c,d,sel)
begin
case sel is
when '1' => sum <= a+b;
when others => sum <= c+d xor a;
end case;
end process;
end Behavioral;
Que fait le code? Modifiez le code afin de ne voir qu’un seul additionneur dans le schéma après modification. Faire valider de suite en ouvrant vos fenêtres du code et du schéma obtenu.
Exo2 FSM calcul du nombre de bit à ‘1’ successifs en multiple de 3 (2+1+1 pts)
N’oubliez pas de changer le Set as Top !
1 Vous allez construire une fsm Tripletbit qui reçoit au plus un bit à chaque top d’horloge.
Un signa Enable valide ou non la présence d’un bit
Un signal input01 véhicule la valeur du bit lorsqu’il est valide
Le signal reset repositionne la fsm dans son état initial
La sortie NBtriplet est un mot de 16 bits qui représente le nombre de triplet de bits à ‘1’ déjà rencontrés dans la série de bits reçus. Exemple la suite 1111110100111011011 renvoie 3. C’est cette valeur qui sera affichée sur la carte au fur et à mesure des bits reçus.
Concevez le code VHDL comme une machine de Moore avec le template Vivado en respectant cette entity, et validez par simulation en utilisant un test bench
entity Tripletbit is
Port ( clk : in STD_LOGIC;
reset : in STD_LOGIC;
Input01 : in STD_LOGIC;
Enable : in STD_LOGIC;
NBtriplet : out STD_LOGIC_VECTOR (15 downto 0));
end Tripletbit;
Il serait sans doute intéressant d’avoir un signal cpt en interne qui fonctionne exactement comme NBtriplet: NBtriplet étant un OUT il ne peut pas servir dans un process en lecture par contre le cpt lui sera utilisé en lecture pour être incrémenté...
2 Implantez sur la carte Basys3 avec le switche 0 comme valeur de bit Input01 , le btnL pulsé comme signal Enable, BntC pulsé sera le reset, la valeur NBtriplet sera sur l’afficheur.
3 Placez une seconde FSM swtobit en amont de votre première FSM qui cette fois envoie successivement les 16 bits reçus des 16 switches sw[15:0] lorsque le Ein est activé. Il y aura donc 16 bits transmis successivement vers la FSM Tripletbit par la sortie output01 avec sa validation par Enable. La solution la plus rapide c’est de mettre un état pour chaque bit envoyé. Voici l’entity.
entity swtobit is
Port ( clk : in STD_LOGIC;
reset : in std_logic;
sw : in STD_LOGIC_VECTOR (15 downto 0);
Ein : in std_logic;
Enable : out STD_LOGIC;
output01 : out STD_LOGIC);
end swtobit;
Testez sur la carte...