Documente Academic
Documente Profesional
Documente Cultură
Partie 1 – Introduction
Denis Giacona
ENSISA
École Nationale Supérieure d'Ingénieur Sud Alsace
12, rue des frères Lumière
68 093 MULHOUSE CEDEX
FRANCE
Tél. 33 (0)3 89 33 69 00
© D.Giacona
VHDL – Logique programmable 2/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 3/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 4/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 5/57 Partie 1 - Introduction
Médical
Electronique grand public
Militaire/aérospatial
Contrôle industriel
Automobile
Télécommunications
Communications de données (réseaux)
Stockage de données
Téléphones mobiles
Combinés multimédias
Boîtiers décodeurs pour télévision
Microprocesseurs
Processeurs graphiques
© D.Giacona
VHDL – Logique programmable 6/57 Partie 1 - Introduction
Deux réseaux, AND et OR, pour fabriquer des « somme de produits logiques » à l’aide de
points de connexion programmables.
X = A * B + C
Y = A * B + /C Terme A*B fabriqué deux fois
Terme A*B fabriqué une
seule fois
Terme produit
disponible
© D.Giacona
VHDL – Logique programmable 7/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 8/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 9/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 10/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 11/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 12/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 13/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 14/57 Partie 1 - Introduction
Utilisation des ressources non optimale : tout terme non utilisé dans une macrocellule
entraîne une perte de portes logiques
© D.Giacona
VHDL – Logique programmable 15/57 Partie 1 - Introduction
Flip-flops
Réseau AND Réseau OR
Entrées
Clk
© D.Giacona
VHDL – Logique programmable 16/57 Partie 1 - Introduction
Interconnexions entre les cellules logiques dans mémoire de configuration : type SRAM
Il faut une mémoire externe (par ex. PROM) pour la sauvegarde de la configuration (hors
tension)
© D.Giacona
VHDL – Logique programmable 17/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 18/57 Partie 1 - Introduction
RAM
A(3:0) D
Inscription de la table de
Adresse donnée
vérité de la fonction dans la
mémoire
1
LUT
0 D
1
LUT
0
1
LUT
A4
A5
© D.Giacona
VHDL – Logique programmable 19/57 Partie 1 - Introduction
Source : Xilinx
© D.Giacona
VHDL – Logique programmable 20/57 Partie 1 - Introduction
Cellule logique
Matrice de commutation
Source : Xilinx
© D.Giacona
VHDL – Logique programmable 21/57 Partie 1 - Introduction
1.7.2. Le routage
Cellule logique
Commutateur :
Point de connexion
réalisé par un Pass-
transistor ou
uneTransmission gate ou
un Multiplexer
Génère un temps de
propagation
© D.Giacona
VHDL – Logique programmable 22/57 Partie 1 - Introduction
Bouton
Flash PROM
« configuration
restart »
© D.Giacona
VHDL – Logique programmable 23/57 Partie 1 - Introduction
Configuration statique
o Si une seule architecture suffit par application : chargement à la mise sous tension
FPGA Flash
PROM
Configuration semi-dynamique
o Plusieurs configurations possibles, pour des applications différentes
FPGA Flash
PROM1
Flash
PROM2
© D.Giacona
VHDL – Logique programmable 24/57 Partie 1 - Introduction
© D.Giacona
VHDL – Logique programmable 25/57 Partie 1 - Introduction
Les transitions internes sont asynchrones (on ne mentionne ni horloge système ni délais)
Les processus communiquent entre eux et se synchronisent avec les événements d’entrées-
sorties
© D.Giacona
HDL – Logique programmable 26 Partie 1 - Introduction
Le concepteur choisit
le modèle de description le mieux adapté ou simplement celui qu’il préfère
o textuel (HDL : Hardware Description Language)
o diagramme de blocs fonctionnels (schematic, FBD : Function Block Diagram)
o graphe d’état (FSM : Finite State Machine)
le niveau d’abstraction
la méthode de traitement
© D.Giacona
HDL – Logique programmable 27 Partie 1 - Introduction
ISE (Xilinx)
version WebPack, licence gratuite à durée illimitée
synthèse des circuits du fondeur Xilinx (CoolRunner CPLD, Virtex FPGA, Spartan FPGA)
© D.Giacona
HDL – Logique programmable 28 Partie 1 - Introduction
2.2.3. Objectifs
Conception
o Si possible, construction d’entités à partir d’autres entités déjà crées et testées
(composants logiques réutilisables archivés dans des bibliothèques)
o Cœurs (noyaux) de propriété intellectuelle (IP cores)
éléments de circuits (blocs fonctionnels) prêts à l’emploi
fonctions standard (le concepteur ne part plus de zéro ; il développe les parties
spécifiques) conception plus rapide
code écrit en HDL niveau RTL
disponibles dans les outils de développement, ou achetés séparément
exemples : MPEG4 Video Codec, FFT pour DSP, interfaces de bus PCI, interface
de réseau Ethernet, …
o « Cœurs libres » (Open cores)
gratuits (agence spatiale européenne ESA)
exemples : cœurs de processeurs RISC 32 bits, ALU, Multiplication
Tests
o Simulation fonctionnelle (indépendante du circuit cible)
o Simulation temporelle (post routage)
© D.Giacona
HDL – Logique programmable 29 Partie 1 - Introduction
VHDL vs Verilog
o VHDL plus strict que Verilog pour les types
o Texte plus abondant dans VHDL
3.1.2. VHDL-AMS
Extension aux circuits analogiques (VHDL-Analog & Mixed Systems)
© D.Giacona
HDL – Logique programmable 30 Partie 1 - Introduction
#include "systemc.h"
void compute_and()
{ Déclaration d’un processus
x = i0 & i1 & i2;
};
SC_CTOR(and3)
{
SC_METHOD(compute_and);
sensitive(i0);
sensitive(i1);
Déclaration de la liste de
sensitive(i2);
sensibilité du processus
}
};
© D.Giacona
HDL – Logique programmable 31 Partie 1 - Introduction
input i0;
input i1;
input i2;
output x;
endmmodule
© D.Giacona
HDL – Logique programmable 32 Partie 1 - Introduction
i0 : in std_logic;
i1 : in std_logic;
i2 : in std_logic;
x : out std_logic);
end entity ;
begin
end arch_and3
© D.Giacona
HDL – Logique programmable 33 Partie 1 - Introduction
q <= qint;
max <= '1' when qint = 9 else '0';
end cnt4bits;
© D.Giacona
HDL – Logique programmable 34 Partie 1 - Introduction
process (clk)
begin
if clk'event and clk = '1' then
...
Les bornes des variables de boucle sont statiques, fixées à la compilation (donc
indépendantes des valeurs des signaux d’entrée)
for i in 1 to 5 loop
if product_reg(0)='1' then
product_reg(9 downto 5) := product_reg(9 downto 5)
+ num1_reg(4 downto 0);
end if;
product_reg(9 downto 0) := '0' & product_reg(9 downto 1);
end loop;
© D.Giacona
HDL – Logique programmable 35 Partie 1 - Introduction
© D.Giacona
HDL – Logique programmable 36 Partie 1 - Introduction
© D.Giacona
HDL – Logique programmable 37 Partie 1 - Introduction
Les conversions sont prises en charge par la plupart des outils de développement.
FSM FBD
HDL
© D.Giacona
HDL – Logique programmable 38 Partie 1 - Introduction
© D.Giacona
HDL – Logique programmable 39 Partie 1 - Introduction
(carry_out,sum) <= ("00000000" & carry_in) + ('0' & x_in) + ('0' & y_in);
Après optimisation automatique par le compilateur pour un circuit intégré particulier; par exemple le
cy37256p160 (Cypress)
o temps de propagation tPD = 59.0 ns pour co
o taux d’utilisation des ressources 8%
© D.Giacona
HDL – Logique programmable 40 Partie 1 - Introduction
Principe (schéma-bloc) :
a(3..2) b(3..2)
a(7..6) b(7..6) a(5..4) b(5..4) a(1..0) b(1..0) ci
add2wc
c2
c6 c4
add2nc add2nc
© D.Giacona
HDL – Logique programmable 41 Partie 1 - Introduction
e1 <= (a(3) and b(3)) or ((a(3) or b(3)) and (a(2) and b(2)));
r1 <= (a(3) or b(3)) and (a(2) or b(2));
e2 <= (a(5) and b(5)) or ((a(5) or b(5)) and (a(4) and b(4)));
r2 <= (a(5) or b(5)) and (a(4) or b(4));
e3 <= (a(7) and b(7)) or ((a(7) or b(7)) and (a(6) and b(6)));
r3 <= (a(7) or b(7)) and (a(6) or b(6));
co <= e3 or ((e2 or ((e1 or (c2 and r1)) and r2)) and r3);
© D.Giacona
HDL – Logique programmable 42 Partie 1 - Introduction
Principe mathématique (la retenue est calculée en même temps que la somme) :
© D.Giacona
HDL – Logique programmable 43 Partie 1 - Introduction
PROCESS (carry_in,carry_generate,carry_propagate,carry_in_internal)
BEGIN
carry_in_internal(1) <= carry_generate(0) OR (carry_propagate(0) AND carry_in);
inst: FOR i IN 1 TO 6 LOOP
carry_in_internal(i+1) <= carry_generate(i) OR (carry_propagate(i) AND
carry_in_internal(i));
END LOOP;
carry_out <= carry_generate(7) OR (carry_propagate(7) AND
carry_in_internal(7));
END PROCESS;
© D.Giacona
HDL – Logique programmable 44 Partie 1 - Introduction
Traducteur Traducteur
FBD HDL FSM HDL
© D.Giacona
HDL – Logique programmable 45 Partie 1 - Introduction
Simulateur
Fichiers sources HDL « comportemental »
(fonctionnel)
Outil de synthèse
Options de synthèse (Logic synthesizer)
Editeur de
contraintes
Netlist
Outil d'implémentation
Fichier de configuration (Fitting : CPLD
du circuit Place and Route : FPGA)
(User Constraints file)
DESIGN NETLIST
Blocs fonctionnels + matrice de routage (CPLD)
Blocs logiques configurables + routage (FPGA)
© D.Giacona
HDL – Logique programmable 46 Partie 1 - Introduction
Simulateur
DESIGN NETLIST Back annotation « post fit »
(temporel)
Outil de configuration
(Bitgen)
Bitstream
10010101000110010010111010
10110001010001001001001100
Outil de chargement
in situ
(Download/Program)
© D.Giacona
HDL – Logique programmable 47 Partie 1 - Introduction
5.2. Lexique
Synthesis
Transformation d’une description HDL en netlist, c.-à-d. en un fichier accepté par un outil d’implémentation
Netlist
Description standard des portes logiques, des flips-flops, des interconnexions et des noms des entrées-
sorties.
User constraints
Numéros de broche (pin-out), niveaux de tension, slew rate (pente des signaux de sortie), …
© D.Giacona
HDL – Logique programmable 48 Partie 1 - Introduction
Fitting (CPLD)
Implémentation dans un circuit CPLD particulier : sélection des ressources logiques du circuit et des
chemins d’interconnexion en tenant compte des broches d’entrées-sorties choisies par le concepteur
Implémentation dans un circuit FPGA particulier : choix de la meilleure localisation (par ex. le chemin le
plus court) des blocs logiques du circuit (Place) et détermination des interconnexions des blocs (Route)
Behavioral simulation
Simulation fonctionnelle par interprétation directe du code HDL (sans délais de propagation de signaux)
Back-annotation
Procédé post-implémentation permettant de connaître avec exactitude les délais de propagation des
signaux dans le circuit choisi (délais induits par les LUTs, les flip-flops et le routage).
© D.Giacona
HDL – Logique programmable 49 Partie 1 - Introduction
Bitstream
Fichier (par ex. ASCII) contenant des '1' et des '0' pour la configuration du circuit cible
Programming
Chargement de la configuration dans un circuit non volatile avec conservation de l’information à la mise
hors tension du circuit (circuit CPLD reprogrammable, ou mémoire annexe PROM d’un circuit FPGA
SRAM)
Downloading
Chargement de la configuration dans un circuit volatile (directement dans la SRAM d’un circuit FPGA)
© D.Giacona
HDL – Logique programmable 50 Partie 1 - Introduction
5.3. La simulation
© D.Giacona
HDL – Logique programmable 51 Partie 1 - Introduction
Les délais de propagation sont ceux du circuit FPGA Spartan 3A XC3S700A (Xilinx).
© D.Giacona
HDL – Logique programmable 52 Partie 1 - Introduction
5.4. La configuration
Mode d’optimisation
o espace / vitesse
o Pour les FPGA : one-hot => un flip-flop par état => logique état futur réduite => gain
de temps
© D.Giacona
HDL – Logique programmable 53 Partie 1 - Introduction
© D.Giacona
HDL – Logique programmable 54 Partie 1 - Introduction
Instructions de configuration
Permet de configurer la
connexion de la
résistance de
« pulldown » »
© D.Giacona
HDL – Logique programmable 55 Partie 1 - Introduction
Le code compilé d'un programme écrit en langage HDL (tel VHDL ou Verilog) est
destiné à configurer les interconnexions des ressources physiques des circuits
programmables (CPLD, FPGA)
A titre de comparaison :
© D.Giacona
HDL – Logique programmable 56 Partie 1 - Introduction
© D.Giacona
HDL – Logique programmable 57 Partie 1 - Introduction
EPROM
RAM
Décodage
D
d'instruction
Clk
© D.Giacona