Vous êtes sur la page 1sur 20

Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

Travaux dirigés – Série N°3


Synthèse des circuits avec la machine d’état et le langage VHDL

TD N°1 :
Ex1 : Comparateur
On veut modéliser un circuit permettant de comparer 2 bus de données de 8 bits, A et B, et de
générer 3 signaux de sortie :
- EQUA si les données sur les deux bus sont égales,
- SUPE si la donnée du bus A est supérieure à la donnée du bus B,
- INFE si la donnée du bus A est inférieure à la donnée du bus B,
- A et B sont des entrées du type std_logic_vecteur;
- EQUA, SUPE, INFE sont des sorties de type std_logic ;

Ecrire l’entité de ce comparateur de 8 bits et coder l’architecture de ce modèle.

Ex2 : Modélisation et styles en VHDL


Soit la description VHDL suivante:

entity exercice2 port (


x1, x2, x3, sel: in std_logic;
y: out std_logic);
end exercice2;

architecture archi of exercice2 is


signal a, b, c, d, e, f: std_logic;
begin
a <= x1 or x3;
b <= x1 and x3;
c <= x2 and a;
d <= b or c;
e <= x1 xor x2;
f <= x3 xor e;
P1: process (d, f, sel)
begin
if sel=’0’ then
y <= d;
else
y <= f;
end if;
end process P1;
end architecture archi;

1. Tracez à partir d’éléments de base le schéma correspondant.


2. Le processus P1 est-il combinatoire ou séquentiel? Justifiez.
3. Quel est selon vous la fonction de ce circuit?
4. À partir de la même entité, écrivez une architecture exploitant la logique 3-etats pour
la sélection de la sortie via le signal sel.

Ex 3 : Diagramme d’état
Le système à concevoir dispose de trois entrées et de deux sorties. Les entrées sont l’horloge clk,
RAZ et la commande x ; les sorties sont S0 et S1. Les entrées et les sorties sont de type std_logic
sauf x est de type bit. La description du système se fait par un nombre fini d’états. Ci-dessous la
représentation schématique d’un système à 4 états (A, B, C et D) :

Par M.JAROU 1|Page


Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

1. Donner la description en langage VHDL (Entité et Architecture) de ce système en se basant sur le


diagramme d’état. Le système est actif sur front montant.
2. Compléter le chronogramme suivant du système :

Ex 4 : Registre à décalage
Le registre à décalage commandé est représenté sur la figure suivant. Ce registre doit être capable
de réaliser un décalage vers la droite commandé par le signal ShiftR, et un décalage vers la gauche
commandé par le signal ShiftL et utilise des données de 8 bits.

Ce composant accepte deux entrées :


• Une entrée série (Sin), dont la valeur est copiée dans le bit de poids fort du registre si le signal
shiftR vaut ‘1’, ou dans le bit de poids faible si shiftL vaut ‘1’.

Par M.JAROU 2|Page


Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

• Une entrée parallèle (Din) sur 8 bits, qui est chargée dans le registre sur un front montant
d’horloge si le signal Load vaut ‘1’.

Le composant dispose également de deux sorties :


• Une sortie série Sout qui correspond à la valeur courante du bit de poids le plus faible.
• Une sortie parallèle (Dout) sur 8 bits, qui représente la valeur courante du registre.
1. Donner la table de vérité de ce registre à décalage commandé.
2. Donnez la description en VHDL synthétisable de ce registre utilisant un process. Dans le
process, vous pouvez utiliser l’instruction if…. Then et l’instruction for…..loop.

TD N°2 :
Ex 1 : Détecteur de parité
On souhaite modéliser un détecteur de parité pour des mots de 4 bits par une description VHDL qui
est composée de 2 parties :

- Interface (entité) :
 Signal d’entrée (mode in) étant une donnée de type bit_vector sur 4 bits: DIN
 Signaux de sortie (mode out): ODP (parité impaire de type bit), EVP (parité paire de type bit)

