Exercice 2: compteur binaire 4 bits à remise à zéro asynchrone et validation de comptage synchrone et retenue. Ecrire l’entité et l’architecture d’un compteur décimal 4 bits (de sortie count) à remise à zéro (raz) asynchrone active à 1. Le comptage est rendu possible lorsque le signal enable est actif. Un signal de sortie carry (à traiter) permet le chaînage de plusieurs compteurs élémentaires pour la réalisation d'un compteur multi digits comme sur le schéma complet. Question : entité et architecture du compteur. entity counter is Port ( clk : in STD_LOGIC; raz : in STD_LOGIC; enable : in STD_LOGIC; count : out STD_LOGIC_VECTOR (3 downto 0); carry : out STD_LOGIC); end counter; architecture Behavioral of counter is constant cntmax : std_logic_vector (3 downto 0):= "1001"; signal cnt : std_logic_vector (3 downto 0); begin process (clk,raz) begin if raz='1' then cnt <= ( others => '0'); elsif clk'event and clk='1' then if enable = '1' then if cnt < cntmax then cnt <= cnt+1; else cnt <= ( others => '0'); end if; end if; end if; end process; count <= cnt; carry <= '0' when cnt<cntmax else '1'; end Behavioral; Exercice 4: multiplexeur de signaux mux4_4. Ecrire l’entité et l’architecture du composant mux4_4 utilisé sur le schéma. Le vecteur de sortie dépendra de la valeur du vecteur de commande. entity mux4_4 is Port ( cde : in STD_LOGIC_VECTOR (1 downto 0); in_0 : in STD_LOGIC_VECTOR (3 downto 0); in_1 : in STD_LOGIC_VECTOR (3 downto 0); in_2 : in STD_LOGIC_VECTOR (3 downto 0); in_3 : in STD_LOGIC_VECTOR (3 downto 0); mux_out : out STD_LOGIC_VECTOR (3 downto 0)); end mux4_4; architecture Behavioral of mux4_4 is begin with cde select mux_out <= in_0 when "00", in_1 when "01", in_2 when "10", in_3 when "11", "1111" when others; end Behavioral; Exercice 5 : regroupement de composants sous forme textuelle. Regroupement des composants counter sous forme textuelle dans l'objectif d'utiliser ce nouveau composant dans le schéma en remplacement des compteurs simples. Question : regroupement de compteurs en VHDL. Ecrire le code VHDL (entité et architecture) d' un compteur de 0 à 999 regroupant les 3 compteurs du schéma avec leurs interconnexions. Vous déclarerez les signaux nécessaires au câblage interne. On supposera qu’une bibliothèque a permis la déclaration du composant counter (ne pas le déclarer juste l'instancier). entity is ....... entity counter_0_999 is Port ( clk : in STD_LOGIC; raz : in STD_LOGIC; enable : in STD_LOGIC; count_u, count_d, count_c,: out STD_LOGIC_VECTOR (3 downto 0); carry : out STD_LOGIC); end counter_0_999 ; architecture arch of counter_0_999 is signal carry_u, carry_d : std_logic; begin C1: counter port map(clk ,raz, enable, count_u , carry_u); C2: counter port map(clk ,raz, carry_u, count_d , carry_d); C3: counter port map(clk ,raz, carry_d, count_c, carry ); end; Question a: rôle de la porte logique ou. Donner le rôle de la porte ou dans le schéma complet. La porte ou permet de remettre à 0 les compteurs lors du raz mais aussi lors du déclenchement d'une nouvelle mesure. Question b: rôle du composant clkgen_meas Donner le rôle du composant clkgen_meas dans le schéma complet. La sortie de ce composant dépend de l'unité de mesure choisie. Il va permettre de générer une horloge adaptée à cette unité de mesure. L'exploitation du compteur étant directe lors de l'affichage, on peut en déduire que l''horloge de comptage vaut 58μs pour des unités en cm et 143μs pour des unités en inch. Exercice 2: compteur binaire 76 bits à remise à zéro et validation de comptage synchrones. Ecrire l’entité et l’architecture d’un compteur binaire 7 6bits (de sortie count) à remise à zéro (raz) synchrone active à 1. Le comptage est rendu possible lorsque le signal enable est actif et le compteur doit s'arrêter à son maximum. NOTE : un compeur 6 pour coller au schéma ou 7 bit comme demandé est accepté Question : entité et architecture du compteur. entity counter is Port ( clk : in STD_LOGIC; raz : in STD_LOGIC; enable : in STD_LOGIC; count : out STD_LOGIC_VECTOR (5 downto 0)); end counter; architecture Behavioral of counter is constant cntmax : std_logic_vector (5 downto 0):= "111111"; signal cnt : std_logic_vector (5 downto 0); begin process (clk) begin if clk'event and clk='1' then if raz='1' then cnt <= ( others => '0'); elsif enable = '1' then if cnt < cntmax then cnt <= cnt+1; end if; end if; end if; end process; count <= cnt; end Behavioral; end Behavioral; Exercice 3 : générateur de parité paire ou impaire. Les générateurs de parité sont des éléments électroniques utilisés dans certains types de communications pour détecter des erreurs de transmissions. Question : donner l’entité et l’architecture d’un générateur de parité paire ou impaire selon l'état du signal ptype (1=> impaire). Le générateur traite un vecteur de 6 bits (data) et fournit le résultat pbit sur un front descendant de la commande pcheck. Notes : Parité paire : le nombre de bits à 1 y compris le bit de parité doit être paire. Parité impaire : le nombre de bits à 1 y compris le bit de parité doit être impaire. L'utilisation d'un opérateur ou exclusif s'avère efficace. entity parity_gen is Port ( data : in STD_LOGIC_VECTOR (5 downto 0); raz : in STD_LOGIC; ptype : in STD_LOGIC; pcheck : in STD_LOGIC; pbit : out STD_LOGIC); end parity_gen; architecture Behavioral of parity_gen is signal psig : std_logic; begin process (pcheck) variable pvar : std_logic; begin if pcheck'event and pcheck='0' then pvar := data(5) xor data(4) xor data(3) xor data(2) xor data(1) xor data(0); psig <= pvar; end if; end process; pbit <= '0' when raz='1' else psig when ptype='0' else not psig; end Behavioral; Exercice 4: synchronisation de signaux externes. Ecrire l’entité et l’architecture d'un composant sync_inp destiné à synchroniser sur front montant d'horloge les informations provenant des entrées externes. Il s'agit d'un verrou comme indiqué en cours de contrôle. entity synch_inp is Port ( clk : in STD_LOGIC; async_i : in STD_LOGIC; sync_o : out STD_LOGIC); end synch_inp; architecture Behavioral of synch_inp is begin process (clk) begin if clk'event and clk='1' then sync_o <= async_i; end if; end process; end Behavioral; Exercice 5 : architecture complète sous forme textuelle. Représenter le schéma fourni sous forme d'une description VHDL textuelle. Question : implémentation en VHDL du système Ecrire le code VHDL (entité et architecture) correspondant au système complet. Vous déclarerez les signaux nécessaires au câblage interne. On supposera qu’une bibliothèque a permis la déclaration des composants internes (pas de déclaration de composant). entity SCHEMA is port ( as_pulse : in std_logic; BTN0 : in std_logic; clk : in std_logic; reset : in std_logic; SW0 : in std_logic; count : out std_logic_vector (5 downto 0); DEL6 : out std_logic; DEL7 : out std_logic); end SCHEMA; architecture BEHAVIORAL of SCHEMA is signal XLXN_6 : std_logic; signal XLXN_9 : std_logic; signal XLXN_18 : std_logic; signal XLXN_20 : std_logic; signal XLXN_37 : std_logic; signal count_DUMMY : std_logic_vector (5 downto 0); begin count(5 downto 0) <= count_DUMMY(5 downto 0); XLXI_1 : machine port map (clk=>clk, read_p=>XLXN_6, RESET=>reset, syncpulse=>XLXN_9, en_cnt=>XLXN_37, pulse_end=>DEL7, raz_cnt=>XLXN_20); XLXI_2 : synch_inp port map (async_i=>BTN0, clk=>clk, sync_o=>XLXN_6); XLXI_4 : synch_inp port map (async_i=>as_pulse, clk=>clk, sync_o=>XLXN_9); XLXI_5 : diviseur port map (clki=>clk, clko=>XLXN_18); XLXI_7 : counter port map (clk=>XLXN_18, enable=>XLXN_37, raz=>XLXN_20, count(5 downto 0) => count_DUMMY (5 downto 0)); XLXI_8 : parity_gen port map (data(5 downto 0)=>count_DUMMY(5 downto 0), pcheck=>XLXN_37, ptype=>SW0, raz=>reset, pbit=>DEL6); end BEHAVIORAL; Exercice 2: compteur binaire 4 bits à remise à zéro synchrone et entrée de validation (3 questions) Ecrire l’entité et l’architecture d’un compteur binaire à remise à zéro SCLR synchrone active à 1. La valeur du compteur est incrémentée à chaque front montant de l’horloge clk. Une sortie Cout indiquera, lorsqu’elle est à 1, que le compteur a atteint sa valeur maximale (la valeur du compteur n’est pas sortie). L’entrée ENA active à 0 permet au compteur de fonctionner (bloqué si = 1). Question a : rôle de la porte logique xor. Donner l’explication fonctionnelle de la présence de la porte logique vis-à-vis du bouton et du compteur. La porte XOR est là pour provoquer le RAZ du compteur si les bascules FF1 et FF2 délivrent une sortie différente l'une de l'autre (correspond à un changement d'état du bouton poussoir). Question b : une question de timing. En considérant que l’horloge du FPGA fonctionne à 50MHz, quelle doit être la taille du compteur pour obtenir un filtrage voisin de 10ms. Vous donnerez aussi la valeur obtenue à 0,1 ms près. 2^n =50*10^6/100=500000 Log2 2n = n = log2 500000 = ln (500000)/ln (2) ≈ 18.93 La valeur entière la plus proche est donc n=19 la période obtenue sera voisine de 9,5 ms