Vous êtes sur la page 1sur 21

Université 8 Mai 1945 Guelma

Département d’électronique et télécommunication


Faculté des Sciences et de la technologie FST

TD "modélisation des circuits électronique


Exercice 1 : Faire un programme en VHDL pour réaliser un décodeur « Gray » sur 4 bits (l’entrée est en Gray,
la sortie en base 2).

library ieee;
use ieee.std_logic_1164.all, ieee.numeric_std.all;
entity gray_converter is
port ( gray_value : in std_logic_vector(3 downto 0);
binaire_value : out std-logic-vector(3 downto 0) );
end entity gray_converter;
The architecture is
architecture table of gray_converter is
begin
with gray_value slect
numeric_value <= "0000" when "0000", "0001" when "0001",
"0010" when "0011", "0011" when "0010",
"0100" when "0110", "0101" when "0111",
"0110" when "0101", "0111" when "0100",
"1000" when "1100", "1001" when "1101",
"1010" when "1111", "1011" when "1110",
"1100" when "1010", "1101" when "1011",
"1101" when "1001", "1111" when others;
end architecture table;

Exercice 2 : On considérera l’unité suivante:

entity DEMO is
port (D,CLK : in std_logic;
S : out std_logic);
end DEMO;
architecture XX of DEMO is
begin
PRO: process (CLK)
Begin
if (CLK'event and CLK ='1') then
if (D =’1’) then
S<= not (S);
q

end if;

1
end process PRO;
end XX;

1) Est-il plus adapté d’appeler XX


a. Comportemental b. Flot de données c. Structurel d. Mixte
2) Quelle est la fonction de XX ?
a. Additionneur b. Bascule c. Diviseur par deux d. Aucun
3) L’architecture XX ne compile pas. Pourquoi, quel est le message d’erreur
4) Que peut-on faire pour qu’elle compile (deux solutions simples)?
Inout , or made signal interne

Exercice 3 : Nous souhaitons réaliser le circuit multiplexeur ci-dessous :


a
b
c
d
e Output
f
g
h

Sel

1) Proposer deux architectures différentes (Flot de données, Comportemental)


library ieee;
use ieee.std_logic_1164.all;

entity MUX is port(


E0, E1, E2, E3: in std_logic;
SEL: in std_logic_vector(1 downto 0);
S: out std_logic);
end;

architecture CMP of MUX is


begin
process (E0, E1, E2, E3, SEL)
begin
case SEL is
when "00" => S <= E0;
when "01" => S <= E1;
when "10" => S <= E2;
when "11" => S <= E3;
end case;
end process;
end FLOT_MUX;
2) library ieee;
3) use ieee.std_logic_1164.all;
4)
5) entity MUX is port(
6) E0, E1, E2, E3, SEL0, SEL1: in std_logic;
7) S: out std_logic);
8) end;
9)
10) architecture FLOT_MUX of MUX is
11) begin
12) with SEL1 & SEL0 select
13) S <= E0 when "00",
14) E1 when "01",
15) E2 when "10",
2
16) E3 when others;
17) end FLOT_MUX;

18) library IEEE;


19) use IEEE.STD_LOGIC_1164.ALL;
20)
21) entity Multiplexer_VHDL is
22) port
23) (
24) a, b, c, d, e, f, g, h : in std_logic;
25) Sel : in std_logic_vector(2 downto 0);
26)
27) Output : out std_logic
28) );
29) end Multiplexer_VHDL;
30)
31) architecture Behavioral of Multiplexer_VHDL is
32) begin
33) process (a, b, c, d, e, f, g, h, Sel) is
34) begin
35) case Sel is
36) when "000" => Output <= a;
37) when "001" => Output <= b;
38) when "010" => Output <= c;
39) when "011" => Output <= d;
40) when "100" => Output <= e;
41) when "101" => Output <= f;
42) when "110" => Output <= g;
43) when others => Output <= h;
44) end case;
45) end process;
46) end Behavioral;

Exercice 4 On considérera le programme VHDL suivant :

Library ……;
Use ieee.std_logic_1164……;
Use ieee.numeric_std.all

entity ………. is
port (…………….
……………… )
end circuit ;

