Vous êtes sur la page 1sur 99

CAO VHDL

Auditoire: 1 ère MPSE, FSM

Elaboré par:
Nidhameddine BELHADJ

Email: Nidhameddine.Belhadj@fsm.rnu.tn
Objectifs du cours:

 Etudier les différentes calculateurs numériques.


 Etudier les FPGA.
 Etudier le langage de description VHDL.
 Faire la synthèse et l‟implémentation sur FPGA

CAO VHDL 2
Plan détaillé:

 Etude des calculateurs numériques


 Architecture des FPGA
 Langage de description VHDL
 Synthèse VHDL
 Implémentation sur FPGA

CAO VHDL 3
Chapitre I: Les calculateurs numériques

CAO VHDL 4
Les question qui se posent
 Quels sont les différents types de calculateurs qui existent sur le
marché?

 Pourquoi faire appel à un calculateur?

 Quel est la différence entre ces calculateurs?

 Quels sont les critères de choix d‟un calculateur?

 Comment les programmer?

CAO VHDL 5
les différents types de calculateurs
1) Microprocesseurs généralistes:
C'est un circuit intégré très complexe qui représente l'unité centrale de traitement
dite C.P.U. Ils sont destinés pour exécuter applications générales (calcul
numérique, traitement des fichiers, CAO etc
Un microprocesseur se caractérise aujourd'hui par:
Le jeu d'instructions qu'il est capable d'exécuter
La complexité de son architecture qui se mesure par le nombre de
transistors présents : plus ce nombre est élevé, plus la complexité des tâches à
traiter peut augmenter.
La vitesse de son horloge qui dicte le rythme de travail.
Le nombre de bits qu'il peut traiter (4 à ses débuts, 128 en 2011).
À sa création, il était capable d'effectuer un peu moins d'un million
d'instructions par seconde. Aujourd'hui, il en traite plus de 10 milliards.
CAO VHDL 6
1) Microprocesseurs généralistes: Les fabricants les plus connus
Intel
Architecture interne d’un µproc AMD (Advanced Micro Devices)
Motorolla (Famille 68000, 88000)
IBM (PowerPC)
SUN (UltraSparc)

Les dernières technologies:


•µp superscalaires
•µp hyperthreading
•µp multicœurs

CAO VHDL
7
2) Les DSP (Digital Signal Processor) :

Ils sont des microprocesseurs optimisés pour exécuter des applications


de traitement numérique du signal (extraction de signaux, filtrage, FFT,
convolution etc.) le plus rapidement possible par optimisation de l‟exécution
des opérations d‟addition et de multiplication.

Ils sont caractérisés par une puissance de calcul importante avec une
consommation d‟énergie faible en comparaison avec les processeurs
généralistes comme intel.

Il existe différents fabricants de DSP sur le marché :


Analog Devices
Freescale.
Texas Instruments

Certains modèles sont utilisés dans certains processus industriels comme


la commande des machines électriques tels que la famille TMS320C24x , les
controlleurs de Freescale 56F8013/56F8011
8
CAO VHDL
2) Les DSP (Digital Signal Processor) :

Platforme Freescale 56f8013 Le DSP multicœur de Texas


Instruments TMS320C6678

9
CAO VHDL
3) Les FPGA (Field Programmable Gate Arrays)

 Un FPGA est un circuit intégré contenant un nombre important de blocs


logiques librement reconfigurables. Chaque bloc peut être configuré pour
réaliser une fonction de base.
 Contrairement aux processeurs, les FPGA sont massivement parallèles.
Chaque tâche de traitement indépendante est affectée à une section
spécifique du circuit, et peut donc s'exécuter en toute autonomie sans
dépendre aucunement des autres blocs logiques
 On peut implémenter des cœurs de processeurs softcore dans un FPGA
(micro/pico Blaze de la famille Xilinx, Nios d‟Altera, MIPS etc) ou construire
des architectures hybrides.
 Ils sont utilisés dans diverses applications nécessitant de l'électronique
numérique (télécommunications, aéronautique, automobile, commande des
machines).
 Ils sont également utilisés pour le prototypage d'ASIC.
10
CAO VHDL
3) Les FPGA (Field Programmable Gate Arrays)

LUT pour implémenter la fonction logique;


Bascule flip flop D pour sauvegarder le
résultat de la LUT
Le MUX est utilisé pour sélectionner la sortie

CAO VHDL
11
4) Les ASIC (Application-specific integrated circuit )

Un ASIC est circuit intégré propre à une application développé pour un


client.
C‟est un circuit intégré (micro-électronique) spécialisé. En général, il
regroupe un grand nombre de fonctionnalités uniques ou sur mesure.
L'intérêt de l'intégration est de réduire les coûts de production et d'augmenter
la fiabilité.
la production d'ASIC est généralement réservée à de gros volumes
(>100 000 pièces par an)

Le prototypage des ASIC se fait sur des FPGA


avant de passer à la fabrication du circuit

CAO VHDL
12
5) Les microcontrôleurs

 Un µC est un circuit intégré qui rassemble les éléments essentiels


