• Aucun résultat trouvé

INF3500 Hiver 2021 Exercices #3 Modélisation et vérification de circuits combinatoires

N/A
N/A
Protected

Academic year: 2022

Partager "INF3500 Hiver 2021 Exercices #3 Modélisation et vérification de circuits combinatoires"

Copied!
5
0
0

Texte intégral

(1)

INF3500 – Hiver 2021

Exercices #3 – Modélisation et vérification de circuits combinatoires

0301/0302 Description d'un circuit combinatoire en VHDL; Concepts intermédiaires de VHDL

1. Donnez le code VHDL synthétisable pour une porte NOR (non-OU) à nombre d’entrées arbitraire plus grand ou égal à trois. Utilisez une description comportementale.

2. Le musée régional de St-Denis-de-Brompton expose une vaste collection de photos du tournoi de pêche à la barbotte. Le musée contient 4 salles remplies de photos les plus impressionnantes les unes que les autres. À cause de la valeur inestimable de la collection, chaque salle est munie d’un détecteur de mouvement et on engage un gardien de nuit pour patrouiller le musée. Vous devez concevoir le module de contrôle du système d’alarme. Une alarme doit être déclenchée quand au moins deux détecteurs de mouvement sont actifs, indiquant que le gardien est dans une salle et au moins un intrus dans une autre.

Une autre alarme doit être déclenchée si aucun détecteur de mouvement n’est actif, indiquant que le gar- dien a quitté ou bien s’est endormi. Donnez une architecture en VHDL synthétisable correspondant à la déclaration d’entité suivante et à ces spécifications.

library IEEE;

use IEEE.std_logic_1164.all;

entity museeSecurite2 is

generic (N : positive := 4);

port (

dmouv : in std_logic_vector(N - 1 downto 0);

alarme_intrus : out std_logic;

alarme_gardien : out std_logic );

end museeSecurite2;

0303 Banc d'essai pour un circuit combinatoire

3. Donnez un exemple d’utilisation possible des quatre niveaux de la clause severity dans un banc d’essai.

4. La fonction parité est vraie si le nombre de bits en entrée égal à ‘1’ est pair. Par exemple, la fonction est vraie pour les vecteurs {0000, 1111, 1001} et fausse pour {0001, 0111}. Considérez la déclaration d’entité suivante en VHDL.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity parite is

generic ( W : positive := 4); -- le nombre de bits d'entrée port (

I : in std_logic_vector(W - 1 downto 0);

F : out std_logic -- '1' pour parité paire, '0' pour parité impaire );

end parite;

Donnez le code VHDL d’un banc d’essai qui stimule et vérifie complètement le module pour déterminer

la parité selon une entrée a. de 4 bits et b. d'un nombre arbitraire de bits.

(2)

0304 Synthèse d’un circuit combinatoire à partir de sa description en VHDL

5. Programmez le PROM suivant pour implémenter le code VHDL qui suit. Étiquetez correctement les ports d’entrée et de sortie, et placez des boulets (•) aux intersections de lignes à relier ensemble.

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity module12 is port (

x : in unsigned(3 downto 0);

triangle : out unsigned(3 downto 0);

carre2 : out std_logic;

pulse4 : out std_logic );

end module12;

architecture arch of module12 is begin

carre2 <= x(1);

pulse4 <= x(1) and x(0);

process(x) is begin

if x < 5 then triangle <= x;

elsif x < 9 then triangle <= 8 - x;

elsif x < 13 then triangle <= x - 8;

else

triangle <= 16 - x;

end if;

end process;

end arch;

6. Quel genre de description de module combinatoire est la plus facile à synthétiser ? Une description structurale ? Par flot de données ? Une description comportementale ? Laquelle des descriptions mène à une implémentation plus simple (en termes de nombre de ressources utilisées) et plus rapide (en termes de latence de calcul = temps pour obtenir le résultat une fois que les entrées sont stables) ?

7. Considérez l’énoncé assert, par exemple pour vérifier les valeurs d’une constante définie par un énoncé generic :

assert W > 3 report "Il faut avoir W > 3" severity failure;

a. La norme 1076.6-2004 permet-elle son utilisation dans la description d’un module synthétisable?

b. Le synthétiseur de Vivado WebPak permet-il son utilisation dans la description d’un module syn- thétisable?

décodeur 4:16

m7 m6 m5 m4 m3 m2 m1 m0 A2

A1 A0 A3

m15 m14 m13 m12 m11 m10 m9 m8

D7 D6 D5 D4 D3 D2 D1 D0

(3)

Solutions 1. Code :