ARCHITECTURE ……… OF ………… IS


-- avec minimum de parenthèses
3
BEGIN
s(1) <= ( not a(3) and a(2) and not a(1) and a(0) ) OR ( a(3) and a(2) and not a(1) and a(0) )
s(0) <= ( not a(3) and a(2) and not a(1) and a(0) ) OR ( not a(3) and a(2) and a(1) and a(0) );
END ZZ;

1) Compléter le programme
2) Déduire la table de vérité
3) Réécrire le programme
a) Avec l’instruction with….. select
b) Avec l’instruction when ….. else
c) Sous le style comportemental
4) Data=’11000011’, Donner le résultat des instructions suivantes et la taille de chaque signal :
a) Z<=data(0)
b) X<=data(7 downto 4)
c) R<=’1’ when d=’1’ else
‘1’ when a=b and c=’0’ else
‘0’;
d) E<=(data(0), data(4), data(7))
e) B<=data(7) & ‘000’ & data(0)
f) (x,y)<=(data(3), data(7 downto 6))
g) H<=(7=>’0’, 6 downto 4=>data(4 downto 2), others=>’1’)

Entrées Sorties
a3 a2 a1 a0 s1 s0
0 1 0 1 1 1
0 1 1 0 0 1
1 1 0 1 1 0

ARCHITECTURE mydemo OF demo IS


BEGIN
WITH a SELECT --style with select when
s <= "11" WHEN "0101", -- premiere ligne
"01" WHEN "0110", -- deuxieme ligne
"10" WHEN "1101", -- troisieme ligne
"00" WHEN OTHERS;
END mydemo;
ARCHITECTURE mydemo OF demo IS
BEGIN
-- style when else
s <= "11" WHEN a="0101" ELSE -- premiere ligne
"01" WHEN a="0110" ELSE -- deuxieme ligne
"10" WHEN a="1101" ELSE -- troisieme ligne
"00";
END mydemo;

ARCHITECTURE mydemo OF demo IS


BEGIN
PROCESS(a) BEGIN
CASE a is --style case when
4
WHEN "0101" => s <="11"; -- premiere ligne
WHEN "0110" => s <="01"; -- deuxieme ligne
WHEN "1101" => s <="10"; -- troisieme ligne
WHEN OTHERS => s <="00";
END CASE;
END PROCESS;
END mydemo;

Exercice 5 : On souhaite décrire en VHDL une fonction logique dont la table de vérité est donnée ci-dessous.
Quelles descriptions VHDL correspondent à cette fonction ?

abs s
xx0 0
001 0
101 1
011 1
111 1

a) ENTITY myFunc IS b) ENTITY myFunc IS


PORT(a, b, c: IN std_logic; PORT(a, b, c: IN std_logic;
s: OUT std_logic); s: OUT std_logic);
END myFunc; END myFunc;
ARCHITECTURE ar OF myFunc IS ARCHITECTURE ar OF myFunc IS
SIGNAL ab : std_logic; SIGNAL abc: std_logic_vector(2 DOWNTO 0);
BEGIN BEGIN
s <= ab AND c; abc <= a & b & c;
ab <= a OR b; WITH abc SELECT
END ar; s <='1' WHEN "011" | "101" | "111",
'0' WHEN OTHERS;
END ar;
c) ENTITY myFunc IS d) ENTITY myFunc IS
PORT(a, b, c: IN std_logic; PORT(a, b, c: IN std_logic;
s: OUT std_logic); s: OUT std_logic);
END myFunc; END myFunc;
ARCHITECTURE ar OF myFunc IS ARCHITECTURE ar OF myFunc IS
BEGIN BEGIN
s <= c AND (a OR b); s <= a OR (b AND c);
END ar; END ar;

Exercice 6 : A quelles schémas structurels correspond la déclaration d'entité VHDL ci-dessous ?

ENTITY myFunc IS
PORT(
a, b: IN std_logic;
s: OUT std_logic_vector(3 downto 0));
END myFunc;