d'un ordinateur : processeur, mémoires et interfaces d'entrées-sorties sur
une seule puce.
 Ces sont des circuits intégrés caractérisés par un plus haut degré
d'intégration, une faible consommation électrique et un coût réduit
 Ils sont fréquemment utilisés dans le contrôle et la gestion de certains
processus industriels non complexes

CAO VHDL
13
5) Les microcontrôleurs
La société
MICROCHIP

MC9S08SV16 de Freescale
La société
(Motorola dans le passé) Atmel

Arduino à base
d’un MCU Atmega

CAO VHDL
14
Les question qui se posent
 Quels sont les différents types de calculateurs qui existent sur le
marché?

 Pourquoi faire appel à un calculateur?

 Quel est la différence entre ces calculateurs?

 Quels sont les critères de choix d‟un calculateur?

 Comment les programmer?

CAO VHDL 15
Pourquoi faire appel à un calculateur?

 Certains tâches sont difficiles à exécuter manuellement (faciliter les


tâches
 Assurer un traitement correct et précis
 Optimiser les calculs.
 Accélérer le traitement
 Automatiser le traitement (Commande, régulation, control)

CAO VHDL 16
Domaines d’ utilisation
Tout système numérique
comporte un calculateur

Robotique
Vidéo Vidéo-
conférence surveillance

Télévision
Numérique

mécanique

Smartphone Militaire
Drone

CAO VHDL 17
Système numérique

Système numérique

Partie matérielle: Partie logicielle:


Calculateur numérique Système d‟exploitation
Automate embarqué et programme.
Programme.

CAO VHDL 18
Un système d'exploitation

 Un système d'exploitation (Operating System ou OS)


est un ensemble de programmes spécialisés qui
permet l'utilisation des ressources matérielles d'un
ordinateur.
 Parmi les services d‟un OS, on cite: la gestion de la
mémoire, l'accès aux périphériques (disque dur,
lecteur de CD-Rom, clavier, souris, carte graphique...),
la gestion du réseau, le partage du temps
microprocesseur entre les programmes (multi-tâche),
etc.)
 Le système d'exploitation est un intermédiaire entre les
logiciels d'application et le matériel.

CAO VHDL 19
Les systèmes embarqués

Définition:

C‟est un système électronique et informatique autonome, souvent temps


réel, spécialisé dans une tâche bien précise.

Les systèmes embarqués exécutent des tâches prédéfinies et ont un


cahier des charges bien déterminé, qui peut être d'ordre :

 De coût: le prix de revient doit être le plus faible possible.


 D’encombrement: Il convient de concevoir des systèmes
embarqués de taille réduite qui répondent aux besoins au plus juste
pour éviter un surcoût.
 D'autonomie: la consommation énergétique doit être la plus faible
possible, due à l'utilisation de batteries et/ou, de panneaux
solaires ou de piles pour certains prototypes.

CAO VHDL 20
 De puissance de calcul: Choix de processeur et des composants
doit être bien étudié pour avoir la puissance de calcul juste
nécessaire pour répondre aux besoins et aux contraintes temporelles
de la tâche prédéfinie. Ceci en vue d'éviter un surcoût de l'appareil et
une consommation excédentaire d'énergie (courant électrique).
 Temporel: les temps d'exécution et l'échéance temporelle d‟une
tâche sont déterminés. Certains systèmes ont des propriétés temps
réel:
Un système temps réel est un système dont le temps de traitement
est inférieure ou égale au temps que nécessite le phénomène
physique pour qu‟il soit achevé.
 De sûreté de fonctionnement: Ils doivent donner des résultats
justes, pertinents et ce dans les délais attendus par les utilisateurs
(machines et/ou humains). S'il arrive que certains de ces systèmes
embarqués subissent une défaillance, ils mettent des vies humaines
en danger ou mettent en périls des investissements importants.

CAO VHDL 21
Les systèmes embarqués

Compétences requises:

Des compétences pluridisciplinaires en termes d’électronique,


d’automatique et d’informatique industrielle sont donc nécessaires
pour concevoir de tels systèmes.

CAO VHDL 22
Les systèmes embarqués

Architecture d’un système embarqué:

Un système embarqué s‟exécute en boucle infinie.

CAO VHDL 23
Les systèmes embarqués

Domaines d’application:

CAO VHDL 24
Les question qui se posent
 Quels sont les différents types de calculateurs qui existent sur le
marché?

 Pourquoi faire appel à un calculateur?

 Quel est la différence entre ces calculateurs?

 Quels sont les critères de choix d‟un calculateur?

 Comment les programmer?

CAO VHDL 25
Quel est la différence entre ces calculateurs?

 Certains sont dédiés pour exécuter des applications générales (les


GPP/CPU)
 Certains d‟autres sont spécifiques pour réaliser des tâches bien précises
(ASIC)
 D‟autres sont dédiés pour les traitements massivement parallèles (FPGA)
 Certains sont adéquats pour des applications simples (microcontrôleurs)

CAO VHDL 26
Les question qui se posent
 Quels sont les différents types de calculateurs qui existent sur le
