Chap 6 RLP
Chap 6 RLP
Élément de module :
RLP (Réseaux Logique Programmable et FPGA)
Plan:
- Introduction
•Les ASICs
1
13/11/2023
Introduction
3
i.bouganssa 13/11/2023
i.bouganssa 13/11/2023
2
13/11/2023
5 Domaines d’applications
i.bouganssa 13/11/2023
I. les PLDs :
6
les PLDs (Programmable Logic Device), les CPLDs (Complex Logic
Programmable Device) sont des circuits, disponibles sur catalogue,
exclusivement numériques.
Les PLDs sont proposés avec deux grandes familles : PAL (Programmable
Array Logic), et GAL (Généric Array Logic).
Les PLDs présentent les avantages suivants : personnalisation et mise en
oeuvre simple, outils de développement peu coûteux (souvent gratuits), pas de
retour chez le fabriquant, en plus ces circuits sont idéaux pour un prototypage
rapide.
Les inconvénients des PLDs peuvent être résumés à : une consommation
globale accrue par les circuits de configuration, les PLDs sont peut-être chers
pour de grandes séries, les primitives du fabricant pouvant être complexes, la
performance globale est dépendante pour beaucoup de l’outil utilisé.
i.bouganssa 13/11/2023
3
13/11/2023
i.bouganssa 13/11/2023
i.bouganssa 13/11/2023
4
13/11/2023
Exemple 1
9 Soit la fonction :
i.bouganssa 13/11/2023
Exemple 1
10 Soit la fonction :
Représentation simplifiée
i.bouganssa 13/11/2023
5
13/11/2023
Fusible intacte
i.bouganssa 13/11/2023
Un fusible
12
i.bouganssa 13/11/2023
6
13/11/2023
Exemple 2
i.bouganssa 13/11/2023
i.bouganssa 13/11/2023
7
13/11/2023
15
i.bouganssa 13/11/2023
Exemple 3
16
Réaliser les fonctions suivantes
i.bouganssa 13/11/2023
8
13/11/2023
17
i.bouganssa 13/11/2023
18
Remarques:
i.bouganssa 13/11/2023
9
13/11/2023
i.bouganssa 13/11/2023
Selon le type des deux matrices on peut distinguer les trois types suivants :
Matrice ET figée et OU programmable => PROM (Programmable Read-Only
Memory)
Matrice ET programmable et OU figée => PAL (Programmable Array Logic)
Matrice ET programmable et OU programmable => FPLA (Field Programmable
Array Logic)
i.bouganssa 13/11/2023
10
13/11/2023
11
13/11/2023
i.bouganssa 13/11/2023
12
13/11/2023
i.bouganssa 13/11/2023
La famille Altéra
26
Le concurrent de Xilinx dans le marché des FPGA est Altera avec un chiffre
d’affaire de $1.29 milliard en 2006. En effet, la société américaine Altera,
créée en 1983, est un fabricant de composants reprogrammables (FPGA, CPLD
et ASIC) et des processeurs embarqués. Pour la gamme haute performances on
trouve les FPGA : Stratix et Stratix GX (2002), Stratix II (2004), Stratix II GX (2005),
Stratix III (2006) et Stratix IV et HardCopy (2008).
Pour les FPGA de grande série on trouve : Cyclone (2002), Cyclone II (2004), Cyclone III
(2007), Cyclone IV et Arria GX (2007), etc.
Enfin, pour les CPLD, on trouve les exemples les plus utilisés : MAX 3000A et
MAX 7000 (1991), MAX II (2007) et MAX V (2010). Altera est aussi à l'origine
des processeurs softcores NIOS et NIOSII ainsi que le bus Avalon.
Le bus Avalon est un bus informatique destiné à l'implémentation sur du
matériel programmable (FPGA). Ses principaux atouts sont la simplicité de son
architecture, une conception prévue pour optimiser l'utilisation des ressources
matérielles et un support multi-maître.
i.bouganssa 13/11/2023
13
13/11/2023
27 La famille Xilinx
Xilinx, Inc. (1984) est une entreprise américaine de semi-conducteurs.
Inventeur du FPGA avec un premier produit en 1985, Xilinx fait partie des plus
grandes entreprises spécialisées dans le développement et la commercialisation de
composants logiques programmables, et des services associés tels que les logiciels de
CAO électroniques et formation.
En effet, Xilinx vend également des spécifications d'architectures, des fonctions très
simples comme des compteurs jusqu'à des systèmes complets comme des
microcontrôleurs.
Xilinx est également à l'origine du processeur softcore MicroBlaze.
Xilinx fabrique une large gamme de FPGA et de CPLD pour diverses applications.
En effet, l'offre commerciale de Xilinx est découpée en plusieurs gammes : (FPGA
hautes performances : gamme Virtex, FPGA pour la fabrication en grande série :
gamme Spartan et CPLD : gammes XC9500 et Coolrunner).
Les plus onéreux sont les FPGA Virtex (Virtex II/pro, Virtex4 et Virtex5).
Les composants Virtex5 sont disponibles, à bon prix, avec plusieurs catégories (LX, LXT, SXT, TXT et
FXT).
i.bouganssa 13/11/2023
i.bouganssa 13/11/2023
14
13/11/2023
i.bouganssa 13/11/2023
15
13/11/2023
i.bouganssa 13/11/2023
i.bouganssa 13/11/2023
16
13/11/2023
i.bouganssa 13/11/2023
34 Initiation au VHDL
VHDL : VHSIC(abréviation de l'anglais Very High Speed Integrated Circuits) Hardware
Description Language.
Développé dans les années 80 aux États-Unis, le langage de description
VHDL est ensuite devenu une norme IEEE numéro 1076 en 1987.
Révisée en 1993 pour supprimer quelques ambiguïtés et améliorer la
portabilité du langage, cette norme est vite devenue un standard en matière
d'outils de description de fonctions logiques. A ce jour, on utilise le langage
VHDL pour :
- concevoir des ASIC,
- programmer des composants programmables du type PLD, CPLD et FPGA,
- concevoir des modèles de simulations numériques ou des bancs de tests.
i.bouganssa 13/11/2023
17
13/11/2023
35 Initiation au VHDL
L'électronicien a toujours utilisé des outils de description pour
représenter des structures logiques ou analogiques.
Le schéma structurel que l'on utilise depuis si longtemps et si souvent
n'est en fait qu'un outil de description graphique.
Aujourd'hui, l'électronique numérique est de plus en plus présente et tend
bien souvent à remplacer les structures analogiques utilisées jusqu'à
présent. Ainsi, l'ampleur des fonctions numériques à réaliser nous
impose l'utilisation d'un autre outil de description.
Il est en effet plus aisé de décrire un compteur ou un additionneur 64 bits
en utilisant l'outil de description VHDL plutôt qu'un schéma.
Le deuxième point fort du VHDL est d'être “un langage de description de
haut niveau”. D'autres types de langage de description, comme
l'ABEL par exemple, ne possèdent pas cette appellation.
En fait, un langage est dit de haut niveau lorsqu'il fait le plus possible
abstraction de l'objet auquel ou pour lequel il est écrit.
i.bouganssa 13/11/2023
36 Initiation au VHDL
Dans le cas du langage VHDL, il n'est jamais fait référence au composant
ou à la structure pour lesquels on l'utilise. Ainsi, il apparaît deux
notions très importantes :
1. portabilité des descriptions VHDL, c'est-à-dire, possibilité de cibler
une description : VHDL dans le composant ou la structure que l'on
souhaite en utilisant l'outil que l'on veut (en supposant, bien sûr,
que la description en question puisse s'intégrer dans le
composant choisi et
que l'outil utilisé possède une entrée VHDL) .
2. conception de haut niveau, c'est-à-dire qui ne suit plus la
démarche descendante : habituelle (du cahier des
charges jusqu'à la réalisation et le calcul des structures
finales) mais qui se “limite” à une description
comportementale directement issue des spécifications
techniques du produit que l'on souhaite obtenir.
i.bouganssa 13/11/2023
18
13/11/2023
37 Initiation au VHDL
i.bouganssa 13/11/2023
38 Initiation au VHDL
1) Déclaration des bibliothèques.
Toute description VHDL utilisée pour la synthèse a besoin de
bibliothèques. L’IEEE (Institut of Electrical and Electronics Engineers)
les a normalisées et plus particulièrement la bibliothèque IEEE1164.
Elles contiennent les définitions des types de signaux électroniques, des
fonctions et sous programmes permettant de réaliser des opérations
arithmétiques et logiques,...
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
Ces deux bibliothèques ont des fonctions de conversions de types et
elles permettent d’associer un entier avec des signaux électroniques.
Elles permettent d’écrire facilement des compteurs, décompteurs,
additionneurs, soustracteurs…
i.bouganssa 13/11/2023
19
13/11/2023
39 Initiation au VHDL
2) Déclaration de l’entité et des entrées / sorties (I/O).
Elle permet de définir le NOM de la description VHDL ainsi que les
entrées et sorties utilisées, l’instruction qui les définit c’est port :
Syntaxe: entity NOM_DE_L_ENTITE is
port ( Description des signaux d’entrées /sorties …);
end NOM_DE_L_ENTITE;
Exemple : entity TEST is
port ( CLOCK : in std_logic;
RESET : in std_logic;
Q : out std_logic_vector(1 downto 0)
);
end TEST;
i.bouganssa 13/11/2023
40 Initiation au VHDL
2) Déclaration de l’entité et des entrées / sorties (I/O).
Le SENS du signal.
- in : pour un signal en entrée.
- out : pour un signal en sortie.
- inout : pour un signal en entrée sortie
- buffer : pour un signal en sortie mais utilisé comme entrée dans la
description.
i.bouganssa 13/11/2023
20
13/11/2023
41 Initiation au VHDL
3) Déclaration de l’architecture correspondante à l’entité : description du
fonctionnement.
L’architecture décrit le fonctionnement souhaité pour un
circuit ou une partie du circuit.
En effet le fonctionnement d’un circuit est généralement
décrit par plusieurs modules VHDL. Il faut comprendre par
module le couple ENTITE/ARCHITECTURE. Dans le cas de
simples PLDs on trouve souvent un seul module.
L’architecture établit à travers les instructions les relations
entre les entrées et les sorties. On peut avoir un
fonctionnement purement combinatoire, séquentiel voire
les deux séquentiel et combinatoire.
architecture ARCH of TEST is
begin
………………………
end ARCH;
i.bouganssa 13/11/2023
Initiation au VHDL
Exemple 1 :
42 -- Opérateurs logiques de base
Library ieee;
Use ieee.std_logic_1164.all;
entity PORTES is
port (A,B :in std_logic;
Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8:out std_logic);
end PORTES;
architecture DESCRIPTION of PORTES is
begin
Y1 <= A and B;
Y2 <= A or B;
Y3 <= A xor B;
Y4 <= not A;
Y5 <= not B;
Y6 <= A nand B;
Y7 <= A nor B;
Y8 <= A xnor B;
i.bouganssa 13/11/2023
end DESCRIPTION;
21
13/11/2023
43 Initiation au VHDL
4) Les instructions de base (mode « concurrent »), logique combinatoire.
Qu’est ce que le mode « concurrent » ? Pour une description VHDL toutes les
instructions sont évaluées et affectent les signaux de sortie en même temps.
L’ordre dans lequel elles sont écrites n’a aucune importance. En effet la
description génère des structures électroniques, c’est la grande différence
entre une description VHDL et un langage informatique classique.
Dans un système à microprocesseur, les instructions sont exécutées les unes à la
suite des autres. Avec VHDL il faut essayer de penser à la structure qui va être
générée par le synthétiseur pour écrire une bonne description, cela n’est pas
toujours évident.
Exemple : Pour le décodeur 1 parmi 4, l’ordre dans lequel seront écrites les
instructions n’a aucune importance.
i.bouganssa 13/11/2023
44 Initiation au VHDL
architecture DESCRIPTION of DECOD1_4 is
begin
D0 <= (not(IN1) and not(IN0)); -- première instruction
D1 <= (not(IN1) and IN0); -- deuxième instruction
D2 <= (IN1 and not(IN0)); -- troisième instruction
D3 <= (IN1 and IN0); -- quatrième instruction
end DESCRIPTION;
---------------------------------------------------------------
architecture DESCRIPTION of DECOD1_4 is
begin
D1 <= (not(IN1) and IN0); -- deuxième instruction
D2 <= (IN1 and not(IN0)); -- troisième instruction
D0 <= (not(IN1) AND not(IN0)); -- première instruction
D3 <= (IN1 AND IN0); -- quatrième instruction
end DESCRIPTION;
i.bouganssa 13/11/2023
22
13/11/2023
45 Initiation au VHDL
Les affectations simple : <= , & , …
l’opérateur le plus utilisé en VHDL. En effet il permet de modifier l’état d’un signal en fonction d’autres
signaux et/ou d’autres opérateurs.
Exemple avec des portes logiques : S1 <= E2 and E1 ;
Les valeurs numériques que l’on peut affecter à un signal sont les suivantes :
- ‘1’ ou ‘H’ pour un niveau haut avec un signal de 1 bit.
- ‘0’ ou ‘L’ pour un niveau bas avec un signal de 1 bit.
- ‘-’ pour un état quelconque, c’est à dire ‘0’ ou ‘1’.
- Pour les signaux composés de plusieurs bits on utilise les guillemets " … " , voir les exemples de bases
numériques utilisées pour les bus peuvent être :
BINAIRE, exemple : BUS <= "1001" ; -- BUS = 9 en décimal
HEXA, exemple : BUS <= X"9" ; -- BUS = 9 en décimal
OCTAL, exemple : BUS <= O"11" ; -- BUS = 9 en décimal
Exemple: Soit A et B de type 3 bits et S1 de type 8 bits et A = "001" et B ="110"
S1 <= A & B & "01" ;
i.bouganssa 13/11/2023
-- S1 prendra la valeur suivante après cette affectation S1 = "001110 01"
46 Initiation au VHDL
Exemples :
S1 <= A sll 2 ; -- S1 = A décalé de 2 bits à gauche.
S2 <= A rol 3 ; -- S2 = A avec une rotation de 3 bits à gauche
-- Si A est de type std_logic_vector(7 downto 0)
S1 <= ‘0’ & A(7 downto 1); -- décalage d’un bit à droite
S1 <= "000" & A(7 downto 3); -- décalage de trois bits à droite
S1 <= A(6 downto 0) & ‘0’; -- décalage d’un bit à gauche
S1 <= A(4 downto 0) & "000"; -- décalage de trois bits à gauche
i.bouganssa 13/11/2023
23
13/11/2023
47 Initiation au VHDL
Les opérateurs arithmétiques:
NB: Pour pouvoir utiliser les opérateurs ci-dessus il faut rajouter les bibliothèques
suivantes au début du fichier VHDL:
Use ieee.numeric_std.all ;
Use ieee.std_logic_arith.all ;
Exemples :
S1 <= A – 3 ; -- S1 = A – 3 On soustrait 3 à la valeur de l’entrée / signal
A
S1 <= S1 + 1 ; -- On incrémente de 1 le signal S1
S1 <= A * B ; -- S1 = A multiplié par B : A et B sont codés sur 4 bits
S2 <= A / B ; -- S2 = A divisé par B : A et B sont codés sur 4 bits
i.bouganssa 13/11/2023
Initiation au VHDL
48
i.bouganssa 13/11/2023
24
13/11/2023
49 Initiation au VHDL
Affectation conditionnelle:
Cette instruction modifie l’état d’un signal suivant le résultat
d’une condition logique entre un ou des signaux, valeurs,
constantes.
SIGNAL <= expression when condition
[else expression when condition]
[else expression];
Exemple N°1 : S1 prend la valeur de E2 quand E1=’1’ sinon S1 prend la valeur ‘0’.
S1 <= E2 when ( E1= ‘1’) else ‘0’;
Exemple N°2 : Structure évoluée d’un multiplexeur 4 vers 1.
S <= E1 when (SEL="00" )
else E2 when (SEL="01" )
else E3 when (SEL="10" )
else E4 ;
i.bouganssa 13/11/2023
Initiation au VHDL
50
Affectation sélective:
Cette instruction permet d’affecter différentes valeurs à un signal, selon
les valeurs prises par un signal dit de sélection.
with SIGNAL_DE_SELECTION select
SIGNAL <= expression when valeur_de_selection,
[expression when valeur_de_selection,]
[expression when others];
Exemple N°1 : Multiplexeur 4 vers 1
with SEL select
S2 <= E1 when "00",
E2 when "01",
E3 when "10",
E4 when others;
i.bouganssa 13/11/2023
25
13/11/2023
Exemple N°2 : Affectation sélective avec les autres cas forcés à ‘0’.
51 Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity TABLE1 is
port (
E1,E2 : in std_logic;
SEL : in std_logic_vector(1 downto 0);
S2 : out std_logic
);
end TABLE1;
architecture DESCRIPTION of TABLE1 is
begin
with SEL select
S2 <= E1 when "00",
E2 when "01",
'0' when others; -- Pour les autres cas de SEL S2 prendra la valeur 0 logique
end DESCRIPTION;
i.bouganssa 13/11/2023
Exemple 3 :
-- Décodeurs 7 segments
entity DEC7SEG is
52 port (DEC :in std_logic_vector(3 downto 0);
SEG:out std_logic_vector(6 downto 0)
);
end DEC7SEG;
architecture DESCRIPTION of DEC7SEG is
begin
SEG <= "1111110" when DEC = 0
else "0110000" when DEC = 1
else "1101101" when DEC = 2
else "1111001" when DEC = 3
else "0110011" when DEC = 4
else "1011011" when DEC = 5
else "1011111" when DEC = 6
else "1110000" when DEC = 7
else "1111111" when DEC = 8
else "1111011" when DEC = 9
else "-------";
end DESCRIPTION;
i.bouganssa 13/11/2023
26
13/11/2023
53
13/11/202
i.bouganssa
3
54 Initiation au VHDL
5) Les instructions du mode séquentiel.
Définition d’un PROCESS.
Un process est une partie de la description d’un circuit dans laquelle les
instructions sont exécutées séquentiellement c’est à dire les unes à la suite
des autres. Il permet d’effectuer des opérations sur les signaux en utilisant
les instructions standard de la programmation structurée comme dans les
systèmes à microprocesseurs.
L’exécution d’un process est déclenchée par un ou des changements d’états
de signaux logiques. Le nom de ces signaux est défini dans la liste de
sensibilité lors de la déclaration du process.
Exemple : [Nom_du_process :] process(Liste_de_sensibilité_nom_des_signaux)
Begin
-- instructions du process
end process [Nom_du_process] ;
i.bouganssa 13/11/2023
27
13/11/2023
Initiation au VHDL
55
Règles de fonctionnement d’un process :
1) L’exécution d’un process a lieu à chaque changement d’état d’un signal de la
liste de sensibilité.
2) Les instructions du process s’exécutent séquentiellement.
3) Les changements d’état des signaux par les instructions du process sont pris en
compte à la fin du process.
L’assignation conditionnelle:
if condition then instructions
[elsif condition then instructions]
[else instructions]
end if ;
Exemple:
if (RESET=’1’) then SORTIE <= ”0000”;
end if ;
i.bouganssa 13/11/2023
56 Initiation au VHDL
L’assignation sélective:
case signal_de_slection is
when valeur_de_sélection => instructions
[when others => instructions]
end case;
Exemple:
case SEL is
when “000” => S1 <= E1;
when “001” => S1 <= ‘0’;
when “010” | “011” => S1 <=’1’;
-- La barre | permet de réaliser un ou logique entre les deux valeurs “010” et “011”
when others => S1 <= ‘0’;
end case;
NB: ne pas confondre => (implique) et <= (affecte).
i.bouganssa 13/11/2023
28
13/11/2023
Initiation au VHDL
57
Exemples de process : Déclaration d’une bascule D.
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity BASCULED is
port (
D,CLK : in std_logic;
S : out std_logic
);
end BASCULED;
architecture DESCRIPTION of BASCULED is
begin
PRO_BASCULED : process (CLK)
begin
if (CLK'event and CLK ='1') then
S <= D;
end if;
end process PRO_BASCULED;
end DESCRIPTION;
i.bouganssa 13/11/2023
58
13/11/202
i.bouganssa
3
29
13/11/2023
59
13/11/202
i.bouganssa
3
Initiation au VHDL
60 Commentaires:
- Seul le signal CLK fait partie de la liste de sensibilité. D’après les règles de
fonctionnement énoncées précédemment, seul un changement d’état du
signal CLK va déclencher le process et par conséquent évaluer les
instructions de celui-ci.
- L’instruction if (CLK'event and CLK='1') then permet de détecter un front
montant du signal CLK. La détection de front est réalisée par l’attribut event
appliqué à
l’horloge CLK. Si on veut un déclenchement sur un front descendant, il faut
écrire
l’instruction suivante : if (CLK'event and CLK='0').
- Les bibliothèques IEEE possèdent deux instructions permettant de détecter
les fronts
montants ) rising_edge(CLK) ou descendants falling_edge(CLK).
- Si la condition est remplie alors le signal de sortie S sera affecté avec la
valeur du signal d’entrée D.
i.bouganssa 13/11/2023
30