0% ont trouvé ce document utile (0 vote)
3 vues11 pages

Atelier VHDL : Conception de Circuits Logiques

Cet atelier pratique en VHDL vise à enseigner la conception de circuits logiques à l'aide du langage VHDL, en abordant ses fondamentaux, les bibliothèques, les entités, les architectures, et les types d'objets. Il décrit également le flux logiciel de conversion d'une description de circuit en un format binaire pour FPGA, en détaillant les étapes de synthèse, cartographie, rassemblement, placement et routage. Enfin, des exercices pratiques sont proposés pour appliquer les concepts appris.

Transféré par

Mohamed Azallal
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues11 pages

Atelier VHDL : Conception de Circuits Logiques

Cet atelier pratique en VHDL vise à enseigner la conception de circuits logiques à l'aide du langage VHDL, en abordant ses fondamentaux, les bibliothèques, les entités, les architectures, et les types d'objets. Il décrit également le flux logiciel de conversion d'une description de circuit en un format binaire pour FPGA, en détaillant les étapes de synthèse, cartographie, rassemblement, placement et routage. Enfin, des exercices pratiques sont proposés pour appliquer les concepts appris.

Transféré par

Mohamed Azallal
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Atelier Pratique en VHDL

Objectif:
l’objectif de cet atelier est de comprendre le VHDL en tant que langage de description
matérielle pour la conception de circuits logiques.

I. Fondamentaux VHDL:

VHDl est un langage de description matérielle qui est utilisé pour la spécification (description
du fonctionnement), la simulation et la preuve formelle d'équivalence de circuits. Ensuite, il a
aussi été utilisé pour la synthèse automatique.
● L'abréviation VHDL signifie VHSIC (Very High Speed Integrated Circuit) Hardware
Description Language (langage de description matérielle pour circuits à très haute
vitesse d'intégration).
● L'unité de conception est constituée d'une entité (définit l'interface), une ou
plusieurs architectures (défini le fonctionnement) et des bibliothèques.

A. Bibliothèques:
Les bibliothèques en VHDL sont des collections de modules et de packages prédéfinis. Elles
fournissent des fonctions et des types de données standard.

Syntaxe:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

B. Entity
Une entité représente l'interface externe d'un composant. Elle définit toutes les entrées et
sorties. Les entrées et les sorties d'un module sont toujours représentées par un port, il en
existe 3 différents types qui sont les plus utilisés :
● In : port d'entrée.
● Out : port de sortie.
● Inout : port bidirectionnel (utilisation pour des bus).
Syntaxe
entity AND_gate is
port (
A, B : in std_logic;
Z : out std_logic
);
end AND_gate;
C. Architecture
L'architecture décrit le comportement interne de l'entité. Le langage VHDL permet de décrire
le comportement de différentes façons.
Nous distinguerons différentes possibilités de descriptions synthétisables, soit :
● Logique : Équations logiques, description du fonctionnement directement
avec des équations logiques.
● Table de vérité : Description du fonctionnement avec une table de vérité
(utilisation de l'instruction with ... select).
● Flot de données : Description du fonctionnement très proche du
fonctionnement logique (utilisation des instructions concurrentes <=, when ...
else ou with ... select).
Syntaxe
architecture Behavioral of AND_gate is
begin
Z <= A and B;
end Behavioral;
D. Commentaire
Les commentaires débutent par deux signes moins et se terminent avec la ligne. Voici un
exemple de commentaire:
-- Ceci est un commentaire sur deux lignes
-- 2eme ligne de commentaire

Dans le langage VHDL, les instructions sont terminées par un point virgule. Voici quelques
exemples :
--Affectation simple
Y <= (not C and B) or (A and C and not D);
--Affectation conditionnelle
A_Eq_B <= '1' when Val_A = Val_B else '0';
question:
Réaliser le programme vhdl de ce module:
Correction:
Library IEEE;
Use IEEE.Std_logic_1164.all;
entity MUX8to1 is
Port (Sel : in Std_Logic_Vector (2 downto 0);
A,B,C,D,E,F,G,H : in Std_Logic;
Y : out Std_Logic);
end MUX8to1
architecture Flot_Don of Mux8_1 is
begin
with Sel select
Y <= A when "000",
B when "001",
C when "010",
D when "011",
E when "100",
F when "101",
G when "110",
H when "111",
end Flot_Don;

II. Portes Logiques

Description des portes logiques de base en VHDL.


Exemple de porte logique OR
entity OR gate is
port (
A, B : in std_logic;
Z : out std_logic
);
end OR gate;

architecture Behavioral of OR_gate is


begin
Z <= A or B;
end Behavioral;
Exemple de porte logique AND
entity AND gate is
port (
A, B : in std_logic;
Z : out std_logic
);
end AND gate;
architecture Behavioral of AND_gate is
begin
Z <= A and B;
end Behavioral;
III. Les types d’objets:
Les types composés sont constitués d'éléments scalaires tout de même type dans le cas de
tableaux (array), Le type de tableau que nous utiliserons le plus souvent est le
Std_Logic_Vector. Celui-ci est un ensemble de Std_Logic :

A. Variables:

Les variables sont utilisées pour stocker des valeurs temporaires dans un processus. Elles
peuvent être modifiées à n'importe quel moment dans le processus.

Exemple de Code:
variable temp_var : integer := 0;

B. Signaux

Signaux sont utilisés pour représenter les connexions entre les différents composants dans
une [Link] ont une portée plus large que les variables et sont utilisés pour transférer
des données entre entités. “Les signaux sont utilisés pour stocker des valeurs temporaires.”

Exemple de Code:

signal data_bus : std_logic_vector(7 downto 0);

signal data_input : std_logic;

signal data_output : std_logic;

C. Constantes

Les constantes sont utilisées pour définir des valeurs constantes qui ne changent pas
pendant l'exécution.

Exemple de Code:

constant CLOCK_PERIOD : time := 10 ns;


D. la différence entre Signaux vs. Variables

● Les variables ne peuvent être utilisées qu'à l'intérieur des processus, les signaux
peuvent être utilisés à l'intérieur ou à l'extérieur des processus.
● Toute variable créée dans un processus ne peut pas être utilisée dans un autre
processus.
● Les signaux peuvent être utilisés dans plusieurs processus, mais ils ne peuvent être
assignés que dans un seul processus.
● Les variables doivent être définies après le mot-clé process mais avant le mot-clé
begin.
● Les signaux sont définis dans l'architecture avant l'instruction begin.
● Les variables sont affectées à l'aide du symbole d'affectation :=.
● Les signaux sont affectés à l'aide du symbole d'affectation.
● Les variables qui sont assignées immédiatement prennent la valeur de l'assignation.
Les signaux dépendent du fait qu'il s'agisse d'un code combinatoire ou séquentiel
pour savoir quand le signal prend la valeur de l'affectation.
Exemple de code:
-- Déclaration de la bibliothèque et de la configuration
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

-- Déclaration de l'entité (XOR gate)


entity XOR_GATE is
Port ( A, B : in STD_LOGIC;
Y : out STD_LOGIC);
end XOR_GATE;

-- Définition de l'architecture (comportemental)


architecture Behavioral of XOR_GATE is
-- Déclaration de la variable pour effectuer le XOR
variable xor_result : STD_LOGIC;
begin
-- Processus décrivant le comportement de la porte XOR
process (A, B)
begin
-- Opération logique XOR à l'aide de la variable
xor_result := A XOR B;

-- Affectation de la variable à la sortie (signal)


Y <= xor_result;
end process;
end Behavioral;

III. Codage sur un Bit et sur Plusieurs Bits


Illustration de la manipulation de signaux sur un seul bit et plusieurs bits.

Exemple
signal input_bit : std_logic;
signal output_bit : std_logic;

signal input_vector : std_logic_vector(3 downto 0);


signal output_vector : std_logic_vector(3 downto 0);

Exemple d'utilisation
output_bit <= input_bit and '1';
output_vector <= input_vector or "1100";
IV. Flux Logiciel
Le flux logiciel prend une description de conception d’une application dans un langage de
description matérielle (HDL) et le convertit en un flux binaire qui est finalement programmé
sur le FPGA.
Le processus de conversion d'une description de circuit en un format qui peut être chargé
dans un FPGA peut-être divisé en cinq étapes : la synthèse, la cartographie de la
technologie, le rassemblement des blocs, le placement et le routage.
La sortie finale des outils de CAO du FPGA est un flux binaire « Bitstream » qui configure
l'état des bits de mémoire dans un FPGA. L'état de ces bits détermine la fonction logique
que le FPGA implémente.

A. Synthèse
Transformation de la description du circuit en logique synthétisable. Il existe deux types de
synthèse (logique et physique), la différence entre ces deux c’est que la synthèse logique en
VHDL se concentre sur la traduction du code VHDL en une netlist logique, tandis que la
synthèse physique se charge de prendre cette netlist logique et de la traduire en une
implémentation physique adaptée au dispositif de destination. Ces deux étapes sont
essentielles pour transformer un design VHDL abstrait en une réalisation matérielle
effective.
Le niveau RTL représente le design à un niveau d'abstraction où les opérations sont
spécifiées en termes de transferts de données entre des registres. Cela inclut la
spécification des opérations logiques, arithmétiques et de transfert de données dans
le design. Le RTL est généralement la première étape de la conception matérielle,
où le concepteur spécifie la fonctionnalité du circuit sans se préoccuper des détails
de la structure matérielle sous-jacente. C'est une abstraction élevée qui décrit le
comportement fonctionnel du circuit.

B. Cartographie de la Technologie
Cette étape consiste à mapper les éléments logiques de la netlist sur les éléments
spécifiques du FPGA (Attribution des éléments logiques à des emplacements spécifiques
sur la technologie FPGA) en utilisant la bibliothèque de la technologie cible.
Elle prend en compte les caractéristiques spécifiques du FPGA, telles que les LUTs
(Look-Up Tables), les flip-flops, etc..

C. Rassemblement des Blocs

Les éléments logiques dans un FPGA sont généralement disposés dans deux niveaux de
hiérarchie. Le premier niveau se compose de blocs logiques (LB) qui sont des paires
k-LUT et des paires flip-flop. La hiérarchie du deuxième niveau regroupe k-éléments LB
ensemble pour former des clusters de blocs logiques, pour optimiser l'utilisation des
ressources du FPGA. Cela facilite également la gestion des contraintes de synchronisation
et de routage.
D. Placement et Routage

À cette étape, les clusters de logique sont placés sur les emplacements physiques du FPGA
aussi les connexions sont créées.
● Les algorithmes de placement déterminent quel bloc logique dans un FPGA doit
implémenter le bloc logique correspondant requis par le circuit.
● L'optimisation consiste à placer les blocs logiques connectés étroitement
ensemble pour minimiser le câblage (les ressources utilisés) et parfois pour
placer des blocs pour équilibrer la densité du câblage sur le FPGA ou pour
maximiser la vitesse du circuit *.

Le routage consiste à établir les connexions physiques entre les différents éléments du
circuit placés sur le FPGA. Il vise à minimiser la longueur des pistes, réduire les retards de
signal et respecter les contraintes de synchronisation. Pour cela, le routeur a besoin des
informations d'interconnexion de l'architecture du FPGA ciblé. Cela signifie que le problème
du routage dépend de l'architecture. Par conséquent, le nombre de routeurs nécessaires
pour acheminer les FPGA varie selon les architectures des technologies FPGA.
E. BitstreamRTL, Post Mapping, Post Fitting
Une fois qu'une Netlist est placée et routée sur un FPGA, des informations bitstream sont
générées pour la Netlist. Ce train de bits est programmé sur le FPGA en utilisant un
chargeur de bitstream.
Le bitstream d'une Netlist contient des informations sur le bit SRAM d'un FPGA programmé
à 0 ou à 1.
Le générateur de bitstream lit les informations de mappage et de placement technologiques
pour programmer les bits SRAM des tables LUT.
Post-mapping se réfère à la phase du processus de conception après que le design
RTL a été converti en une représentation logique plus bas niveau, généralement
sous forme de portes logiques, bascules, etc. Cette étape est souvent appelée la
"mapping" car elle associe les éléments du design RTL aux éléments logiques
disponibles dans la bibliothèque de l'outil de conception. À ce stade, le design est
encore assez abstrait, mais les éléments spécifiques de la bibliothèque sont utilisés
pour implémenter les fonctions logiques spécifiées au niveau RTL. L'objectif est de
déterminer comment les fonctions décrites au niveau RTL peuvent être réalisées
avec les éléments logiques disponibles.
Post-Fitting se réfère à la phase après que le design a été "fit" (adapté) aux
ressources spécifiques du dispositif de destination, comme un FPGA
(Field-Programmable Gate Array) ou un ASIC (Application-Specific Integrated
Circuit). Pendant cette étape, des optimisations spécifiques au dispositif cible sont
appliquées. À ce stade, le design est adapté aux caractéristiques et aux contraintes
spécifiques du dispositif sur lequel il sera implémenté. Cela inclut généralement des
étapes telles que le placement des éléments logiques, l'acheminement des
connexions, et d'autres optimisations spécifiques au dispositif pour maximiser les
performances et minimiser l'utilisation des ressources.
Le bitstream est le fichier binaire résultant prêt à être chargé sur le FPGA.

En résumé, imaginez que vous écrivez une recette (synthèse logique), organisez les
ingrédients sur votre plan de travail (synthèse physique), associez chaque ingrédient à un
ustensile spécifique (cartographie de la technologie), regroupez certains ingrédients pour
une manipulation plus facile (rassemblement des blocs), placez-les à des endroits
spécifiques sur votre plan de travail (placement), connectez-les avec des chemins (routage),
et enfin, vous obtenez un gâteau prêt à être cuit (génération de bitstream) !
V. Exercices sur Quartus II
Exercice 1:
Dans la description VHDL d’un système qui résoudre le calcule numérique suivant:
S= (a*b)+(c+/d)
Exercice 2:
À partir de ce tableau donner la fonction simplifiée en fonction de A, B, C, D.
Donner la description VHDL de cette fonction.

Exercice 3:
Donner l’équation simplifiée de la fonction F, et réaliser la description VHDL de ce schéma.
Exercice 4:
Donner le code VHDL correspondant à ce circuit:

Exercice 5:
Donner le code VHDL correspondant à ce circuit:

Exercice 6:
Donner le code VHDL correspondant à ce circuit:

Vous aimerez peut-être aussi