marché?

 Pourquoi faire appel à un calculateur?

 Quel est la différence entre ces calculateurs?

 Quels sont les critères de choix d‟un calculateur?

 Comment les programmer?

CAO VHDL 27
Les compromis

DSP

ASIC FPGA GPP


ASIP
Élevée Cout Faible

Faible Flexibilité Élevée

Élevée Complexité (application) Faible

Faible Consommation d’énergie Élevée

CAO VHDL 28
Les question qui se posent
 Quels sont les différents types de calculateurs qui existent sur le
marché?

 Pourquoi faire appel à un calculateur?

 Quel est la différence entre ces calculateurs?

 Quels sont les critères de choix d‟un calculateur?

 Comment les programmer?

CAO VHDL 29
Comment les programmer?

Trois façons sont possibles pour programmer un calculateur numérique qui

dépendent du circuit cible:

 Description matérielle en utilisant: VHDL, SystemC, VERILOG

 Programmation de bas niveau en utilisant le jeu d‟instructions spécifique

 Programmation de haut niveau (Langage C/C++, JAVA, Python etc) puis

un compilateur va traduire le code en code machine adapté à la plateforme

utilisée

CAO VHDL 30
Evolution des calculateurs Numériques

1971 1976 1985 1986 1990

Invention CPU Invention Invention des CPUs Conception conjointe


du CPU vectoriel du FPGA superscalaires matérielle logicielle

1995 2000 Après 2000 Après 2005

Evolution des systèmes


Invention des
Evolution des DSPs Invention des MPSoC multi-threads
multicore
Hyperthreading

Evolution de ces architectures


Aujourd’hui SIP
Multi FPGA

CAO VHDL 31
Technologies des processeurs
 Un processeur vectoriel est un processeur peut être vus comme des processeur
normal, auquel on a ajouté un certain nombre d'instructions optimisées pour la
gestion des tableaux.
 Un processeur est dit superscalaire s'il est capable d'exécuter plusieurs
instructions simultanément parmi une suite d'instructions. Pour cela, il comporte
plusieurs unités de calcul, et est capable de détecter l'absence de dépendances
entre instructions.
 Un microprocesseur multi-cœur est un processeur possédant plusieurs cœurs
physiques fonctionnant simultanément
 Un cœur physique est le noyau du processeur, comportant le compteur ordinal,
registres, unités de calcul, etc.
 Un processeur est dit multithread s'il est capable d'exécuter efficacement
plusieurs threads simultanément. le multithreading a pour but d'augmenter
l'utilisation d'un seul cœur en tirant profit des propriétés des threads et
du parallélisme au niveau des instructions.

CAO VHDL 32
Fin du Chapitre I

CAO VHDL 33
Chapitre II: Les FPGAs

CAO VHDL 34
Les FPGAs « Field Programmable Gate Array »

-Un FPGA est un Circuit intégré qui contient un très grand


nombre de portes logiques organisées en blocs logiques
interconnectables et configurables

« Comment Programmer un fpga ?? »

= Configurer et interconnecter les blocs logiques

CAO VHDL 35
Architecture des FPGAs

Un FPGA est composé de :

• Blocs d ‟entrées/sorties « IOB » configurables


• Blocs logiques « CLB » configurables
• Lignes d ‟interconnexions « PSM » configurables
• lignes courtes
• lignes longues
• Options : multiplicateurs , sram, etc…

CAO VHDL 36
Description simplifiée d ’un FPGA

Entrée/Sortie (IOB)

Bloc logique (CLB)

Zone
d ‟interconnexions

CAO VHDL 37
Description simplifiée d ’un FPGA

Buffers Gestion d ‟horloge (DCM)

Bloc logique (CLB)

Ram
Entrée/Sortie (IOB)

Multiplieurs

Zone
d ‟interconnexions

CAO VHDL 38
Principe de fonctionnement d ’une cellule logique de base

Bascule Mux
4 entrées LUT D
Q
Ck Positionné lors
SRAM de 16 de la
bits (Look Up CE configuration
Table)
Mémorisation
du résultat

CAO VHDL 39
Look up table (LUT)

0
1
0
4 entrées LUT 1 sortie Sortie
24 bits

SRAM 16*1 bits


1
(Look Up Table)
4 entrées

- Les 4 entrées permettent d ‟adresser 16 cellules


mémoires de 1 bit chacune (24)
- Le contenu de la table permet d ‟obtenir n ‟importe
quelle fonction logique de 4 entrées binaires.

CAO VHDL 40
Programmation des FPGA
• La chaîne de bits de configuration est envoyée en série
dans la mémoire vive interne de configuration par :
• Connexion JTAG (Joint Test Action Group)
• Mémoire externe flash à accès série

Le transfert est
rythmé par une
Horloge

CAO VHDL 41
La simulation fonctionnelle

• Simule le fonctionnement du circuit avant son


implantation

• Utile pour détecter des erreurs de conception

• Ne tient pas compte des contraintes et aléa de


fonctionnement liées au composant ciblé:

• fréquences maximales d ‟horloge


• possibilités de routage
• ressources insuffisantes
• temps de transfert réel dans les circuits logiques
•…etc...