- Comportement (architecture) :
 ODP= ‘1’ si le nombre de ‘1’ dans DIN est impaire, sinon ODP= ‘0’
 EVP=‘1’ si le nombre de ‘1’ dans DIN est pair, sinon EVP= ‘0’

1. Donner la table de vérité selon le 15 différentes valeurs possibles de DIN.


2. Coder le comportement avec l’instruction d’assignation sélective (with…. Select).

Ex 2 :
Registres à décalage à rétroaction linéaire, on souhaite utiliser le registre à décalage à rétroaction
linéaire normalement employé pour générer des bits aléatoires suivant pour réaliser un compteur:

Ecrivez une description comportementale en VHDL (entité et architecture) qui réalise ce circuit.

Ex 3 :
On considère la fonction incremente ci-contre:

function incremente (e : in bit_vector)


return bit_vector is
variable s : bit_vector(e'left downto 0) ;
variable c : bit ;
begin
c := e(0) ;
s(0) := not c ;
for i in 1 to e'left loop

Par M.JAROU 3|Page


Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

s(i) := c xor e(i) ;


c := c and e(i) ;
end loop ;
return s ;
end incremente ;

1. Dans quelles parties d’un programme VHDL peut on insérer un tel code ? (Deux réponses au
moins)
2. Représenter le schéma généré par cette fonction si on l’applique à un vecteur de trois éléments
binaires.
3. Quelle est l’opération réalisée ?
4. Utiliser cette fonction pour réaliser un compteur binaire synchrone 16 bits qui compte à chaque
front montant d’horloge.
5. Modifier le compteur précédent pour lui adjoindre une commande raz de remise à zéro
synchrone et une commande d’autorisation de comptage EN.

Ex 4 :
La description d’état est utilisée pour décrire des systèmes séquentiels quelconques (machine
d’état). La description du système se fait par un nombre fini d’états. Ci-dessous la représentation
schématique d’un système à 4 états (M0 à M3), 2 sorties (S1 et S2), 2 entrées X et Y, sans oublier
l’entrée d’horloge qui fait avancer le processus, et celle de remise à zéro qui permet de l’initialiser :

L’état initial est M0. Les 2 sorties sont à 0. Au coup d’horloge on passe inconditionnellement à
l’état M1 sauf si la condition Y=1 a été vérifiée, ce qui mène à l’état M3 ou si X=0 a été validé ce
qui mène à M2.

De M3 on revient au coup d’horloge à M0. De M1 on passe à M2, et de M2 on passe à M 3...


Dans chaque état on définit les niveaux des sorties.

Ecrire la description VHDL (Entité et Architecture) de ce système en se basant sur le diagramme


d’état. Le système est actif sur front montant.

TD N°3 :
Ex 1 :
Il s’agit de développer un modèle structurel d’un registre N bits avec une entrée série et une sortie
parallèle basé sur les composants des bascules D.

Par M.JAROU 4|Page


Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

Les entrées: Horloge CLK (1 bit), reset RST_B remise à zéro (1 bit) asynchrone actif au niveau
bas (’0’) et données série DIN (1 bit)
Les sorties: Contenu du registre DOUT (N bits). N un paramètre générique. Faire une description
structurelle en langage VHDL (entity et architecture) d’un registre Registre série-parallèle à 16 bits
(voir shéma ci-dessus).
L’usage d’une instruction generate est requise.
Ex 2:
On considère le programme ci-dessous (écrit en VHDL) :

Library ieee;
use ieee.std_logic_1164.all;

entity transitm is port ( clk, e : in bit ;


s : out bit );
end transitm ;

architecture quasi_struct of transitm is


signal qa, qb : bit ;

begin
schem : process (clk)
begin
If ( clk'event and clk = '1') then
qa <= e ;
qb <= qa ;
end if;
end process schem ;
s <= qa xor qb ;
end quasi_struct ;

1. Déduire de ce programme, par une construction méthodique, un schéma à base bascules


et de portes logiques.
2. Compléter le chronogramme ci-dessous.

Par M.JAROU 5|Page


Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

Ex 3 :
Le système à concevoir dispose de deux entrées et de deux sorties. Les entrées sont l’horloge clk et
la commande C ; les sorties sont S1 et S2. Les entrées et les sorties sont de type std_logic sauf C est
de type bit. Le système est actif sur front descendant. Le système répond aux chronogrammes
suivants:

Donner la description en langage VHDL (Entity et Architecture) de ce système en utilisant un


process. Dans le process, utiliser l’instruction case …. is when, et l’instruction if ….. then …. else.

TD N°4 :
Ex 1 :
Le circuit d’un registre à décalage synchrone (front montant) est donné sur la figure suivante :

1) Ecrire l’entité qui décrit la vue externe de ce registre.


2) Donner une architecture comportementale (tableau ci-dessus) en utilisant un process. Dans le
process, vous pouvez utiliser l’instruction if…. Then…..elsif et l’instruction for…..loop.

