M21.
Synthèse sur FPGA
Langage VHDL
VHSIC : Very High-Speed Integrated Circuits
HDL : Hardware Description Language
Objectif du module M21
Fournir une base solide pour que les étudiants en génie électrique comprennent et développent des
systèmes basés sur des microcontrôleurs dans divers contextes industriels et technologiques ;
Offrir une compréhension approfondie de la conception et de l'utilisation des FPGA dans divers
domaines de l'ingénierie électrique, en mettant l’accent sur la pratique et les applications réelles ;
Introduire l’utilisation d’outils avancée de modélisation de systèmes électroniques et
d'implémentation sur des FPGA.
Contenu Synthèse sur FPGA
COURS :
Introduction aux FPGA : Historique et évolution des FPGA, Architecture générale d'un FPGA, Comparaison avec
d'autres solutions : ASIC, Microprocesseur et DSP.
Langages de description matérielle HDL : Principes de base des langages HDL (VHDL, Verilog) , Utilisation d’outils
de synthèse et de simulation.
Conception de systèmes sur FPGA : Méthodologie de conception (flux de conception, étapes de développement),
Techniques avancées de conception avec prise en compte des contraintes temporelles et de consommation
électrique.
Utilisation d'outils de génération de code pour l’implémentation sur FPGA d’application de traitement du signal,
commande de systèmes, ….
Travaux Pratiques :
TP1 : Traitement du signal en temps réel sur FPGA.
TP2: Implémentation sur FPGA de fonctions numériques pour le contrôle d’un dispositif.
2
Evaluation
- La note minimale pour valider le module doit être supérieure ou égale à 12
-La note minimale pour valider le composant module doit être supérieure ou égale à 12
La note du module : n = 0.50 x n1+ 0.50 x n2
Avec ni désigne la note globale de l’élément i du module :
ni=0.2 x nCC + 0.3 x nTP + 0.5 x nEF
- nCC = note du contrôle continu.
- nTP = notes de travaux pratiques.
- nEF = note de l’examen final de fin de semestre
Modalités de prise en compte de la note de Rattrapage :
ni=0.2 x nCC + 0.3 x nTP + 0.5 x nMax
- nMax = maximum (nEF ; Note de l’examen de rattrapage).
• La note minimale pour valider le module : 12.00/20
• Seuls les éléments de module dont la note est inférieure à 12.00/20 sont concernés par le rattrapage.
• La note finale après rattrapage du module est plafonnée à : 12.00/20
3
Introduction aux FPGA
Historique et évolution des FPGA, Architecture générale d'un FPGA,
Comparaison avec d'autres solutions : ASIC, Microprocesseur et DSP.
Introduction
Besoin croissant des entreprises d’avoir du personnel qualifié dans la
programmation des cartes FPGA
FPGA (Field Programmable Gate Array)
6
Architecture
7
Comparaison de solutions numériques
Langages de description matérielle
HDL
Principes de base des langages HDL (VHDL, Verilog) , Utilisation
d’outils de synthèse et de simulation.
VHDL (HDL : Hardware Description Language)
Les objectifs du langage VHDL
Conception de circuits intégrés reconfigurable ou non (ASIC, FPGA…) :
SYNTHESE
Mise au point de modèle de simulations numériques (circuits virtuels) :
MODELISATION
Le langage est capable de DECRIRE
des comportements CONCURRENTS ( // ) Les deux portes
Des comportements séquentiels travaillent en //
10
VHDL (HDL : Hardware Description Language)
Langage formel pour la spécification des systèmes digitaux, aussi
bien au niveau comportemental que structurel
Caractéristiques principales:
o description à plusieurs niveaux
o simulation activée par événements (event-driven)
o Modularité
o Extensibilité
o langage général, fortement typé
Entité et architecture
Au plus haut niveau d’abstraction, un système digital est vu comme une “boîte
noire”, dont on connaît l’interface avec l’extérieur
C’est l’entité (entity)
Une entité doit toujours être associée avec au moins une description de son
implémentation:
c’est l’architecture
Structure d’un programme VHDL
library ieee;
use ieee.std_logic_1164. all;
entity Telecom is
port (
Déclaration
des Nom de
entrées/sorties );
l’entité
end Telecom;
architecture Reseau of Telecom is
Déclaration
de
l’architecture begin Nom de l’architecture
Corps de
l’architecture
end Reseau;
VHDL: concepts de base
Structure générale
14
Les types (1)
VHDL est un langage fortement typé: toute donnée doit être déclarée
avant utilisation, en indiquant son type.
Les types prédéfinis sont:
Scalaire
o integer
o real
o enumerated
o physical
Composé
o array
o record
Pointeur
o acces
I/O
o file
Les types (2)
On peut également créer de nouveaux types, en fonction des types
prédéfinis.
Par exemple:
type HuitBits is range 0 to 255;
type CodeDEtat is (init, ST1, ST2, exit);
type word is array (0 to 31) of bit;
type EtatsLogiques is record
valeur : integer range -127 to 128;
force : integer;
end record;
Les types (3)
Les types de données les plus utilisés sont std_logic, pour les
données à un bit, et std_logic_vector, pour les bus
Ces types ne sont pas prédéfinis: pour les utiliser, il faut déclarer le
paquet (package) std_logic_1164, qui fait partie de la
bibliothèque (library) IEEE:
library ieee;
use ieee.std_logic_1164. all ;
use ieee.std_logic_unsigned. all ;
Les types (4)
Pour utiliser des fonctions arithmétiques sur les STD_LOGIC_VECTOR
on doit déclarer
USE IEEE.NUMERIC_STD.ALL;
ou USE IEEE.std_logic_arith.all;
exemples
Q<=Q+1; -- Q est un std_logic_vector et 1 est un entier!!
A<B -- A et B des std_logic_vector
Data<=CONV_STD_LOGIC_VECTOR(TEMP,8);
o Avec la déclaration: TEMP integer range 0 to 255;
18
Le type std_logic
Une donnée de type std_logic possède une valeur parmi neuf possibles:
o ‘U’ uninitialized
o ‘X’ forcing unknown
o ‘0’ forcing 0
o ‘1’ forcing 1
o ‘Z’ high impedance
o ‘W’ weak unknown
o ‘L’ weak 0 (pull-down)
o ‘H’ weak 1 (pull-up)
o ‘-’ don’t care
Pour une affectation, les valeurs utilisées sont: ’X’, ‘0’, ‘1’, ‘Z’
Opérateurs (1)
Opérations logiques: (Type : boolean, bit, std_ulogic)
and or nand nor xor not
Opérations de décalage
sll srl sla sra rol ror
Opérations de signe:
+ -
Opérateurs (2)
Relationnels ( retournent un boolean)
= /= < <= > >=
Arithmétiques
+ - * / MOD
Concaténations d’éléments : &
"bon" & "jour" => "bonjour"
"1001"&"0110"=>"10010110"
Un bus (ou ensemble
de fils électrique) est
représenté sous forme
d’un vecteur de bits
STD_LOGIC_VECTOR (3 DOWNTO 0);
21
Littéraux
Caractères: ’0’ , ’x’ , ’a’ , ’%’
Chaînes: ”11110101” , ”xx” , ”bonjour” , ”$@&”
Chaînes de bits: B”0010_1101” , X ”2D” , O”055”
Décimaux: 27 , -5 , 4e3 , 76_562 , 4.25
Basés: 2#1001# , 8#65_07 , 16#C5#e2
Ne pas confondre 1 bit
exemple ‘0’ ou ‘1’
Avec un vecteur de bits
"11" ou "1101110"
22
Quelques notes sur la syntaxe d’un programme VHDL:
o pas de différentiation entre majuscules et minuscules
o format libre
o toute phrase termine par un point virgule
o le début d’un commentaire est signalé par un double trait (“--”).
Le commentaire termine avec la fin de ligne
Exercice
Ecrire un programme VHDL pour réaliser le module suivant
A
S1
S2
B
24
Données traitées par VHDL
Toute donnée traitée par VHDL doit être déclarée comme
constante, variable ou signal
Constantes:
constant pi : real := 3.1416;
constant index_max : integer is 10*N;
Variables:
valeur modifiable immédiatement par une affectation (:=)
variable stop : boolean;
variable etat : CodeDEtat := ST0;
Signaux:
modélisation de l’entrée/sortie d’un dispositif.
C’est une forme d’onde qui change avec le temps: la modification a
lieu à la prochaine itération de la simulation (retard delta)
Signaux
Pour connecter les différents composants d’un système, VHDL utilise les
signaux (signal),
C’est l’équivalent des fils ou câbles d’interconnexion dans le monde réel
Initialisation
À éviter dans
Exemple: la synthèse
signal s : std_logic := ’0’;
•••
s <= ’1’ after 10ns, ‘0’ after 18ns, ‘1’ after 25ns;
affectation
Signaux (suite)
On peut associer certains attributs aux signaux, qui produisent une valeur.
Exemples d’attributs :
o •s’ event :
(=vrai) si un événement arrive pendant le delta présent (c’est-à-dire, si le
signal s change de valeur)
o •s’ active:
(=vrai) si une transaction arrive pendant le delta présent (c’est-à-dire, si le
signal s est évalué, qu’il change ou pas de valeur)
Un signal est toujours global à une architecture donnée
Logique combinatoire
Assignation simples 1
library IEEE;
use IEEE.std_logic_1164.all;
entity ET3 is
port(
E : IN std_logic_vector(2 downto 0);
S : OUT std_logic
);
end ET3;
architecture arch_ET3 of ET3 is
begin
S <= E(2) and E(1) and E(0);
end arch_ET3;
28
Logique combinatoire
Assignation simples 2
library IEEE;
use IEEE.std_logic_1164.all;
entity example is
port(
E:IN std_logic_vector(2 downto 0);
S1:OUT std_logic;
S2,S3:OUT std_logic_vector(3 downto 1);
S4:OUT std_logic_vector(2 downto 0)
);
end example;
architecture arch_example of example is
begin
S1 <= '0';
S2 <= '1'& E(1 downto 0);
S3 <= "101";
S4 <= "111" XOR E;
end arch_example;
29
Logique combinatoire: Instructions concurrentes
Assignation conditionnelle
Structure WHEN/ELSE
signal <= signal1 when expresion_boolénne else
………
signalx when expresion_boolénne else LIBRARY ieee;
signalpardéfaut; USE ieee.std_logic_1164.all;
---------------------------------------------
ENTITY encoder IS
PORT ( x: IN STD_LOGIC_VECTOR (3 DOWNTO 0);
y: OUT STD_LOGIC_VECTOR (1 DOWNTO 0));
END encoder;
---------------------------------------------
ARCHITECTURE encoder1 OF encoder IS
BEGIN
y <= "00" WHEN x="0001" ELSE
"01" WHEN x="0010" ELSE
"10" WHEN x="0100" ELSE
"11" WHEN x="1000" ELSE
"ZZ";
END encoder1;
---------------------------------------------
30
Exercice
Ecrire un programme VHDL au niveau comportemental puis réaliser un Testbench pour
tester le montage suivant
31
Logique combinatoire: Instructions concurrentes
Assignation sélective
with expression select
signal1 <= signal1when valeur 1,
signal2 when valeur2,
------
signal par défaut when others ;
Le multiplexeur: on aiguille une enrée vers la
sortie en fonction d’un numéro d’aiguillage
32
Logique combinatoire: Instructions concurrentes
Instanciation (placement) de composants déjà crées
Découpage de votre projet en fonctions: création de
composants adéquats
Assemblage des composants créés pour structurer votre projet
MOT CLE: PORT MAP
Ma Référence :port map ( liste ordonnée de signaux) ;
ou
Ma Référence : port map ( port=> signal , port => signal ) ;
33
TD : additionneur 4 bits
étape 1: créer un composant ADDITIONNEUR 1 bits
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY adit1 IS PORT (
Ci, X, Y: IN STD_LOGIC;
S, Cout: OUT STD_LOGIC);
END adit1;
ARCHITECTURE Dataflow OF adit1 IS
BEGIN
Cout <= (X AND Y) OR (Ci AND (X XOR Y));
S <= X XOR Y XOR Ci;
END Dataflow;
34
TD : additionneur 4 bits
étape2: structurer le niveau supérieur ( comment faire 4 bits avec 1 bit?)
library IEEE;
use IEEE.std_logic_1164.all;
entity add4full is
port(
Cin:IN std_logic;
A:IN std_logic_vector(3 downto 0);
B:IN std_logic_vector(3 downto 0);
Res:OUT std_logic_vector(3 downto 0);
Cout:OUT std_logic
);
end add4full;
TD : additionneur 4 bits
étape2: structurer le niveau supérieur ( comment faire 4 bits avec 1 bit?)
architecture arch_add4full of add4full is
-- declaration du composant add1full
component adit1 is
port(
Ci:IN std_logic;
X,Y:IN std_logic;
S,Cout:OUT std_logic
);
end component adit1;
-- declaration des fils internes pour le report carry
signal Fil1,Fil2,Fil3:std_logic;
begin
-- placement des 4 aditionneurs complets
U0: adit1 port map (Cin,A(0),B(0),Res(0),Fil1);
U1: adit1 port map (Fil1,A(1),B(1),Res(1),Fil2);
U2: adit1 port map (X=>A(2),Ci=>Fil2,Y=>B(2),Cout=>Fil3,S=>Res(2));
U3: adit1 port map (Fil3,A(3),B(3),Res(3),Cout);
end arch_add4full;
Exercice
37
Exercice
B1B0 > A1A0
38
Exercice
Réaliser puis simuler une bascule RS:
à portes NAND
à portes NOR
39
Processus (process)
Une architecture en VHDL est un ensemble de processus exécutés
en parallèle (en concurrence)
L’ordre relatif des processus à l’intérieur d’une architecture n’a
pas d’importance
Il existe deux types de processus:
le processus implicite ou phrase concurrente
le processus explicite
architecture toto of test is
begin
c <= a and b; Processus implicites
z <= c when oe=‘1’ else ‘Z’;
Seq: process (clk, reset)
begin
Processus explicite
.
.
end process;
end toto;
Processus (process)
Un processus explicite est un ensemble de phrases exécutées
séquentiellement:
à l’intérieur d’un processus l’ordre des phrases a donc une
importance
Un processus ne peut pas être déclaré à l’intérieur d’un autre
processus.
liste de sensibilité
procA: process (a, b)
déclarations du processus
étiquette optionnelle
begin
corps du processus
end process;
Logique séquentielle: le process
Le mot clé PROCESS
Syntaxe:
MONETIQUETTE : process (signal1, signal2 etc)
-- zone déclarative
Signal sFIL1,sFIL2 : xxxxxxxx
Begin
xxx
xxx
xxx
end process MONETIQUETTE;
Le PROCESS est activé lors d’un changement d’état d’un des
signaux de la liste de sensibilité
Une fois dans le PROCESS le déroulement est SEQUENTIELLE
Les instructions utilisables dans un PROCESS sont SPECIFIQUE
(pas de when/else par exemple)
Les signaux sont mis à jour uniquement à la fin du process
process Process
Process(a,b)
begin begin
begin
q <= d; c <= a and b;
c <= a and b;
wait until R = ‘1’; wait on a, b;
end process;
end process; end process;
42
TD
Réaliser un conteur modulo 16
entity Compteur is
PORT (
Rst, Clk : in std_logic;
Cpt : out std_logic_vector (3 downto 0));
Clk 4Bits end Compteur ;
Compteur Cpt
architecture DESCRIPTION of Compteur is
signal Compt : std_logic_vector (3 downto 0);
Rst begin
process (Rst , Clk)
begin
if Rst = '0' then
Compt <= "0000";
elsif (Clk ='1' and Clk 'event) then
Compt <= Compt + 1;
end if;
end process;
Cpt <= Compt ;
end DESCRIPTION;
43
Résumé d’instructions
VHDL
Conception de systèmes sur FPGA
Méthodologie de conception (flux de conception, étapes de
développement), Techniques avancées de conception avec prise en
compte des contraintes temporelles et de consommation électrique.
Flot de conception
49
Conception
d’un CI en
VHDL
50
Spécification
Validation fonctionnelle
Design correct
non
oui
Validation temporelle
Spécifications
non temporelles
correctes
oui
Programmation
Spécification : saisie du circuit logique (spécification syntaxique : VHDL, Verilog, mode graphique, etc.)
Validation fonctionnelle : simulation fonctionnelle du concept (problèmes des sorites/sorties, boucles,
etc.). Vérification ne prenant pas en compte les aspects temporels du circuit
Validation temporelle : Simulation temporelle (et fonctionnelle) du circuit (temps de propagation,
recouvrement de signaux, etc.).
Implémentation : le programme est porté physiquement sur le circuit FPGA en fonction des spécifications
précisé par le programmeur (pins, etc.)
51
Outils de Conception
Utilisation d'outils de génération de code pour l’implémentation sur
FPGA d’application de traitement du signal, commande de systèmes, ….
Initiation à la programmation sous ISE de chez Xilinx
On veut réaliser un additionneur
A S
B + R
53
Lancement de l’outil ISE
54
Création d’un nouveau projet
File>New Project
La fenêtre New Project Wizard – Create New Project apparaît, renseignez la avec les
valeurs voulues :
Project Name : nom de votre projet (attention pas d’espaces dans le nom)
Project Location : chemin de sauvegarde du projet et des fichiers associés
Top-Level Source Type : HDL
Cliquer sur Next
et renseigner les informations suivantes:
55
Editer le programme
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity bloc is
Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
S : out STD_LOGIC;
R : out STD_LOGIC);
end bloc;
architecture Behavioral of bloc is
begin
S <= A xor B ;
R <= A and B ;
56
end Behavioral;
Synthèse
En double cliquant à gauche sur la ligne Synthesize – XST vous
lancer automatiquement le synthétiseur Xilinx XST
Il est possible de visualiser le rapport de synthèse qui comporte
toutes les informations sur le résultat de synthèse, on peut voir
comment le synthétiseur à transformer la description en un
circuit au niveau RTL (Register Transfert Level).
On peut visualiser le schéma RTL (schéma avec des fonctions simple
de l’électronique numérique)
Ou le schéma Technologique (schéma avec les éléments internes du
FPGA, LUT ou registre par exemple).
57
Testbench
VHDL est à la fois un langage de synthèse, et de simulation
Un testbenchVHDL est un code VHDL destiné à la vérification, par
simulation, du bon fonctionnement d’un système
Dans l’industrie, les testbenchs jouent un rôle très important ; ils sont
intégrés dans les spécifications d’un système
58
Structure d’un fichier VHDL
59
Exemple d’un programme à tester
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity porte is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
x : out STD_LOGIC);
end porte;
architecture Behavioral of porte is
begin
x <= a xor b;
end Behavioral;
60
Fichier testbench
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; signal E1: STD_LOGIC :='0';
signal E2: STD_LOGIC :='0';
entity testbench is signal S: STD_LOGIC ;
end testbench;
begin
architecture Behavioral of testbench is
uut: porte port map (a=>E1,
b=>E2, x=>S);
component porte is
E1<='1' after 100 ns, '0' after 300 ns;
Port ( a : in STD_LOGIC;
E2<='1' after 150 ns, '0' after 350 ns;
b : in STD_LOGIC;
x : out STD_LOGIC);
end Behavioral;
end component;
61
Exercice
Ecrire un programme VHDL pour réaliser le schéma suivant
Vérifier le programme à l’aide de l’outil ISE
A
S1
S2
B
62
TD
CLK
50MHz 1..10Hz 4Bits
Diviseur Compteur Codeur
Modulo 16 BCD/7Segments
Reset
Combinatoire
Séquentiel
entity diviseur is
PORT (
clk : in std_logic;
Div : out std_logic);
CLK Div
50MHz 1..10Hz
end diviseur;
Diviseur
architecture DESCRIPTION of diviseur is
signal CMP: std_logic_vector (24 downto 0);
begin
detection : process
begin
WAIT UNTIL rising_edge (clk);
CMP <= CMP + 1;
if (CMP > "0111111111111111111111111") then
Div <= '1';
else
Div <= '0';
end if;
end process;
end DESCRIPTION;
entity diviseur is
PORT (
clk : in std_logic;
Div : out std_logic);
CLK Div
50MHz 1..10Hz
end diviseur;
Diviseur
architecture DESCRIPTION of diviseur is
signal CMP: std_logic_vector (24 downto 0);
begin
detection : process (clk)
begin
if (clk=‘1’ and clk’event) then
CMP <= CMP + 1;
if (CMP > "0111111111111111111111111") then
Div <= '1';
else
Div <= '0';
end if;
End if;
end process;
end DESCRIPTION;
entity Compteur is
PORT (
Clock 4Bits
Reset, Clock : in std_logic;
Compteur S : out std_logic_vector (3 downto 0));
Modulo 16
end Compteur ;
Reset
architecture DESCRIPTION of Compteur is
signal Compt : std_logic_vector (3 downto 0);
begin
process (Reset , Clock)
begin
if Reset = '0' then
Compt <= "0000";
elsif (Clock ='1' and Clock 'event) then
Compt <= Compt + 1;
end if;
end process;
S <= Compt ;
end DESCRIPTION;
entity decod is
port (
a : in std_logic_vector(3 downto 0);
segment : out std_logic_vector(6 downto 0)
);
end decod;
4Bits
Codeur
BCD/7Segments architecture descrip of decod is
begin
with a select
segment <= "1000000" when x"0",
"1111001" when x"1",
Combinatoire "0100100" when x"2",
"0110000" when x"3",
"0011001" when x"4",
"0010010" when x"5",
"0000010" when x"6",
"0111000" when x"7",
"0000000" when x"8",
"0010000" when x"9",
"0001000" when x"A",
"0000011" when x"B",
"1000110" when x"C",
"0100001" when x"D",
"0000110" when x"E",
"0001110" when x"F",
"1000000" when others ;
End descrip;
TD: Registre à décalage universel
IL I3 I2 I1 I0 IR
S0
S1
REG_DEC
CLOCK
Q3 Q2 Q1 Q0
(1s + 1s + 4p) entrées/4p sorties
1 entrée horloge
2 entrées de sélection qui permettent de choisir le mode :
S0 S1 Fonction réalisée après le top horloge Opération
0 0 Q[3..0] <=Q[3..0] Pas de changement
0 1 Q[3..0] <=I[3..0] Chargement parallèle
1 0 Q[3..1]<=Q[2..0], Q[0]<=IR Décalage à gauche avec IR
1 1 Q[3]<=IL, Q[2..0]<=Q[3..1] Décalage à droite avec IL
68
IL I3 I2 I1 I0 IR
S0
S1
REG_DEC LIBRARY ieee;
CLOCK
USE ieee.std_logic_1164.all;
---------------------------------------
Q3 Q2 Q1 Q0
ENTITY Reg0 IS
PORT (
CLOCK, S0, S1 : IN STD_LOGIC;
IL, IR : in bit;
I : IN bit_VECTOR(3 downto 0);
Q : OUT bit_VECTOR(3 downto 0)
);
END Reg0;
69
ARCHITECTURE decaller OF Reg0 IS
IL I3 I2 I1 I0 IR
signal decal : bit_VECTOR(3 downto 0);
BEGIN
PROCESS (CLOCK)
S0 BEGIN
S1
REG_DEC IF (CLOCK'EVENT AND CLOCK='1') THEN
if(S0='0' and S1='1') then
CLOCK decal<=I;
else if(S0='1' and S1='0') then
Q3 Q2 Q1 Q0
decal<=decal SLL 1;
decal(0) <= IR ;
else if(S0='1' and S1='1') then
decal<=decal SRL 1;
decal(3) <= IL ;
end if;
end if;
end if;
END IF;
END PROCESS;
Q <= decal;
END decaller;
70
LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------
D Q
ENTITY bascule IS
PORT ( d, clk: IN STD_LOGIC;
q: BUFFER STD_LOGIC;
CLOCK Q
qbar: OUT STD_LOGIC
);
END bascule;
---------------------------------------
ARCHITECTURE ok OF bascule IS
BEGIN
PROCESS (clk)
BEGIN
IF (clk'EVENT AND clk='1') THEN
q <= d;
END IF;
END PROCESS;
qbar <= NOT q;
END ok;
71
LIBRARY ieee;
USE ieee.std_logic_1164.all;
Q0 Q1 Q2 Q3 ---------------------------------------
S1 1 ENTITY multiplexeur IS
PORT ( S : IN integer range 0 to 3;
S0 0
D Q : IN STD_LOGIC_VECTOR(3 downto 0);
D : OUT STD_LOGIC
);
END multiplexeur;
---------------------------------------
ARCHITECTURE choix OF multiplexeur IS
BEGIN
with S select
D<= Q(0) when 0,
Q(1) when 1,
Q(2) when 2,
Q(3) when 3;
END choix;
---------------------------------------
72
IL Q2 I3 Q3 Q3 Q1 I2 Q2 Q2 Q0 I1 Q1 Q1 IR I0 Q0
S1 S1 S1 S1
U1 U2 U3 U4
S0 S0 S0 S0
U5 U6 U7 U8
D Q D Q D Q D Q
Q Q Q Q
CLOCK
Q3 Q2 Q1 Q0
73
(Sortie série avec Choix du sens)
entity DECAL_DG is
port (CLK, SENS : in std_logic;
IN_OUT,OUT_IN : inout std_logic);
end DECAL_DG;
architecture ARCH_DECAL_DG of DECAL_DG is
signal Q : std_logic_vector(3 downto 0);
begin
process(CLK)
begin
if (CLK'event and CLK='1') then
if SENS = '1' then
Q <= Q(2 downto 0) & IN_OUT;
else Q <= OUT_IN & Q(3 downto 1);
end if;
end if;
end process;
OUT_IN <= Q(3) when SENS = '1' else 'Z';
IN_OUT <= Q(0) when SENS = '0' else 'Z';
74 end ARCH_DECAL_DG;