CAO VHDL 42
Synthèse et placement - routage
• La synthèse est la traduction des fichiers du projet en
«blocs logiques élémentaires interconnectés ».

L‟Implémentation du circuit dans le composant cible

• Affecte les pattes d ‟entrées/sorties

• Mode d ‟optimisation (en surface ou en vitesse)

• Génère le fichier de configuration à télécharger dans la


cible

• Produit un rapport avec les ressources utilisées et les


temps de propagation de broche à broche.

CAO VHDL 43
Chargement dans la cible

• Directement par l ‟interface JTAG dans la


mémoire SRAM de configuration

• Indirectement :
• Le fichier est tout d ‟abord stocké dans
une mémoire flash à accès série externe
(ou interne).
• A la mise sous tension du FPGA il y a
recopie de la mémoire flash vers la SRAM
de configuration

CAO VHDL 44
Les familles de circuits programmables les plus connues sont:

Xilinx ( XC4000, XC5200, XC6200, SPARTAN, VIRTEX,


VIRTEX III, VIRTEX 7 )

Altera (intel FPGA actuellement) ( FLEX 8000, FLEX 10K,


FLEX 6000, APEX 20K, Stratix, Stratix III, Stratix 10 )

Grace au progrès technologique, les composants sont de plus


plus rapides et à plus haute intégration, ce qui permet de
programmer des applications compliquées.

CAO VHDL 45
Les fabricants des FPGAs proposent des outils de CAO,
pour configurer leurs circuits, exemple:

Xilinx : ISE - Foundation

Altera : Quartus II ou MAX + II

Avec ces outils on peut réaliser tout le flot de conception allant de


la synthèse à la configuration.

CAO VHDL 46
Flot de Conception

Entrée: schéma ou
code VHDL

Simulation Fonctionnelle

Synthèse

Simulation RTL

Placement

Routage

Simulation temporelle

Configuration et tests
opérationnels

CAO VHDL 47
CAO VHDL 48
Fin du Chapitre II

CAO VHDL 49
Chapitre III: Langage VHDL

CAO VHDL 50
Introduction

VHDL signifie VHSIC Hardware Description Language (VHSIC : Very


High Speed Integrated Circuit).
Ce langage est le fruit du besoin de normalisation des langages de
description de matériel (première norme IEEE 1076-1987 en décembre
1987).
Il est utilisé pour la modélisation et la synthèse de circuit
électronique.

LANGAGE PROCHE:

Verilog concurrent et plus ancien. La syntaxe est proche de celle du


langage C.
VHDL-AMS Langage de modélisation mixte numérique- analogique
IEEE.1076.1-1999. Il est entièrement compatible avec VHDL en terme
de modélisation.

CAO VHDL 51
Introduction

Offre un cycle de conception plus court

Permet de créer des bibliothèques de composants réutilisables

Chacun des composants peut être validé indépendamment par


simulation

Une grande variété d‟ outils sont disponibles

Description portable sur différente plateforme matérielle (carte


FPGA, ASIC…)

CAO VHDL 52
Entité/Architecture
ENTITY/ARCHITECTURE
-- déclaration des ressources externes
Library NOM_DE_LA_BIBLIOTHEQUE ;
Use ELEMENT_DE_LA_BIBLIOTHEQUE ;
-- description de l’entité vue comme une « boite noire » avec des
entrées et des sorties
Entity NOM_DE_L‟ENTITE is
Port (NOM_DES_ENTREES_SORTIES : direction type) ;
End NOM_DE_L‟ENTITE ;
--description de l’architecture à l’intérieure de l’entité
Architecture NOM_DE_L‟ARCHITECTURE of NOM_DE_L‟ENTITE is
Zone de déclaration (type, objet, constant,…)

Begin
Zone de Description

End NOM_DE_L‟ARCHITECTURE ;

CAO VHDL 53
Exercice

Écrire le code VHDL du port ET dont le schéma bloc est


illustré par la figure ci-dessus.

library std;
use std.standard.all;
E1
& S
entity ET is
E2 port (E1,E2 : in bit ; S :out bit) ;
end ET;
architecture Arch_ET of ET is
begin
S<=E1 and E2;
End Arch_ET ;

CAO VHDL 54
Syntaxe

Le VHDL est un langage à instructions concurrentes :


Les instructions sont évaluées en même temps.
L‟ordre dans lequel elles sont écrites n‟a aucune
importance.

Le langage VHDL ne fait pas distinction entre


Minuscules et Majuscules

En langage VHDL les commentaires sont précédés par « -- »


et s‟arrêtent au retour à la ligne.

CAO VHDL 55
Syntaxe

integer : nombre entier pouvant aller de -