5
Exercice 7 Parmi les propositions ci-dessous qui se rapportent à la description VHDL suivante, lesquelles sont
vraies ?
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY myFunc IS
PORT(
a: IN std_logic_vector(7 DOWNTO 0);
b: IN std_logic_vector(2 DOWNTO 0);
c: OUT std_logic
);
END myFunc ;
ARCHITECTURE ar OF myFunc IS
BEGIN
WITH b SELECT
c <=
a(7) WHEN "111",
a(6) WHEN "110",
a(5) WHEN "101",
a(4) WHEN "100",
a(3) WHEN "011",
a(2) WHEN "010",
a(1) WHEN "001",
a(0) WHEN "000",
'0' WHEN OTHERS;
END ar;
( a ) Avec un tel circuit, il est possible de faire n'importe quel opérateur logique qui comporte au
plus 3 entrées et une sortie.
( b ) Avec un tel circuit, il est possible de faire n'importe quel opérateur logique qui comporte au
plus 8 entrées et une sortie.
( c ) La description ci-dessus est un multiplexeur 8 vers 1.
( d ) La description ci-dessus est un décodeur 1 parmi 8.
( e ) La description ci-dessus est un décodeur 3 parmi 8.
( f ) La description ci-dessus est un multiplexeur 3 vers 1.
( g ) Le cas OTHERS n'a aucune chance de se présenter ici, on aurait pu l'enlever.
( h ) Même si le cas OTHERS n'a aucune chance de se présenter, il ne faut pas le supprimer sinon la
description ne correspond plus à un circuit combinatoire.
( i ) Le signal a correspond à l'adresse de l'entrée sélectionnée pour être en sortie.
( j ) Le signal b correspond à l'adresse de l'entrée sélectionnée pour être en sortie.

Exercice 8 QCM (Il peut y avoir plusieurs réponses par question)

1) La description d'un composant en VHDL est composée


a) D'une architecture b) D'un processus c) D'une entité
6
b) D'une instance de composant d) D'instructions concurrentes
2)La description d'une entité contient
a) La déclaration des signaux internes b) La déclaration des composants utilisés
c) Les descriptions de processus d) d’instances de composants et d'instructions concurrentes e) La
déclaration du port contenant la liste des signaux en entrée et en sortie
3) En VHDL, dans une architecture avant le mot-clé BEGIN, on peut trouver :
ARCHITECTURE TOTO OF TITI IS
- - <===ICI ===
BEGIN
--
END
a) Des instances de composant b) Des déclarations de composants
d) Des déclarations de signaux internes e) Des instructions séquentielles
f) Des instructions concurrentes
4) En VHDL, dans un processus, on peut trouver
a) Des instances de composant b) Des instructions concurrentes
c) Des instructions séquentielles d) Une architecture
e) Un autre processus

5) En VHDL, les instructions concurrentes sont


a) L'affectation permanente b) Les instructions WHEN/ELSE et WITH/SELECT
c) L'affectation de signal différée d) L'affectation de variable immédiate
e) Les instruction IF/THEN/ELSE, CASE/WHEN, WHILE et FOR

6) En VHDL, les instructions séquentielles sont


a) L'affectation permanente b) Les instruction WHEN/ELSE et WITH/SELECT
c) L'affectation de signal différée d) L'affectation de variable immédiate
e) Les instruction IF/THEN/ELSE, CASE/WHEN, WHILE et FOR

7) Un processus contient
a) toujours une instruction WAIT b) toujours une liste de sensibilité.
c) Obligatoirement soit une ou plusieurs instructions WAIT, soit une liste de sensibilité, soit les deux.
d) Toujours une liste de sensibilité et éventuellement une ou plusieurs instructions WAIT.
e) Obligatoirement soit une instruction WAIT, soit une liste de sensibilité, mais jamais les deux.

8) Pour quelles instructions est-ce que leur position par rapport aux voisines n’a pas d’importance
(cocher)?
a. L’instance de composant
b. L’affectation de variable
c. L’affectation de signal conditionnelle
9) Le circuit suivant

Library IEEE; USE PROCESS (A,B)


IEEE.STD_LOGIC_1164.ALL; BEGIN
ENTITY TOTO IS IF A='1' THEN
PORT ( A,B : IN STD_LOGIC; Q : OUT Q <= B;
STD_LOGIC); ELSE
END TOTO; Q <= '0';
ARCHITECTURE TITI OF TOTO IS END IF;
BEGIN END PROCESS;
PROCESS (A,B) END TITI;