entity porteNOU is generic (

W : positive := 4 -- le nombre d'entrées de la porte NOU );

port (

I : in std_logic_vector(W - 1 downto 0);

F : out std_logic );

end porteNOU;

architecture comportementale of porteNOU is begin

process (I)

variable sortie : std_logic;

begin

sortie := '0';

for k in W - 1 downto 0 loop sortie := sortie or I(k);

end loop;

F <= not(sortie);

end process;

end comportementale;

2. Code :

architecture arch of museeSecurite2 is begin

assert N = 4 report "architecture valable uniquement pour N = 4";

-- solution avec with-select, besoin de ieee.numeric_std.all -- with to_integer(unsigned(dmouv)) select

-- alarme_intrus <=

-- '0' when 0 | 1 | 2 | 4, 8, -- cas où un seul détecteur est activé -- '1' when others;

alarme_intrus <=

(dmouv(3) and dmouv(2)) or (dmouv(3) and dmouv(1)) or (dmouv(3) and dmouv(0)) or (dmouv(2) and dmouv(1)) or (dmouv(2) and dmouv(0)) or (dmouv(1) and dmouv(0));

alarme_gardien <= not(dmouv(3) or dmouv(2) or dmouv(1) or dmouv(0));

end arch;

architecture archflexible of museeSecurite2 is begin

process(dmouv)

variable compte : natural range 0 to dmouv'length;

begin

compte := 0;

for k in dmouv'range loop if dmouv(k) = '1' then

compte := compte + 1;

end if;

end loop;

if compte >= 2 then alarme_intrus <= '1';

else

alarme_intrus <= '0';

(4)

end if;

if compte = 0 then

alarme_gardien <= '1';

else

alarme_gardien <= '0';

end if;

end process;

end archflexible;

3.

Note, Warning, Error, Failure

4. Solution

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

use work.all;

entity parite_TB is

generic (W : positive := 5); -- le nombre de bits d'entrée de l'UUT end parite_TB;

architecture arch1 of parite_TB is

signal vecteurDeTest : std_logic_vector(W - 1 downto 0);

signal reponse : std_logic;

-- fonction de vérification de parité

function paritePaire(entree: std_logic_vector(W - 1 downto 0)) return boolean is variable somme : natural := 0;

begin

for k in 0 to W - 1 loop if entree(k) = '1' then

somme := somme + 1;

end if;

end loop;

-- la parité est paire ssi

-- la somme des '1' dans le vecteur en entrée est un nombre pair return (somme mod 2 = 0);

end paritePaire;

begin

-- instanciation du module à vérifier

UUT : entity parite(arch1) generic map (W) port map (vecteurDeTest, reponse);

-- application exhaustive des vecteurs de test et vérification des réponses process

begin

for k in 0 to 2 ** W - 1 loop

vecteurDeTest <= std_logic_vector(to_unsigned(k, W));

-- report integer'image(k);

wait for 10 ns;

assert (paritePaire(vecteurDeTest) = (reponse = '0'))

report "erreur pour l'entrée " & integer'image(k) severity error;

end loop;

report "simulation terminée" severity failure;

end process;

end arch1;

(5)

5. Solution

6. À discuter en classe.

7. À vérifier et discuter en classe.

Références

Documents relatifs

De cette vision bipolaire, qui assimile entre eux les ennemis de l’Albanie, on a encore un indice lorsque le général russe, avant de quitter la base navale de Pacha Liman,

Du fait des multiples combinaisons (codes d'entrées et codes de sortie), on peut envisager de nombreux types de décodeurs, mais dans la pratique seuls deux types existent

Schématise le circuit ci-dessous en indiquant les boucles de courant et le sens du courant dans chaque boucle... Tony Leparoux, professeur de physique-chimie Dans une voiture,

– Tous les éléments/composants du circuit devant être synchronisés le sont avec le même signal d'horloge. •

Une seule sortie est activée à la fois (par un état haut) : celle dont l’indice (entre 0 et 3) correspond au nombre (sur 2 bits) appliqué en binaire sur les entrées.. Etablir la

Les codeurs sont des circuits possédants 2 n entrées et n sorties et codent en binaire sur leurs sorties le numéro de l’indice de l’entrée active.. Etablir la

Je cherche le plus grand nombre entier pair s’écrivant avec 4 chiffres différents qui respecte les conditions suivantes : La somme des 4 chiffres est 6... Je cherche le plus

On trouvera alors des nombres dont la somme des valeurs caractéristiques s’annulera comme avec DEUX CENT VINGT DEUX : DEUX CENT (-104), VINGT (52) et DEUX(52). Source Louis Thépault