2147483648 à 2147483647(32 Bits).
real : nombre réel pouvant aller de -1.0E308 à 1.0E308.
boolean : ce type est utilisé pour les conditions et comprend deux
valeurs true (vrai) ou false (faux).
character : 256 caractères possibles („a‟,‟A‟,…).
bit : deux valeurs possibles 0 ou 1.
bit_vector : un vecteur de bits est un bus déclaré par exemple pour
une largeur de N bits par bit_vector(0 to N) ou bit_vector(N
downto 0).
std_logic : peut prendre 0,1, Z (haut impédance), U (non initialisé), X
(inconnu), W (indéterminé).
std_logic_vector : pour un bus composé de plusieurs bits déclaré
pour une largeur de N bits par std_logic_vector(0 to N) ou bien
std_logic_vector(N downto 0).

CAO VHDL 56
Syntaxe
CONSTANTE
Syntaxe:
constant NOM_DES_OBJETS: type:= {valeur
initiale}; Exemple:

constant PI : real := 3.1416 ;


constant Bits_Addr: integer := 12 ;

SIGNAL
Syntaxe: signal NOM_DES_OBJETS: type := {valeur
initiale} ; Exemple: signal data : bit_vector(7 downto
0):= “00000000” ;
signal compteur : integer:=0 ;
signal S,E1,E2: std_logic:=„0‟;
Affectation: S <= E1 and E2; (exemples avec des portes
logique).
CAO VHDL 57
Affectation simple

Il s‟agit d‟une interconnexion entre deux équipotentielles.


NOM_D‟UNE_GRANDEUR<=VALEUR_OU_NOM_D‟UNE_
GRANDEUR

Exemple:
Signal A : std_logic_vector(7 downto 0); A<= “00011100 ”;

CAO VHDL 58
Syntaxe

VRIABLE

Syntaxe: variable NOM_DES_OBJETS:type:= {valeur initiale} ;

Exemple: variable data : bit_vector(7 downto 0):= “00000000” ;


variable compteur : integer:=0 ;
variable S,E1,E2: std_logic;

Affectation: S:= E1 and E2; (exemples avec des portes logique).

CAO VHDL 59
Syntaxe
DIRCTIONS
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.

Syntaxe: NOM_DES_ENTREES_SORTIES :
direction type;
Exemple: clock : in std_logic;
bus : out std_logic_vector(7 downto 0);

CAO VHDL 60
Les types de données

Identificateur:

Composés de lettres, de chiffres ou d‟_,

Commençant par une lettre ( pas _),

De longueur inférieure à celle de la ligne,

Pas deux _ à la suite, ni à la fin d‟identificateur,

Ne doivent pas être des mots réservés.


Exemple:
Fin0 , Boucle77 , Prog_principal
mauvais identificateurs : 12tr , _date ,fin0_ , acq mes , bus , is

CAO VHDL 61
Syntaxe: Mots réservés
ABS ACCESS AFTER ALIAS ALL AND ARCHITECTURE ARRAY ASSERT

ATTRIBUTE BEGIN BLOCK BODY BUFFER BUS CASE COMPONENT

CONFIGURATION CONSTANT DISCONNECT DOWNTO ELSE ELSIF

END ENTITY EXIT FILE FOR FUNCTION GENERATE GENERIC

GUARDED IF IN INOUT IS LABEL LIBRARY LINKAGE LOOP MAP MOD

NAND NEW NEXT NOR NOT NULL OF ON OPEN OR OTHERS OUT

PACKAGE PORT PROCEDURE PROCESS RANGE RECORD

REGISTER REM REPORT RETURN SELECT SEVERITY SIGNAL

SUBTYPE THEN TO TRANSPORT TYPE UNITS UNTIL USE VARIABLE

WAIT WHEN WHILE WITH XOR

CAO VHDL 62
Descriptions possibles en VHDL

Comportementale : sans référence à des structures ou des équations.

if…then
While
case

Structurelle : c‟est à dire réalisée à partir de composants prédéfinis.

SET
S Q

R Q
CLR

Component

CAO VHDL 63
Descriptions possibles en VHDL

Flot de données : c‟est à dire réalisée à partir d‟équations booléennes.

X<=a and b
Y<=w xor v

Mixte : c'est-à-dire réaliser à partir de composants prédéfinis et d‟équations


booléennes.

Component
SET
S Q

R Q
CLR

X<=a and b

CAO VHDL 64
Description Flot de données

S
A
B
R

Demi Additionneur

A et B: bit d‟entrée
R: retenue à la sortie
S : bit de sortie

Travail demandé:
Ecrire un code VHDL pour ce demi additionneur.

CAO VHDL 65
Description Flot de données

Solution:

library IEEE;
use IEEE.std_logic_1164.all;
entity half_adder is
port (A : in std_logic; B : in std_logic;
S : out std_logic;
R: out std_logic);
end adder;
architecture arch_adder of half_adder is

Begin

S<=A xor B;
R <= A and B;
end arch_adder ;

CAO VHDL 66
Description Structurelle
Exemple de description Structurelle
SYNTAXE:
Entity X Is
……..
End X
Architecture Y of X is
component
NOM_DE_L’ENTITE_DECRIVANT_LE_COMPOSANT

port(NOM_DES_ENTREES_SORTIES : direction type) ;

end component ;
Signal a,b,c:std_logic;
begin
U1 : NOM_DE_L’ENTITE_DECRIVANT_LE_COMPOSANT
port map (ENTREES SORTIES A UTILISER) ;
End Y;
CAO VHDL 67
Description Structurelle