a) Est combinatoire b) Est séquentiel synchrone c) Est séquentiel asynchrone


7
Exercice 9

library ieee;
use ieee.std_logic_1164.all;
entity ex is
port (X : in std_logic ;
Q: out std_logic);
end ex;
architecture ZZ of ex is
begin
PROCESS(x)
begin
if (rising_edge(x)) then
Q <= not Q ;
end if;
end process;
end ZZ;

1) Est-il plus adapté d’appeler ZZ


a. Comportemental b. Flot de données c. Structurel d. Mixte

2) L’architecture ZZ ne compile pas. Pourquoi, quel est le message d’erreur ?


3) Que peut-on faire pour qu’elle compile (deux solutions simples)?
Lorsqu’elle sera réparée, quelle sera sa fonction ?

a. Diviseur de fréquence par deux b. Détecteur de vase c. Aucun


d. bascule D e. bascule T

Exercice 10 : Nous souhaitons réaliser le circuit décodeur 3x8. Proposer deux architectures différentes (Flot de
données, Comportemental)

Exercice 11 : Une bascule D a une entrée (D) une sortie (Q) et un horloge (CK). Son fonctionnement est tel :
quand l’horloge a un front montant (de 0 à 1), la sortie Q prend et retient la valeur de l’entrée D.
a) Ecrire l’entité et une architecture flot de données (dataflow) de cette bascule.
b) En cascadant des bascules D (chaque sortie reliée sur l’entrée de la suivante, et toutes les horloges
reliées ensemble) on peut faire une ligne à retard. Ecrire une telle ligne à retard à 4 éléments, qui
instancie donc quatre bascules D. Entité (une entrée, une sortie, une horloge) et architecture structurelle.
c) Rajouter à cette entité une sortie P (comme pattern, « motif ») et modifier l’architecture de telle sorte
que cette sortie passe à 1 chaque fois que l’entrée de la ligne à retard a suivi la séquence 1011 (et jamais
sinon.). On rajoutera une ou des instructions flot de données (dataflow) dans l’architecture.
d) entity compteur
e) port( clk, reset: in std logic;
f) S0, S1, S2: out std logic));
g) end entity compteur;
h) architecture comport of compteur is
i) begin
j) P1: process(clk, reset)
k) begin
l) if reset=’1’ then
m) S0 <= ’1’;
n) S1 <= ’0’;
o) S2 <= ’0’;
p) elsif clk=’1’ and clk’event then
q) S2 <= S0;
r) S1 <= S2 xor S0;
s) S0 <= S1;
t) end if;
u) end process P1;
v) end architecture comport;
8
w)
x)

Exercice 12 : Pour le circuit ci-dessous donnez le couple entité - architecture