Ex 2 :
On considère le programme VHDL suivant qui décrit le fonctionnement d’une bascule :

entity basc is
Port ( T, clk, init : in bit;
S: out bit);
end basc;

architecture primitive of basc is

Par M.JAROU 6|Page


Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

signal etat : bit;

begin
S <= etat;
process (clk)
begin
if (clk'event and clk='1') then
if ( init ='0') then
etat <= '1';
elsif (T='0') then
etat <= not etat;
end if;
end if;
end process;
end primitive;

1. A quoi reconnaît-on qu’il s’agit d’un circuit synchrone ?


2. La commande « init » est elle synchrone ou asynchrone ? (justifier)
3. Compléter le chronogramme ci-dessous.

4. Modifier le programme précédent pour qu’il rajoute à la bascule une commande raz, de remise à
zèro, asynchrone.
5.Transformer le programme pour qu’il utilise le type st-logic. Rajouter une commande oe de
contrôle qui fasse passer la sortie en haute impédence si oe=’0’.

Ex 3 :
Il s’agit de réaliser un signal d’horloge (CLOCK) à un fréquence de 1Hz à partir d’un quartz (OSC)
qui génère un signal d’horloge à 10 MHz, qu’il va donc falloir diviser par 10.106 afin d’obtenir la
fréquence voulue. Cette opération peut se faire en 2 étapes tout d’abord avec un diviseur par 5.10 6
puis un diviseur par 2.

1. Donner la description en langage VHDL (Entity et Architecture) d’un diviseur par 5.106 à partir
de 3 compteurs 8 bits. Utiliser pour cela 3 variables (COUNT_0, COUNT_1, COUNT_2) de type
integer, représentant chacune la valeur d’un compteur.

2. Donner la description d’un diviseur par 2 en utilisant la bascule D avec remise à zèro asynchrone
(RST).

Par M.JAROU 7|Page


Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

Correction de la série N°3


TD N°1 :
Ex 1 :

Library ieee;
use ieee.std_logic_1164.all;
entity comparateur8bits is port
(A, B: in std_logic_vector (7 downto 0);
EQUA, SUPE, INFE: out std_logic);
end comparateur8bits;

architecture ARCH_comparateur8bits of comparateur8bits is


Begin
EQUA<='1' when A=B else '0';
SUPE<='1' when A>B else '0';
INFE<='1' when A<B else '0';
end ARCH_comparateur8bits;

Ex 2 :
1- Le schéma correspondant

2- C’est une description comportementale, puisqu’il n’y a aucune composante. C’est un processus
combinatoire car il inclut toutes les entrées (signaux lus) dans la liste de sensitivité. De plus, toutes
les valeurs possibles de sel sont traitées.

3 - C’est un plein additionneur avec multiplexage des sorties somme et retenue.


4-
architecture archi2 of exercice2 is
signal a, b, c, d, e, f: std ulogic;
signal ytemp: std logic;
begin
a <= x1 or x3;
b <= x1 and x3;
c <= x2 and a;
d <= b or c;
e <= x1 xor x2;
f <= x3 xor e;
P1: process (d, f, sel)
begin

Par M.JAROU 8|Page


Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

if sel=’0’ then ytemp <= d;


else ytemp <= ’z’;
end if;
end process P1;
P2: process (d, f, sel)
begin
if sel=’1’ then ytemp <= f;
else ytemp <= ’z’;
end if;
end process P2;
y <= ytemp;
end architecture archi;

Ex 3 :

Library ieee;
use ieee.std_logic_1164.all;
-- entity statement

Entity Moore_Machine is port


(x, CLK : in BIT; S1,S2 : out BIT);
End Moore_Machine;

-- architecture statement

Architecture FSM of Moore_Machine is


type STATE_TYPE is (Etat0, Etat1, Etat2, Etat3);
signal STATE : STATE_TYPE := Etat0;
signal S :bit_vector (1 downto 0);
begin
--block funtion
NEXT_STATE: block (CLK'event and CLK='1')
begin
-- guarded conditional concurrent signal assignment statement
STATE <= guarded Etat0 when (STATE=Etat0 and x='0') else
Etat1 when (STATE=Etat0 and x='1') else
Etat2 when (STATE=Etat1 and x='1') else
Etat3 when (STATE=Etat2 and x='0') else
Etat2 when (STATE=Etat2 and x='1') else
Etat0 when (STATE=Etat3 and x='0') else
Etat1 when (STATE=Etat3 and x='1') else
Etat3 when (STATE=Etat1 and x='0') else
STATE;
end block NEXT_STATE;
-- unguarded selected concurrent signal assignment statement

with STATE select


S <= "00" when Etat0,
"10" when Etat1,
"11" when Etat2,
"01" when Etat3,
"00" when others;
S1<=S(0);
S2<=S(1);

End FSM;

Par M.JAROU 9|Page


Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

library ieee;
use ieee.std_logic_1164.all;

--library SYNTH ;
--use SYNTH.vhdlsynth.all ;

----- Définition de l'entité----


ENTITY diagramme IS
PORT (raz, clk :IN STD_LOGIC; -- Ne pas oublier remise à 0 et horloge !
x :IN bit;
S1,S2 :OUT STD_LOGIC);
END diagramme;

------ Définir L'architecture de description d'état -----------------


ARCHITECTURE arch_diagramme OF diagramme IS
TYPE etat_4 IS (A, B, C, D);
--définir une liste des états...
SIGNAL etat,etat_suiv :etat_4 := A;
--et 2 signaux: états courant et –-suivant, contenant la valeur d’un état
de la liste (initialisée à M0) .
signal S :std_logic_vector (1 downto 0);

BEGIN

definir_etat:PROCESS(raz, clk) -- "definir_etat":label optionnel


BEGIN
If raz = '1' THEN etat <= A; --Le
PACKAGE std_logic_1164
ELSIF rising_edge(clk) THEN --en permet l’utilisation.
etat <= etat_suiv ;
END IF; --Mise à jour de la variable
END PROCESS definir_etat;

------------ Définir les états des sorties-------------------

sorties : process (etat, x) --Le PROCESS doit contenir une...


BEGIN
--structure de CAS unique dépendant de la variable d’état.
CASE etat IS
--Le signal de l’état suivant n’est
--attribué que dans la structure CASE

WHEN A => S <= "00";

If x ='1' then etat_suiv <= B;


elsif x ='0' then etat_suiv <= A;
end if;

WHEN B => S <= "10";

If x ='1' then etat_suiv <= C;


elsif x ='0' then etat_suiv <= D;
end if;

WHEN C => S <= "11";

If x ='1' then etat_suiv <= C;


elsif x ='0' then etat_suiv <= D;
end if;

Par M.JAROU 10 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

WHEN D => S <= "01";

If x ='1' then etat_suiv <= B;


elsif x ='0' then etat_suiv <= A;
end if;
END CASE;

END process sorties ;


S1<=S(0);
S2<=S(1);

END arch_diagramme ; -- ne pas oublier de terminer l’architecture !

TD N°2 :
Ex 1 :

Library ieee;
use ieee.std_logic_1164.all;

entity parity is port


(D_IN: in std_logic_vector (3 downto 0);
ODP,EVP : out std_logic);
end parity;

architecture ARCH_parity of parity is


signal S:std_logic_vector (1 downto 0);
Begin
with D_IN select
S<="00" when "0000",
"10" when "0001",
"10" when "0010",
"01" when "0011",
"10" when "0100",
"01" when "0101",
"01" when "0110",
"10" when "0111",
"10" when "1000",
"01" when "1001",
"01" when "1010",
"10" when "1011",
"01" when "1100",
"10" when "1101",
"10" when "1110",
"01" when "1111",
"00" when others;
ODP<=S(1);
EVP<=S(0);
end ARCH_parity;

Par M.JAROU 11 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

Ex 2 :
entity compteur
port( clk, reset: in std logic;
S0, S1, S2: out std logic));
end entity compteur;

architecture comport of compteur is


begin
P1: process(clk, reset)
begin
if reset=’1’ then
S0 <= ’1’;
S1 <= ’0’;
S2 <= ’0’;
elsif clk=’1’ and clk’event then
S2 <= S0;
S1 <= S2 xor S0;
S0 <= S1;
end if;
end process P1;
end architecture comport;

Ex 3 :
1. La définition d'un sous programme VHDL appartient à une zone déclarative ou à une
bibliothèque d'objets ressources. La fonction peut être définie dans :
 La zone déclarative d'une entité,
 La zone déclarative d'une architecture,
 Dans un paquetage (package).

Dans la dernière méthode, qui est de loin la meilleure, la déclaration de la fonction (sa signature, ou
l'équivalent d'un prototype du langage C) appartient à l'en-tête de paquetage (package header)
tandis que la définition (le code) de la fonction appartient au corps (pacqkage body) du paquetage.

2.

3. La fonction réalisée est un incrémenteur : le vecteur de sortie représente un nombre codé en


binaire qui est égal au nombre représenté par le vecteur d'entrée plus 1.

4.
entity compteur is
port(hor : in bit ;
compte : out bit_vector(15 downto 0)) ;

Par M.JAROU 12 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

function incremente (e : in bit_vector)


-- suite de la définition de la fonction
end incremente ;
end compteur ;

architecture fonc of compteur is


signal cpt : bit_vector(15 downto 0) ;
begin
compte <= cpt ;

process
begin
wait until hor = '1' ;
cpt <= incremente(cpt) ;
end process ;

end fonc ;

5.
entity compteur is
port(hor, en, raz : in bit ;
compte : out bit_vector(15 downto 0)) ;
function incremente (e : in bit_vector)
-- suite de la définition de la fonction
end incremente ;
end compteur ;

Par M.JAROU 13 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

architecture fonc of compteur is


signal cpt : bit_vector(15 downto 0) ;
begin
compte <= cpt ;

process
begin
wait until hor = '1' ; -- commandes synchrones
if raz ='0' then -- mise à zéro prioritaire
cpt <= (others => '0') ;
elsif en = '0' then -- comptage actif à '0'
cpt <= incremente(cpt) ;
end if ; -- par défaut : mémoire
end process ;
end fonc ;

6.

entity compteur is
port(hor, en, raz : in bit ;
compte : out bit_vector(15 downto 0)) ;

function incremente (e : in bit_vector)


-- suite de la définition de la fonction
end incremente ;

end compteur ;

Par M.JAROU 14 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

architecture fonc of compteur is


signal cpt : bit_vector(15 downto 0) ;
begin
compte <= cpt ;
process(hor, raz) -- deux signaux activent le processus
begin
if raz ='0' then -- mise à zéro asynchrone
cpt <= (others => '0') ;
elsif hor'event and hor = '1' then -- synchrone
if en = '0' then -- comptage actif à '0'
cpt <= incremente(cpt) ;
end if ; -- par défaut : mémoire
end if ;
end process ;
end fonc ;

Ex 4 :
library
ieee;
use ieee.std_logic_1164.all;
ENTITY machine1 IS
PORT (RAZ, horl :IN STD_LOGIC; -- Ne pas oublier remise à 0 et horloge !
X, Y :IN STD_LOGIC;
S1, S2 :OUT STD_LOGIC);
END machine1;

ARCHITECTURE diagramme OF machine1 IS


TYPE etat_4 IS (M0, M1, M2, M3
SIGNAL etat,etat_suiv :etat_4 := M0;
BEGIN

definir_etat:PROCESS( raz, horl)


BEGIN
If raz = '1' THEN
etat <= M0;
ELSIF rising_edge(horl) THEN etat <= etat_suiv ;
END IF;
END PROCESS definir_etat ;

sorties : process (etat, x, y)


BEGIN
CASE etat IS
WHEN M0 => S1 <= '0'; S2<= '0';
IF Y='1' then etat_suiv <= M3;
elsif X='0' then etat_suiv <= M2;
ELSE etat_suiv <= M1;
END IF;

WHEN M1 => S1 <= '1'; S2<= '0';etat_suiv <= M2;


WHEN M2 => S1 <= '1'; S2<= '1';etat_suiv <= M3;
WHEN M3 => S1 <= '0'; S2<= '1';etat_suiv <= M0;
END CASE;
END process sorties ;
END diagramme ;

Par M.JAROU 15 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

TD N°3 :
Ex1:
Library ieee;
use ieee.std_logic_1164.all;

Entity D_RAZ is port


(D, clk, CLR : in std_logic;
Q : out std_logic);
End D_RAZ;

Architecture arch_D_RAZ of D_RAZ is


Begin
process (clk, CLR)
Begin
IF (CLR='0') then Q<='0';
ELSIF (clk'event and clk = '1') then Q<=D;
END IF;
END process;
END arch_D_RAZ;

Library ieee;
use ieee.std_logic_1164.all;

entity registre is port


(DIN, clk, REST_B : in std_logic;
DOUT : out std_logic_vector (15 downto 0));
End registre;

architecture arch_registre of registre is

component D_RAZ port (D, clk, CLR : in std_logic;


Q : out std_logic);
end component;

signal S : std_logic_vector (15 downto 0);

constant Nb_bits : integer :=15;

begin
cellule : for i in Nb_bits downto 0 generate

cellule_16 : if i = Nb_bits generate


D_RAZN_1 : D_RAZ port map ( DIN, clk, REST_B,S(15));
DOUT(i)<=S(i);
end generate cellule_16;

cellule_int : if (i<Nb_bits and i >0 ) generate


D_RAZint : D_RAZ port map ( S(i+1), clk, REST_B,S(i));
DOUT(i)<=S(i);
end generate cellule_int;

cellule_0 : if (i=0 ) generate


D_RAZ0 : D_RAZ port map ( S(i+1), clk, REST_B,S(i));
DOUT(0)<=S(0);
end generate cellule_0;

end generate cellule;

end arch_registre;

Par M.JAROU 16 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

Ex2:

Ex3 :
Library ieee;
use ieee.std_logic_1164.all;

entity seq is port (clk: in std_logic;


C: in bit; S1,S2: out std_logic);
end seq;

architecture arch_seq of seq is


signal Etat : std_logic_vector (2 downto 0);
begin
process (C,clk)
begin
if (clk' event and clk ='0') then
case Etat is
when "000" => S1<='0' ; S2<='0';
if C='1' then Etat <= "001";
else Etat <= "000";
end if;
when "001" => S1<='1' ; S2<='0';
if C='0' then Etat <= "010";
else Etat <= "001";
end if;
when "010" => S1<='1' ; S2<='1';
if C='0' then Etat <= "011";
else Etat <= "001";
end if;
when "011" => S1<='0' ; S2<='1';
if C='0' then Etat <= "100";
else Etat <= "001";
end if;
when "100" => S1<='0' ; S2<='0';

Par M.JAROU 17 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

if C='0' then Etat <= "000";


end if;
When others => Etat <= "000";
end case;
end if;
end process;
end arch_seq;

TD N°4:
Ex 1 :

library ieee;
use ieee.std_logic_1164.all;

entity register1 is port (


H, IR,IL,S0,S1 : in std_logic;
I: in std_logic_vector (3 downto 0);
Q : buffer std_logic_vector (3 downto 0));
end register1;

architecture arch of register1 is


Begin
process (S0, S1, H)
variable Z : integer;
variable N: Integer:=0;
begin
if (H'event and H ='1') then
if (S0='0' and S1= '0') then Q<=Q;
elsif (S0='0' and S1= '1') then Q<=I;
elsif (S0 ='1' and S1='0') then
Boucle1: For Z IN 3 downto 1 Loop
N:=Z-1;
Q(Z)<=Q(N);
End loop Boucle1;
Q(N)<=IR;
elsif (S0 ='1' and S1='1') then
Boucle2 : For Z IN 0 to 2 Loop
N:=Z+1;
Q(Z)<=Q(N);
End loop Boucle2;
Q(N)<=IL;
end if;
endif;
end process;
end arch;

Par M.JAROU 18 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

Ex 2 :
1) Seul le signal d’horloge clk fait partie de la liste de sensibilité de process. Seul un changement
d’état du signal clk va déclencher le process et par conséquent évaluer les instruction de celui-
ci.

2) La commande « init » est synchrone de l’horloge clk, et elle n’est pas mentionnés dans la liste
de sensiblité du process, par conséquence le process ne sera déclenché que par le signal
d’horloge clk. La commande ne fera que si un front montant sur clk aura lieu.

3) chronogramme

4)
entity basc is
Port ( T, clk, init,raz : in bit;
S: out bit);
end basc;

architecture primitive of basc is


signal etat : bit;
begin
S <= etat;
process (clk,raz)
begin
if (raz='1') then etat<= '0';
elsif (clk'event and clk='1') then
if ( init ='0') then
etat <= '1';
elsif (T='0')then
etat <= not etat;
end if;
end if;
end process;
end primitive;

5.
Library ieee;
use ieee.std_logic_1164.all;

entity basc is
Port ( T, clk, init,raz,oe : in std_logic;
S: out std_logic);
end basc;

architecture primitive of basc is


signal etat : std_logic;
begin
S <= etat;
process (clk,raz,oe)
begin
--wait until (clk = '1');
if (oe='0') then etat<= 'Z';

Par M.JAROU 19 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur

elsif (raz='1') then etat<= '0';


elsif (clk'event and clk='1') then
if ( init ='0') then etat <= '1';
elsif (T='0')then etat <= not etat;
end if;
end if;
end process;
end primitive;

Ex 3 :
1.
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity div_freq is port


(OSC : in std_logic;
CLOCK : inout std_logic);
end div_freq;

architecture arch_div_freq of div_freq is


begin
process (OSC)
variable COUNT_0, COUNT_1, COUNT_2 : integer range 0 to 250;
begin
if (OSC'event and OSC ='1') then COUNT_0:= COUNT_0+1;
if COUNT_0=250 then COUNT_1:= COUNT_1+1; COUNT_0:=0;
if COUNT_1=250 then COUNT_2:= COUNT_2+1; COUNT_1:=0;
if COUNT_2=80 then COUNT_2:=0;
if CLOCK='1' then CLOCK<='0';
else CLOCK <='1';
end if;
end if;
end if;
end if;
end if;
end process;
end arch_div_freq;
2.
Library ieee;
use ieee.std_logic_1164.all;

entity div_2 is
Port ( CLOCK : inout std_logic; RST : in std_logic; Q: out
std_logic);
end div_2;

architecture arch_div_2 of div_2 is


signal D,QN : std_logic;
begin
process (CLOCK,RST)
begin
if (RST='1') then Q<= '0'; QN<= '1';
elsif (CLOCK'event and CLOCK ='1') then Q<=D; QN<=not D;
end if;
end process;
D <= QN;
end arch_div_2 ;

Par M.JAROU 20 | P a g e

Vous aimerez peut-être aussi