Exemple de description Structurelle


Utilisez une description de type structurelle pour réaliser l’additionneur de 1
bit dont le schéma bloc est illustré par la figure ci-dessous :

X N1 Cout
Demi- Porte
Y additionneur N3 OU
N2
Demi-
Ci additionneur
Sum

Remarque
Respectez dans votre programme l’emplacement de tous les signaux
schématisés dans la figure ci-dessus.

CAO VHDL 68
Description Structurelle
1er composant

library IEEE;
use IEEE.std_logic_1164.all;

entity or_gate is
port (x:in std_logic;y:in std_logic; z:out
std_logic);
end or_gate;

Porte OU architecture arch_or of or_gate is


Begin
z <= x or y;
end arch_or;

CAO VHDL 69
Description Structurelle
2eme composant

library IEEE;
use IEEE.std_logic_1164.all;

entity half_adder is
port (A : in std_logic; B: in std_logic;
Y : out std_logic; Z: out std_logic);
Demi Additionneur end half_adder;

architecture arch_adder of half_adder


is
Begin
Y<=A xor B;
Z <= A and B;
end arch_adder ;
Description Structurelle
Le programma principal
library IEEE;
use IEEE.std_logic_1164.all;
entity adder is
port (x,y,ci:in std_logic; z,c:out std_logic);
end adder;

architecture arch_adder of adder is

component or_gate
port (x:in std_logic;y:in std_logic; z:out std_logic);
end component;

component half_adder
port(A : in std_logic; B: in std_logic; Y : out std_logic; Z: out
std_logic);
end component;

signal n1,n2,n3:std_logic;
begin
u1: half_adder port map(x,y,n1,n2);
u2: half_adder port map(ci,n2,n3,z);
u3: or_gate port map(n1,n3,c);

end arch_adder;

CAO VHDL 71
Description Mixte

Exemple de description Mixte


Utilisez une description de type mixte pour réaliser l’additionneur de 1 bit
dont le schéma bloc est illustré par la figure ci-dessous :

X N1 Cout
Demi- Porte
Y additionneur N3 OU
N2
Demi-
Ci additionneur
Sum

CAO VHDL 72
Description Mixte Additionneur
Le programma principal
library IEEE;
use IEEE.std_logic_1164.all;
entity adder is
port (x,y,ci:in std_logic; z,c:out std_logic);
end adder;

architecture arch_adder of adder is

component or_gate
port (x:in std_logic;y:in std_logic; z:out std_logic);
end component;

component half_adder
port(A : in std_logic; B: in std_logic; Y : out std_logic; Z: out
std_logic);
end component;

signal n1,n2,n3:std_logic;
begin
u1: half_adder port map(x,y,n1,n2);
u2: half_adder port map(ci,n2,n3,z);
C<=n1 or n3;
end arch_adder;

CAO VHDL 73
Exercice: NAND4: Description Structurelle

A N1
A B
B NAND 4
C S S
D C
D N2

Travail à réaliser
Ecrire un code VHDL de la porte AND à deux entrées.
Ecrire un code VHDL de la porte NAND à deux entrées.
Ecrire une description structurelle pour la porte NAND4.

CAO VHDL 74
Description Structurelle
1er composant: AND2 2ème composant: NAND2
library IEEE; library IEEE;
use IEEE.std_logic_1164.all; use IEEE.std_logic_1164.all;

entity and_gate is entity nand_gate is


port (x:in std_logic;y:in std_logic; z:out port (x:in std_logic;y:in std_logic; z:out
std_logic); std_logic);
end and_gate; end nand_gate;

architecture arch_and of and_gate is architecture arch_nand of nand_gate is


Begin Begin
z <= x and y; z <= x nand y;
end arch_and; end arch_nand;
Description Structurelle: NAND4
Le programma principal
library IEEE;
use IEEE.std_logic_1164.all;

entity nand4 is
port (A,B,C,D:in std_logic; s:out std_logic);
end nand4;

architecture arch_nand4 of nand4 is

component and_gate
port (x:in std_logic;y:in std_logic; z:out std_logic);
end component;

component nand_gate
port(x : in std_logic; y: in std_logic; Z: out std_logic);
end component;

signal n1,n2:std_logic;
begin
u1: and_gate port map(a,b,n1);
u2: and_gate port map(c,d,n2);
u3: nand_gate port map(n1,n2,s);

end arch_nand4;

CAO VHDL 76
Description Mixte NAND4

Exemple de description Mixte


Utilisez une description de type mixte pour réaliser la porte NAND4 dont le
schéma bloc est illustré par la figure ci-dessous :

A N1
A B
B NAND 4
C S S
D C
D N2

CAO VHDL 77
Description Mixte NAND4
Le programma principal
library IEEE;
use IEEE.std_logic_1164.all;

entity nand4 is
port (A,B,C,D:in std_logic; s:out std_logic);
end nand4;

architecture arch_nand4 of nand4 is

component and_gate
port (x:in std_logic;y:in std_logic; z:out std_logic);
end component;