Library ieee ;
Use ieee.std_logic_1164.all ;
Entity exercice4 is
port( A: in std_logic;
B: in std_logic;
SEL: in std_logic;
CLK: in std_logic;
O: out std_logic);
End exercice4;
Architecture behv of exercice4 is
Signal S1,S2,S3 std_logic;
begin
S1<= A xor B;
S2<= A and B;
process(SEL)
begin
if SEL=’1’ then
S3=S1;
else
S3<=S2;
end if ;
end process;
process(CLK,S3)
begin
if (CLK'event and CLK=1 ) then
O<=S3;
end if;
end process;
end behv;

9
;Exercice 14: Le but est de synthétiser un circuit combinatoire qui fait une extension de signe de son
entrée de 12 bits sur 16 bits (entrée std_logic_vector (11 downto 0) et la sortie est std_logic_vector (15 downto
0) ). (soit par un process soit par une instruction concurrente)
Donner le couple entité-architecture.

Exemple : pour l’entrée 0100 1011 1100 on aura 0000 0100 1011 1100 alors que pour l’entrée
1100 1011 1100 on aura 1111 1100 1011 1100
1-
entity extention is
Port ( A : in STD_LOGIC_VECTOR (11 downto 0);
B : out STD_LOGIC_VECTOR (15 downto 0));
end exte;
architecture Behavioral of extension is
begin
B <= A(11) & A(11) & A(11) & A(11) & A;
end Behavioral;

Exercice 14: Nous cherchons à synthétiser un ALU combinatoire avec les opérations d’addition, de soustraction,
de "et" logique bit à bit et de "ou" logique bit à bit. Le choix d’opération se fait par une entrée sous forme de bus
de taille 2. Les opérandes sont des bus de taille 8 bits. Donner le couple d’entité-architecture.

entity ALU is
port( A: in std_logic_vector(7 downto 0);
B: in std_logic_vector(7 downto 0);
Sel: in std_logic_vector(1 downto 0);
Res: out std_logic_vector(7 downto 0) );
end ALU;
-- Sel="00" => Addition
-- Sel="01" => Soustraction
-- Sel="00" => et logique bit à bit
-- Sel="00" => ou logique bit à bit
architecture behv of ALU is
process(A,B,Sel)
begin
case Sel is
when "00" =>
Res <= A + B;
when "01" =>
Res <= A + (not B) + 1;
when "10" =>
Res <= A and B;
when "11" =>
Res <= A or B;
when others =>
Res <= "XX";
end case;
end process
Exercice 15: Construire la table de vérité du circuit suivant et puis donner un process combinatoire à base de ce
tableau pour le réaliser

10
Quelles sont les conditions nécessaires pour qu’un process soit combinatoire ?

Exercice 16 : 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; et les de type std_logic ;

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


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;

Exercice 17:
Soit la description VHDL suivante:

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

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


2. Le circuit est-il comportemental ou structurelle ? Justifiez.
3. Le processus P1 est-il combinatoire ou séquentiel? Justifiez.
4. Quel est selon vous la fonction de ce circuit?
5.

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;

12
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

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;

Exercice 18 : Détecteur de parité (3 points)


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) : DIN (données de type bit_vector 4 bits)
§ Signaux de sortie (mode out): ODP (parité impaire de type bit), EVP (parité paire de type bit)
13
- 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’
a- Donner la table de vérité selon le 15 différentes valeurs possibles de DIN.
b- Coder le comportement avec l’instruction d’assignation sélective (with…. Select).
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;

Exercice 19
Nous avons à notre disposition une entité intitulée "mux4to1" qui est un multiplexeur 4 voies vers une,
schématisé ci-dessous.

Le but est d'utiliser cette entité pour fabriquer un multiplexeur 8 voies vers une. Des indications sur le
schématique du circuit résultant sont donnée ci-dessous.

14
sortie
s

sortie

Donner la table de vérité du multiplexeur 8 -> 1.


Faites des interconnections nécessaires sur le schéma ci-dessus pour obtenir le mux8to1.
Compléter le programme ci-dessous pour générer ce multiplexeur.

entity MUX8TO1 is signal . . .


port( … begin

); ...
end MUX8TO1;
architecture RTL of MUX8TO1 is end RTL;
component MUX4TO1
port(a : in std_logic_vector(3 downto 0);
S : in std_logic_vector(1 downto 0);
sortie : out std_logic);
end component;

entity MUX8TO1 is
port( X: std_logic_vector (7 downto 0);
SEL : std_logic_vector (2 downto 0);
Y : out std_logic
);
end MUX8TO1;
architecture RTL of MUX8TO1 is
component MUX4TO1
port(entree : in std_logic_vector(3 downto 0);
SEL : in std_logic_vector(1 downto 0);
Y : out std_logic);
end component;
signal IN1, IN2: std_logic;
begin
U1: MUX4TO1 port map(entree => X(3 downto 0),
SEL => SEL(1 downto 0),
Y=>IN1);
U2: MUX4TO1 port map(entree => X(7 downto 4),
SEL => SEL (1 downto 0),
Y=>IN2);
Y <= IN1 when SEL(2)='0' else IN2;
End RTL
A) Ce programme permet de détecter un front montant sur un signal qui n’est pas l’horloge
principale. Ainsi, on peut faire exécuter un process quand ce front montant a été détecté. Par
exemple le process ci-dessous est
15
process(MCLK)
begin
if MCLK’event and MCLK=’1’ then
if front = ‘1’ then
le traitement
end if ;
end if ;
end process ;
B)