component nand_gate
port(x : in std_logic; y: in std_logic; Z: out std_logic);
end component;

signal n1,n2:std_logic;
begin
u1: and_gate port map(a,b,n1);
u2: and_gate port map(c,d,n2);
s <= n1 nand n2;
end arch_nand4;

CAO VHDL 78
Programme de test: Testbench
Des tests manuels:
C‟est pas pratique Comment
Perte du temps automatiser
Surtout pour des architectures compliquées les tests???

CAO VHDL 79
Testbench de la porte NAND4
Modèle de test NAND4 NAND4
library IEEE; library IEEE;
use IEEE.std_logic_1164.all; use IEEE.std_logic_1164.all;
entity test_nand4 is entity nand4 is
--entité sans port port (A,B,C,D:in std_logic; s:out std_logic);
end test_nand4; end nand4;
architecture arch_test_nand4 of test_nand4 architecture arch_nand4 of nand4 is
is component and_gate
--déclaration du composant à tester port (x:in std_logic;y:in std_logic; z:out
component nand4 std_logic);
port(A,B,C,D:in std_logic; s:out std_logic); end component;
end component; component nand_gate
signal A,B,C,D,S:std_logic; port(x : in std_logic; y : in std_logic;
begin Z: out std_logic);
u1:nand4 port map(A,B,C,D,S); end component;
--les signaux de test et leurs périodes signal n1,n2:std_logic;
A <= '1'; begin
B <= '1', '0' after 4ns; u1: and_gate port map(a,b,n1);
C <= '1', '0' after 8ns; u2: and_gate port map(c,d,n2);
D <= '1', '0' after 8ns, '1' after 12ns; u3: nand_gate port map(n1,n2,s);
end arch_test_nand4; end arch_nand4;
Résultat du Testbench de la porte NAND4

Exercice: Réaliser un testbecnh qui simule tous les scénarios de la porte NAND4

CAO VHDL 81
Description comportementale

La description comportementale comporte deux types


d‟instructions:
 Instructions concurrentes (IC)
 Instructions séquentielles (IS)

En utilisant les instructions concurrentes l‟ordre d‟écriture n‟a pas


d‟importance et les opérations sont réalisées simultanément.

CAO VHDL 82
IC: Affectation Conditionnelle

L‟interconnexion est soumise à des conditions:


Syntaxe:
NOM_D‟UNE_GRANDEUR<= Q1 when CONDITION1 else
Q2 when CONDITION2 else
…..
Exemple: Porte logique AND2
library IEEE;
use IEEE.std_logic_1164.all;
Entity AND2_RTL is
Port (A,B : in std_logic ;
S : out std_logic) ;
End AND2_RTL ;
Architecture ARCH_ET of AND2_RTL is
Begin
S <= „1‟ when (A=„1‟ and B=„1‟) else „0‟;
End ARCH_ET ;

CAO VHDL 83
IC: Affectation Sélective
Suivant la valeur d‟une expression, l‟interconnexion sera effectuée:
Syntaxe:
With EXPRESSION select
NOM_D‟UNE_GRANDEUR<= Q1 when valeur1 , Q2 when
valeur2 ,
Qn when others ;
Exemple: Porte logique AND2
library IEEE;
Entity AND2_RTL is
Port (A,B : in std_logic ;
S : out std_logic) ;
End AND2_RTL ;
Architecture ARCH_ET of AND2_RTL is
Begin
With (A= „1‟ and B= „1‟) select
S<= „1‟ when true,
„0‟ when others;
End ARCH_ET ;
CAO VHDL 84
Exemple de description Comportementale : IC
Utilisez une description de type comportementale IC pour réaliser
l’additionneur de 1 bit dont le schéma bloc est illustré par la figure ci-dessous :

Ci Sum
Demi-
X
N1 additionneur N3
Demi- Porte
Y additionneur OU Cout
N2

CAO VHDL 85
library IEEE;
use IEEE.std_logic_1164.all;
entity Adder is
port (x,y,ci : in std_logic;sum,cout : out
std_logic);
end Adder;
architecture Arch_Adder of Adder is
begin
sum<='0' when (x='0' and y='0' and ci='0') else cout<= '0' when (x='0' and y='0' and ci='0') else
'1' when (x='0' and y='0' and ci='1') else '0' when (x='0' and y='0' and ci='1') else
'1' when (x='0' and y='1' and ci='0') else '0' when (x='0' and y='1' and ci='0') else
'0' when (x='0' and y='1' and ci='1') else '1' when (x='0' and y='1' and ci='1') else
'1' when (x='1' and y='0' and ci='0') else '0' when (x='1' and y='0' and ci='0') else
'0' when (x='1' and y='0' and ci='1') else '1' when (x='1' and y='0' and ci='1') else
'0' when (x='1' and y='1' and ci='0') else '1' when (x='1' and y='1' and ci='0') else
'1'; '1';
end Arch_Adder;

CAO VHDL 86
IC: Boucle for

Une boucle est répétée plusieurs fois en fonction d‟un indice.


Syntaxe:
Label: for i in MIN to MAX loop
INSTRUCTIONS;
end loop label;
La suite d‟instruction peut comprendre des grandeurs
indexées par i qui seront écrite par exemple D(i) et Q(i).

Il s‟agit d‟une interconnexion entre deux équipotentielles.


NOM_D‟UNE_GRANDEUR<=VALEUR_OU_NOM_D‟UNE_
GRANDEUR

Exemple:
Signal A : std_logic_vector(7 downto 0); A<= “00011100 ”;

CAO VHDL 87
IC: Boucle for generate

Une boucle est répétée plusieurs fois en fonction d‟un indice.


Cette boucle est utilisée généralement pour répéter l‟utilisation
d‟un composant
Syntaxe:
Label: for i in MIN to MAX generate
INSTRUCTIONS;
end generate label ;

CAO VHDL 88
Les Instructions Séquentielles

Les instructions séquentielles sont utilisées uniquement à


l‟intérieur d‟un process et sont examinées dans l‟ordre d‟écriture.

CAO VHDL 89
Exercice:
1) Donner la description de cet additionneur 8 bits en VHDL.
2) Donner son testbench.
A7 Cout
B7 ADD7
S7

R6

A2 R2
B2 ADD2
S2

A1 R1
B1 ADD1
S1
A0 R0
B0 ADD0
S0

CAO VHDL 90
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.

Syntaxe:
LABEL : process(LISTE_DE_SENSIBILITE)
-- Déclaration des variables.
variable NOM_DES_OBJET : type ;
begin
INSTRUCTIONS_SEQUENTIELLES ;
end process ;

CAO VHDL 91
L‟instruction « if….then…..elsif…..else…..end if »

Syntaxe:

if Condition_1 then
Instruction_1;
elsif Condition_2 then
Instruction_2;
elsif Condition_3 then
Instruction_3;

else
Instruction_n;
end if;

CAO VHDL 92
Exemple : porte ET à deux entrées
library IEEE;
use IEEE.std_logic_1164.all;
Entity AND2_RTL is
Port (A,B : in std_logic ;
S : out std_logic) ;
End AND2_RTL ;
Architecture ARCH_ET of AND2_RTL is
Begin
Process(A,B)
Begin
if (A=„1‟ and B=„1‟) then
S<= „1‟;
else
S<= „0‟;
end if;
end process;
end ARCH_ET ;
CAO VHDL 93
L‟instruction « case..when..end case »
Syntaxe:
case EXPRESSION is
when ETAT_1=>INSTRUCTION_1;
when ETAT_2=>INSTRUCTION_2;

when others=>INSTRUCTION_n;
end case;

CAO VHDL 94
Porte Et , utilisant L‟instruction « case..when..end case »:

library IEEE;
use IEEE.std_logic_1164.all;
Entity AND2_RTL is Port
(A,B : in std_logic ;
S : out std_logic) ;
End AND2_RTL ; Architecture
ARCH_ET of AND2_RTL is
Begin
Process(A,B)
Begin
case (A= „1‟ and B= „1‟) is
when true => s<= „1‟;
when others=> s<= „0‟;
end case;
End process;
End ARCH_ET ;

CAO VHDL 95
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') then.

Cette description est synchrone car elle dépend seulement du


signal CLK qui est mentionnés dans la liste de sensibilité du
process. Seulement un changement d‟état du signal CLK va
déclencher le process et par conséquent évaluer les instructions de
celui-ci.

CAO VHDL 96
Exemple : porte ET à deux entrées (avec horloge)
library IEEE;
use IEEE.std_logic_1164.all;
Entity AND2_RTL is
Port (A,B,CLK : in std_logic ; S : out std_logic) ;
End AND2_RTL ;
Architecture ARCH_ET of AND2_RTL is
Begin
Process(CLK)
Begin
If (CLK'event and CLK ='1') then
If (A=„1‟ and B=„1‟) then
S<= „1‟;
Else
S<= „0‟;
End if; End if;
End process; End ARCH_ET ;

CAO VHDL 97
Exercice :
Porte Et , utilisant L‟instruction « case..when..end case »
avec horloge :
use IEEE.std_logic_1164.all;
Entity AND2_RTL is
Port (A,B,CLK : in std_logic ; S : out std_logic) ;
End AND2_RTL ;
Architecture ARCH_ET of AND2_RTL is
Begin
Process(CLK)
Begin
If (CLK'event and CLK ='1') then
case (A= „1‟ and B= „1‟) is when true =>
s<= „1‟;
when others=> s<= „0‟;
end case;
End if;
End process;
End ARCH_ET ;
CAO VHDL 98
Exercice :
Ecrire un code VHDL pour une Bascule D en utilisant les
instructions concurrentes.
library IEEE;
use IEEE.std_logic_1164.all;
entity BAS_D is
port(D,CLK : in STD_LOGIC;
Q : out STD_LOGIC);
end BAS_D;
architecture Latch of BAS_D is
begin
process(CLK)
begin
if (CLK'EVENT and CLK='1') then
Q<=D;
end if;
end process;
end Latch;
CAO VHDL 99