Ecrivez une description en VHDL comportemental à partir de cette entité qui compte les transitions montantes
sur x et présente en tout temps le compte courant sur 8 bits à la sortie y.
library ieee;
use ieee.std logic_1164.all;
use ieee.numeric_std.all;
entity compteur
port ( x: in std logic;
y: out std_logic_vector(7 downto 0));
end entity compteur;
Architecture behv of compteur is
begin
process(x,y)
begin
if (x'event and x=1 ) then
y<=y+1;
if(y=256) then
y<=0;
end if;
end process;
end behv;
----------------------------------------------------------------------------------
library ieee;
use ieee.std logic_1164.all;
use ieee.numeric_std.all;
entity compteur
port ( x: in std logic;
d: out std_logic ;
y: out std_logic_vector(7 downto 0));
end entity compteur;
Architecture behv of compteur is
begin
process(x,y,d)
begin
if (x'event and x=1 ) then
y<=y+1;
if(y>255) then
d<=1;
end if;
end process;
end behv;
library ieee;
use ieee.std_logic_1164.all;

entity FFD is port(


D, RAZ, CLK: in std_logic;
Q: out std_logic);
end;

16
architecture ARCH_FFD of FFD is
begin
process(CLK, RAZ)
begin
if rising_edge(CLK) then
if RAZ = '1' then
Q <= '0';
else
Q <= D;
end if;
end if;
end process;
end ARCH_FFD;
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity BASCULEDSRS is port (
D,CLK,SET,RESET : in std_logic;
S : out std_logic);
end BASCULEDSRS;
architecture DESCRIPTION of BASCULEDSRS is begin
PRO_BASCULEDSRS : process (CLK)
Begin
if (CLK'event and CLK ='1') then if (RESET =’1’) then
S <= ‘0’;
elsif (SET =’1’)then
S <= ‘1’;
else
S <= D;
end if;
end if;
end process PRO_BASCULEDSRS;
end DESCRIPTION;
Bascule T.
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity BASCULET is
port (
D,CLK : in std_logic;
S : out std_logic);
end BASCULET;
architecture DESCRIPTION of BASCULET is
signal S_INTERNE : std_logic; -- Signal interne
begin
PRO_BASCULET : process (CLK)
Begin
if (CLK'event and CLK ='1') then
if (D =’1’) then
S_INTERNE <= not (S_INTERNE);
end if;
end if;
end process PRO_BASCULET;
S <= S_INTERNE;
end DESCRIPTION;
Library ieee;
Use ieee.std_logic_1164.all;

17
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity CMP4BITS is
PORT (
CLOCK : in std_logic;
Q : inout std_logic_vector(3 downto 0));
end CMP4BITS;
architecture DESCRIPTION of CMP4BITS is begin
process (CLOCK)
begin
if (CLOCK ='1' and CLOCK'event) then
Q <= Q + 1;
end if;
end process;
end DESCRIPTION;
Library ieee;
Use ieee.std_logic_1164.all; Use ieee.numeric_std.all;
Use eee.std_logic_unsigned.all;
entity CMP4BITSLUD is
PORT (
RESET, CLOCK, LOAD, UP: in std_logic;
DATA : in std_logic_vector (3 downto 0);
Q : out std_logic_vector (3 downto 0));
end CMP4BITSLUD;
architecture DESCRIPTION of CMP4BITSLUD is signal CMP: std_logic_vector (3
downto 0); begin
process (RESET,CLOCK)
begin
if RESET ='1' then
CMP <= "0000"; -- Remise à zero asynchrone du compteur
elsif (CLOCK ='1' and CLOCK'event) then if (LOAD =’1’) then
CMP <= DATA; -- Préchargement synchrone
Else
if (UP =’1’)
then CMP <= CMP + 1; -- Incrémentation synchrone
else
CMP <= CMP – 1; -- Décrémentattion synchrone
end if;
end if;
end if;

18
end process;
Q <= CMP;
end DESCRIPTION;

19
20
end process;
Q <= CMP;
end DESCRIPTION;

21