Vous êtes sur la page 1sur 71

Apprendre VHDL avec des exemples :

Application au contrle de la carte Spartan 3E

Pr. AMAMI Benaissa


2015/2016

Introduction

Lobjet de ce document est de prsenter les principes de base sur lesquels repose le
dveloppement dun systme laide dune description VHDL. Les lments fondamentaux
du langage VHDL ainsi que les diffrentes mthodes de programmation y sont dcrits et
illustrs par des exemples trs varis allant de la simulation de la porte logique and
lacquisition des donnes par la carte Spartan 3 E. Chaque exemple est dcrit par son schma
logique, sa table de vrit, sa description par la conception flots de donnes, par la
conception comportementale et par la conception structurelle ainsi que sa simulation sur ISE
de Xilinx et la carte Spartan 3 E. Le code VHDL est donn pour chaque exemple fin dd
faciliter lapprentissage.

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

1.

Circuit logique Programmable (PLD)

Un circuit logique programmable, ou rseau logique programmable, est un circuit intgr logique qui peut tre reprogramm aprs sa fabrication.
Il est compos de nombreuses cellules logiques lmentaires et bascules logiques librement connectables. C'est la reconfiguration, ou
programmation, du composant qui dfinit les connexions faites entre portes logiques. On ne parle pas de programmation au sens logiciel
(contrairement un microprocesseur), on parlera de reconfiguration plutt que de reprogrammation (on modifie des connexions ou le
comportement du composant, on connecte des portes logiques entre elles, etc.).

Il s'agit
de rseaux logiques reconfigurables et modifiables. Ce type de composant lectronique est communment dsign par
diffrents appellations en anglais dont notamment :

FPGA (field-programmable gate array, rseau de portes programmables in situ) ;

PLD (programmable logic device, circuit logique programmable) ;

EPLD (erasable programmable logic device, circuit logique programmable et effaable) ;

CPLD (complex programmable logic device, circuit logique programmable complexe) ;

PAL (programmable array logic, rseau logique programmable) ;

PLA (programmable logic array, rseau logique programmable).

Bien que fondamentalement synonymes, ces termes ne sont gnralement pas interchangeables dans le vocabulaire commercial des fabricants :

1.1.

FPGA dsigne plutt des composants technologie RAM,

EPLD des composants technologie FLASH,

PAL des composants technologie FUSIBLE.

Circuits Logiques Programmables: FPGA

Un circuit FPGA est un composant lectronique qui contient des milliers, voire des millions de transistors connects ensemble pour raliser des
fonctions logiques simples telles que des additions ou des soustractions ou des fonctions complexes telles que la mise en uvre dun contrleur
DSP (digital signal processor) ou bien microprocesseur.

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


Ces circuits FPGA sont largement utiliss dans les systmes embarqus notamment dans les domaines de lautomatisme, de lautomobile, de
laronautique et des tlcommunications. Les circuits FPGA prsentent une technologie qui permet de reprogrammer le circuit la carte (in situ).
En effet lavantage majeur que prsentent les circuits FPGA, est leur grande flexibilit, car la structure interne peut tre change sans avoir
modifier la structure globale du circuit.
Cet avantage nous permet de faire des prototypages rapides et de moindre cot en comparaison avec dautres circuits ASIC (Application-Specific
Integrated Circuit) par exemple
Xilinx, Altera et Quicklogic sont les pionniers dans les domaines des circuits FPGA. Toutes ces compagnies se partagent le mme concept
architectural. Il se divise en trois parties :

les blocs logiques de configuration (CLB) ;

les interconnexions.

IOB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

DCM

IOB

IOB

IOB

IOB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

Mulziplier

IOB

Block SelectRAM

CLK

DCM

Mulziplier

les blocs dentres et sorties (IOB) ;

Block SelectRAM

IOB

IOB

CLK

CLB

CLB

IOB

CLB

IOB

CLB
CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

IOB

..
..

..
..

..
..

IOB
Mulziplier

Block SelectRAM

Mulziplier

Block SelectRAM

IOB

IOB

..
..

IOB

CLK

Rseau dinterconnexions

Les blocs logiques, prsents en grand nombre sur la puce (de quelques milliers quelques millions) sont connects entre eux par une matrice de
routage configurable. Ceci permet la reconfiguration volont du composant.
Afin de pouvoir finaliser un FPGA, il est ncessaire d'utiliser un langage de description matriel. Aprs compilation de cette description, on
obtient un fichier de configuration pour le FPGA choisi. VHDL et Verilog sont les deux langages de description les plus rpandus.

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


2.

Langage VHDL

V(Vhsic: Very High Speed Integrated Circuit)H(Hardware)D(Description)L(Language), est un langage de description de systmes matriels. Ce
nest pas un langage de programmation, mais plutt un langage formel pour la spcification des systmes digitaux, aussi bien au niveau
comportemental que structurel. Il permet de faire la description, la simulation et la synthse des systmes digitaux.
2.1.

Historique

En 1981, le Dpartement de la Dfense (DoD) des Etats-Unis d Amrique a initi puis dirig le projet "Very High Speed Integrated Circuit"
(VHSIC). Ce projet avait pour but de formaliser la description des circuits intgrs dvelopps pour le DoD dans un langage commun. Lintrt
premier tait de dfinir, au travers du langage, une spcification complte et non ambigu du circuit dvelopper indpendante de la technologie
employe et des outils de CAO.
Le Dveloppement du langage a t confi par le DoD aux socits IBM, Intermetrics et Texas Instruments. Ce langage est baptis VHDL
(VHSIC Hardware Description Language). En 1987, il fait lobjet dune normalisation par lIEEE (Institute of Electrical and Electronic
Engineers). Le groupe VASG (VHDL Analysis and Standardization Group) est un groupe de travail IEEE responsable du Manuel de rfrence du
langage VHDL. La norme VHDL IEEE 1076 comme toute norme IEEE doit tre rvise et affine au moins une fois tous les 5 ans. Ses rvisions
successives sont P1076-87, P1076-93, P1076-2000, P1076-2002, les derniers digits indiquent lanne de rvision de la norme. a rvision P10762006 est en cours de normalisation. Des groupes de travail distincts du VASG, sont chargs de normaliser des extensions, des restrictions du
langage VHDL pour des besoins spcifiques.
2.2.

Programme VHDL
Pour dvelopper une application en VHDL, il faudra suivre la dmarche ci-dessous :

La cration du code source VHDL peut tre faite au moyen d'un diteur de texte ou d'outils graphiques permettant de dcrire la structure du
systme modliser sous la forme de schmas ou de diagrammes de blocs et son comportement sous la forme de machines dtats, de
chronogrammes ou de tables de vrit.
Lanalyseur (ou compilateur) vrifie la syntaxe dune description VHDL. Il permet la dtection derreurs locales, qui ne concernent que de lunit
compile. Lapproche compile produit directement du code machine, ou, dans certains cas, du code C qui sera lui-mme compil.
Chaque concepteur possde une bibliothque de travail (working library) de nom logique WORK (le nom est standard) dans laquelle sont placs
tous les modles compils. Le lien du nom logique avec lemplacement physique de la bibliothque dpend de loutil de simulation ou de synthse
utilis. Il est aussi possible de faire rfrence, en mode de lecture seule, dautres bibliothques, des bibliothques de ressources, contenant

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


dautres modles ou des utilitaires. Plusieurs bibliothques peuvent tre actives simultanment. Chaque bibliothque contient une collection de
modles mmoriss dans un format intermdiaire. Elle contient galement un certain nombre de relations et dattributs liant, si ncessaire, les
diffrents modles entre eux.
L'laborateur a pour tche de crer un modle excutable partir de modules compils sparment et de dtecter des erreurs globales.
Le simulateur calcule comment le systme modlis se comporte lorsquon lui applique un ensemble de stimuli.
Lenvironnement de test peut galement tre crit en VHDL (voir exemple 1) : il peut tre lui-mme vu comme un systme dfinissant les stimuli
et les oprations appliquer aux signaux de sortie pour les visualiser (sous forme texte ou graphique). Le simulateur permet aussi le dverminage
(debugging) dun modle au moyen de techniques analogues celles proposes pour les programmes crits en Pascal, C ou Ada: simulation pas
pas, visualisation de variables, de signaux, modification interactive de valeurs, etc.
2.3.

Les cibles du langage VHDL

2.4.

Structure dune description VHDL

VHDL nous intresse en tant que langage pour la description, simulation et synthse des systmes digitaux. Au plus haut niveau d'abstraction, un
systme digital est vu comme une "bote noire" ou (structure logique) , dont on connat l'interface avec l'extrieur mais dont on ignore le contenu

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


En VHDL, une boite noire (structure logique) ou la vue externe du composant est dcrite l'aide d'une entit (entity) et dune architecture. Une
entit doit toujours tre associe avec au moins une description de son contenu, de son implmentation: c'est l'architecture

Library ;Toute description VHDL utilise pour la synthse a besoin de bibliothques. LIEEE (Institut of Electrical and Electronics Engineers)
les a normalises et plus particulirement la bibliothque IEEE1164. Elles contiennent les dfinitions des types de signaux lectroniques, des
fonctions et sous programmes permettant de raliser des oprations arithmtiques et logiques,...
Syntaxe de la dclaration de la bibliothque
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
Cette dernire bibliothque est souvent utilise pour lcriture de compteurs
La directive Use permet de slectionner les bibliothques utiliser.
Dans la bibliothque IEEE STD_LOGIC_1164 TYPE les types usuels sont dj dclars. Le type std_logic contient 9 lments de base.

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


'U'
'X'
'0'
'1'
'Z'
'W'
'L'
'H'
'-'

non-initialis (lment de plus haute priorit)


conflit fort
0 fort
1 fort
haute impdance
conflit faible
0 faible
1 faible
Don't care (lment de plus basse priorit)

entity : permet de dclarer une entit (le modle du composant)


port : dfinit les entres/sorties : in et out indiquent le sens suivi du type du port, bit prend la valeur 0 ou 1.
Syntaxe de dclaration de lentit

A et B sont des entres de type std_logic, C est une sortie de type std_logic
VHDL dfinit quatre modes qui dterminent le sens de transfert dune donne au travers du port :

in : Lentit lit un signal dentre fourni par lextrieur (ex : load, reset, clock, donne unidirectionnelles)

out : Lentit fournit un signal de sortie, mais ne peut pas relire ce signal

buffer : Larchitecture de lentit fabrique un signal utilisable en sortie, qui peut aussi tre relu par lentit comme un signal interne (ex
: sorties dun compteur dont ltat doit tre test)

inout : Le signal est bidirectionnel :


en sortie, il est fourni par lentit; en entre, il est fourni par lextrieur. Ce mode autorise aussi le bouclage interne (ex : bus de
donnes)
Par dfaut, le mode dun port est in.
Direction
IN
OUT *
IN
OUT *
INOUT ***
BUFFER ****

Type standard (sans dclaration)


BIT
BIT
BIT_VECTOR (x downto y) **
BIT_VECTOR (x downto y) **
BIT ou BIT_VECTOR ( )
BIT ou BIT_VECTOR ( )

Pr. Benaissa Amami, FST Tanger

Type (resolved) norme IEEE.1164


Std_logic
Std_logic
Std_logic_vector (x downto y )**
Std_logic_vector (x downto y )**
Std_logic ou std_logic_vector( )
Std_logic ou std_logic_vector( )

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


Architecture ; Le Corps de l'architecture est la vue interne du systme. Plusieurs vues sont possibles pour la mme conception, dont les
principaux styles sont:

Flots de donnes (Data flow) : larchitecture est dclare sous forme dquations logiques

Comportemental : larchitecture est dclare sous forme dalgorithmes

Structurel: larchitecture est dclare sous forme structure, c'est--dire sous forme de composants (component) interconnects avec des
signaux interne. un assemblage de sous-blocs, similaire la liste d'interconnexions d'un schma logique (netlist)
Syntaxe de dclaration de larchitecture sous forme flot de donnes

Signal, dclare un signal permettant la communication entre les tats concurrents l'intrieur d'une architecture. Dans la dfinition, on doit
spcifier un type au signal et l'on peut attribuer une valeur par dfaut.
Syntaxe de dclaration dun signal lintrieur dune architecture

Exemple 1 : Modlisation du circuit logique : porte and

Circuit : porte logique and

Equation logique : C = A and B

Table de vrit de la porte logique and

Description en VHDL de la porte logique and avec la conception Flots de donnes et sa simulation

Etape 1 : Ouvrir le navigateur Xilinx ISE Design Suite 13.1 et crer un nouveau projet nomm And_g

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Etape 2 : Sectionner votre matriel et ses caractristiques

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


Etape 3 : Ajouter une nouvelle source en slectionnant module VHDL

10

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


Etape 4 : Vous pouvez dclarer les entres et sorties de votre circuit ce niveau ou le faire dans la dclaration de lentit dans ltape 5.

Etape 5 : Crer le code qui doit dcrire le comportement de votre circuit numrique
dans la zone de lditeur de texte de sur Xilinx ISE Design Suite 13.1

11

Pr. Benaissa Amami, FST Tanger

(bibliothque, entit et architecture)

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

-- Modlisation de la porte and


--Dclaration des bibliothques
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--Declaration de lentit and_g
entity and_g is
port (A, B : std_logic; C : out std_logic);
end and_g ;
--Declaration de larchitecture de lentit and_g
architecture arch_and_g of and_g is
begin
C <= A and B;
end arch_and_g ;

Etape 6 : Compiler votre code. Les trois tapes suivant doit tre valides

Remarque :
Il est fortement conseill de vrifier la syntaxe de la description, en faisant appel la fonction "Check Syntax" dans la partie "Synthetize XST".
Cette tape est assez rapide et ne ncessite pas de connatre la cible, contrairement ltape daprs. Viens ensuite la phase de synthse
("Synthetize XST") puis de placement et de routage ("Implement Design"). Ces tapes ncessitent la connaissance, dune part, de la cible (FPGA)
et, dautre part, de lenvironnement du circuit (entres/sorties associes aux autres composants de la maquette). Il est donc ncessaire, avant de
raliser ces tapes-l, de faire lassignation des broches du composant avec la description fournie. Pour cela, vous pouvez vous aider de la
fonction "Assign Package Pins" dans la partie "User Constraints" et de la documentation de la maquette. Il est aussi possible ce stade de lancer
diffrentes simulation :s

Post-synthse : permettant, aprs synthse, de vrifier nouveau le fonctionnement du systme

Fonctionnelle : permettant de savoir si le fonctionnement du systme est celui dcrit

Temporelle : permettant, aprs ltape de routage, de valider les contraintes temporelles associes au placement des "composants".
Ces diffrentes phases doivent tre rptes pour lensemble des modules composant lapplication. La dernire tape consiste
produire le fichier de programmation ("Generate Programming File") et le transfrer dans la mmoire du FPGA.

12

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Etape 7 : Simuler votre circuit logique sur ISE de Xilinx : Le processus de simulation es compos de trois partie :

Un gnrateur de vecteurs de test

Le systme tester

Un moniteur, pour examiner les rponses de la simulation

Slectionner simulation sur Xilinx ISE Design Suite 13.1 et crer une nouvelle source (slectionner module test bench)

13

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

14

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


Etape 8 : Complter le code gnr automatiquement avec la cration dun processus de simulation.

-- test bench pour la simulation de la porte And

15

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


-----------------------------------------------------------------------------LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY benchand IS
END benchand;
ARCHITECTURE behavior OF benchand IS
COMPONENT and_g
PORT(
A : IN std_logic;
B : IN std_logic;
C : OUT std_logic
);
END COMPONENT;
--Inputs
signal A : std_logic := '0';
signal B : std_logic := '0';
--Outputs
signal C : std_logic;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: and_g PORT MAP (
A => A,
B => B,
C => C
);
-- Stimulus process
stim_proc: process
begin
A <= '0';
wait for 100 ns;
A <= '1';
wait for 100 ns;
B <= '0';
wait for 200 ns;
B <= '1';
wait for 200 ns;
end process;
END;

Etape 9 : Compiler nouveau le code et lancer la simulation avec simulate behavioral model

16

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

On obtient :

Remarque ;
On peut simuler un circuit sur ISE directement sans laborer un fichier test bench. Pou cela il faut suivre les tapes suivantes :
Etape 1 : Crer un nouveau projet et Slectionner Simulation et ajouter une nouvelle source.

17

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Etape 2 : Ajouter un nouveau module VHDL

18

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Etape 3 : Ajouter le code VHDL qui dcrit le comportement de votre circuit logique

Etape 4 : Compiler dabord votre code et lancer la simulation avec simulate Bihavioral model

19

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Etape 5 : Forcer le valeur de A et B avec Force Clock

20

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

21

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

22

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


Etape 6 : Choisir le temps de simulation par (1) et lancer la simulation par (2) et arranger vos signaux avec (3) et (4).

On obtient

Simulation sur la carte spartan 3 E de porte logique and avec la conception Flots de donnes

Pour simuler la porte logique and sur la carte spartan 3 E, il faut crer un fichier.UCF ( net list) pour spcifier les connections
internes (voir la liste netlist de la carte spartan 3 E en annexe) en slectionnant implementation Constraints File :

Ensuite, il faut affecter les entres et les sorties de la porte and aux composants de la carte qui sont spcifis dans le data-sheet de votre
carte . On associe lentre A de la porte and linterrupteur 1 qui se trouve connecte la ligne L13 de la carte spartan 3 E, lentre B
de la porte and linterrupteur 2 qui se trouve connecte la ligne L14 de la carte spartan 3 E et la sortie C de la porte and la diode
Led (1) qui se trouve connecte la ligne E12 de la carte spartan 3 E. Ce qui donne comme fichier UCF suivant :

23

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


NET
NET
NET

"C"
LOC = "E12" | IOSTANDARD=LVTTL;
"A" LOC = "L13" | IOSTANDARD=LVTTL;
"B" LOC = "L14" | IOSTANDARD=LVTTL;

Il faut compiler nouveau puis suivre les tapes ci-dessous pour gnrer un fichier bit.file qui sera excut par la FPGA de la carte
Spartan 3 E :

24

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

25

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

26

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

27

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


TP 2 : Modlisation du circuit demi additionneur

Le demi additionneur est un circuit combinatoire qui permet de raliser la somme arithmtique de deux nombres A et B chacun sur un bit. A la
sotie on va avoir la somme S et la retenu Cout (Carry).

Circuit : demi-additionneur

Table de vrit du circuit demi additionneur

Cout

Equations logiques du circuit demi additionneur :

S = A and B

Cout = A xor B

Simuler le circuit demi additionneur avec la conception flots de donnes sur le logiciel ISE.

28

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


TP 3 : Modlisation du circuit additionneur complet 1bit
Dans lAdditionneur complet, il faut tenir compte de retenu externe Cout

Circuit : additionneur complet 1bit

Equations logiques du circuit additionneur complet 1bit :


S = Cin xor(A xor B);
Cout = (A and B) or (A and Cin) or (B and Cin);

29

Table de vrit du circuit additionneur complet 1bit


A

Cin

Cout

0
1

1
1

Simuler en VHDL le circuit additionneur complet 1bit avec la conception flots de donnes
Simuler le mme circuit sur la carte spartan 3 E

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


TP 4 : Modlisation du circuit additionneur complet 2 bits
Dans lAdditionneur complet 2 bits on :

Circuit : additionneur complet 2 bits

Pour larchitecture, on peut exprimer les quations du premier et du second additionneur. Le lien entre les deux additionneurs est fait laide de
C0. C0 est un lien interne il est dfini dans larchitecture par le mot signal. Linstruction SIGNAL dclare un signal permettant la communication
entre les tats concurrents l'intrieur d'une architecture. Dans la dfinition, on doit spcifier un type au signal et l'on peut attribuer une valeur par
dfaut.
Remarque
On na pas besoin de dfinir la direction dun signal car cest une connexion interne

30

Equations logiques du circuit additionneur complet 2 bits :


S = Cin xor(A xor B);
Cout = (A and B) or (A and Cin) or (B And Cin);
Avec :

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Table de vrit du circuit additionneur complet 2bits

A
00
00
00
00
01
01
01
01
10
10
10
10
11
11
11
11

B
00
01
10
11
00
01
10
11
00
01
10
11
00
01
10
11

Cin
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

Cout
0
0
0
0
0
0
0
1
0
0
1
1
0
1
1
1

S
00
01
10
11
01
10
11
00
10
11
00
01
11
00
01
10

Simuler en VHDL du circuit additionneur complet 2bits avec la conception flots de donnes
Simuler ce circuit sur la carte spartan 3 E

Pour sa simulation sur carte Spartan 3E il faut crer le fichier.UCF ( net list) suivant pour spcifier les connections internes :

NET
NET
NET
NET

A(0)
A(1)
B(0)
B(1)

LOC
LOC
LOC
LOC

=
=
=
=

"L13"
"L14"
"H18"
"N17"

|
|
|
|

IOSTANDARD
IOSTANDARD
IOSTANDARD
IOSTANDARD

=
=
=
=

LVTTL
LVTTL
LVTTL
LVTTL

|
|
|
|

PULLUP
PULLUP
PULLUP
PULLUP

NET Som(0) LOC = "F12" | IOSTANDARD = LVTTL;


NET Som(1) LOC = "E12" | IOSTANDARD = LVTTL;
NET Cout
LOC = "E11" | IOSTANDARD = LVTTL;

31

Pr. Benaissa Amami, FST Tanger

;
;
;
;

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


Les boucles et instructions if, then, else, exit, for, While, case With.select...

2.5.

Les instructions squentielles du type if, then, else... sont trs puissantes et permettent la ralisation de boucles conditionnelles intressantes. De
plus, la syntaxe qui leur est associe ne prsente pas de difficults particulires et permet une criture des descriptions trs lisible. Vous trouverez
ci-dessous quelques exemples de traductions de boucles ou densembles dinstructions conditionnelles.

Syntaxe de linstruction IF

La combinaison IF THEN permet d'effectuer un test d'une expression logique. La suite du droulement dpend du rsultat. Deux
imbrications sont possibles : ELSIF suivi d'un autre test et ELSE qui contrle les rsultats FALSE.

Remarques :
Il est possible dimbriquer plusieurs boucles IF les unes dans les autres.

Les instructions ELSIF et ELSE ne sont pas obligatoires.

Syntaxe de linstruction While

WHILE est une instruction de bouclage. Elle s'utilise avec LOOP. On place la condition de fin de sortie dans l'instruction mme contrairement au
LOOP seul o on est oblig d'avoir recourt la commande EXIT. On peut toutefois utiliser EXIT ou NEXT.
Le bouclage se fait tant que la condition reste TRUE.

Syntaxe de linstruction FOR

FOR est une instruction de bouclage. Elle s'utilise avec LOOP. On place la condition de fin de sortie dans l'instruction mme contrairement au
LOOP seul o on est oblig d'avoir recourt la commande EXIT. On peut toutefois utiliser EXIT ou NEXT.

Exemple :

32

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Syntaxe de linstruction EXIT

Linstruction EXIT se combine avec FOR, WHILE et LOOP pour sortir d'une boucle.

Syntaxe dinstruction CASE

Linstruction CASE, souvent appele switch case, convient parfaitement pour dcrire un diagramme d'tat, un grafcet ou tout autre formalisme
de structures squentielles (voir plus loin state machine ou machine etat). L'instruction When others n'est pas obligatoire, mais son ajout en
fin de liste, permet de donner une action tous les choix qui n'ont pu tre trouvs dans la liste.

Syntaxe dinstruction SELECT

Dans la fonctionnalit, SELECT est quivalent l'instruction CASE. SELECT ne peut toutefois affecter qu'une seule variable.

exemple

33

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

--Multiplexeur avec selet


LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY multiplexeur2 IS
PORT (a,b,sel : IN std_logic;
y : OUT std_logic);
END multiplexeur2;
ARCHITECTURE behavior OF multiplexeur2 IS
BEGIN
multiplexeur_with_select: WITH sel SELECT
y <= a WHEN '0',-- y = a si sel = 0 sinon
b WHEN '1', -- y = b si sel = 1 sinon
'X' WHEN OTHERS; -- y est indtermin
END behavior;

2.6.

Fonction PROCESS

Une architecture en VHDL est un ensemble de processus excuts en parallle (en concurrence). L'ordre relatif des processus l'intrieur d'une
architecture n'a pas d'importance. Il existe deux types de processus :
1.
le processus implicite ou phrase concurrente
2.
le processus explicite
Chaque composant interne du systme sera un processus (process) de l'architecture

Une architecture est un ensemble de processus

Les processus s'excutent en parallle

Les processus de l'architecture sont interconnects par le biais des signaux (signal), quivalent des fils ou cbles d'interconnexion dans
le monde rel
Un processus explicite est un ensemble de phrases excutes squentiellement: l'intrieur d'un processus l'ordre des phrases a donc une
importance Un processus ne peut pas tre dclar l'intrieur d'un autre Processus.
Tout signal dont le changement de valeur a une influence sur le processus doit apparatre dans la liste de sensibilit. Dans le cas contraire, la
simulation pourrait donner des rsultats faux puisqu'elle ne serait pas enclenche. Pour viter des erreurs, on peut mettre dans la liste de sensibilit
tous les signaux tests ou apparaissant droite d'une affectation, l'intrieur du processus.

Syntaxe de dclaration dun PROCESS (processus)

34

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

-- Description d'un processus


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity test_processus is
port
(
A, B : in std_logic;
S : out std_logic
);
end test_processus;
architecture Behavioral of test_processus is
begin
process (A, B)
begin
if (A = '0' AND B = '0') then
S <= '0' ;
end if;
if (A = '0' AND B = '1') then
S <= '1' ;
end if;
end process;
end Behavioral;

Syntaxe dinstruction WAIT

WAIT est utilis dans une dclaration squentielle de type PROCESS ou PROCEDURE (voir ci-dessous).
WAIT remplace une liste de sensibilit pour contrler l'excution et la suspension d'un PROCESS.
WAIT peut tre plac n'importe o dans le PROCESS.
Sans WAIT ou sans liste de sensibilit, un PROCESS se boucle indfiniment.
WAIT ON est quivalent une liste de sensibilit. La liste des signaux suit.
Ainsi : les deux codes sont quivalents

35

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Un processus est synchronis par une (ou plusieurs) instructions WAIT


WAIT ON <vnement>
WAIT UNTIL <condition boolenne>
WAIT FOR <dure>
WAIT
Les processus sont cycliques
Un Processus est explicite (PROCESS) ou implicite (instruction concurrente)
TP 5 : Modlisation de la porte and avec la conception comportementale
TP 6 : Description en VHDL du circuit demi additionneur avec la conception comportementale
TP 7 : Description en VHDL du circuit additionneur complet 1bit avec la conception comportementale
TP 8 : Description en VHDL dun multiplexeur
2.7.

Fonction COMPONENT (composant)

La fonction COMPONENT permet d'crire un programme sous la forme structurelle. En effet, il faut dclarer et dfinir les composants de la
fonction puis dans le corps de l'architecture, il suffit de les connecter en suivant un schma structurel. Cette mthode d'criture permet aussi la
description
hirarchique.
Quatre blocs sont distinguer dans une telle dfinition :

Recensement de tous les composants du schma. Ceci se fait par la syntaxe

Syntaxe de dclaration dun COMPONENT

Affectation des liaisons du schma aux broches des composants. Cette phase correspond raliser la NETLIST du schma ceci se
fait grce la fonction FOR MAP avec la syntaxe suivante :

Syntaxe de dclaration de FOR MAP

Attribution des circuits leur ENTITY. Cette phase permet de contrler le modle comportemental qui va dterminer le
fonctionnement du composant. La fonction CONFIGURATION permet de raliser ceci avec la syntaxe suivante :
Syntaxe de dclaration dune CONFIGURATION

36

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Avant d'utiliser (instancier) un composant, il doit tre dclar

La dclaration d'un composant est similaire la dclaration d'une entit: c'est simplement la liste des ports de sa bote noire

Pour pouvoir simuler ou synthtiser un composant, il doit exister ailleurs une paire entit-architecture qui le dcrive. Le nom du
composant doit tre le mme que celui de l'entit correspondante. Les noms des signaux du composant doivent tre identiques aux
noms des signaux de l'entit correspondante

Chaque instance d'un composant doit possder une tiquette. Chaque signal dans la liste des ports du composant (les noms formels)
doit tre connect un signal dans l'architecture (les noms rels). Ces associations peuvent tre explicites ou implicites (donnes par
l'ordre dans la liste)
TP 9 : Description en VHDL du circuit additionneur complet 1bit avec la conception structurelle
On reprend ladditionneur complet 1bit de lexemple 3 vu ci-dessus pour le modliser en utilisant la conception structurelle. Dans ce type de
description, on relie entre eux des composants pralablement dcrits en VHDL.
Avant d'utiliser (instancier) un composant, il doit tre dclar, La dclaration d'un composant est similaire la dclaration d'une entit: c'est
simplement la liste des ports de sa bote noire
Pour pouvoir simuler ou synthtiser un composant, il doit exister ailleurs une paire entit -architecture qui le dcrive. Le nom du composant doit
tre le mme que celui de l'entit correspondante. Les noms des signaux du composant doivent tre identiques aux noms des signaux de l'entit
correspondante. Chaque instance d'un composant doit possder une tiquette. Chaque signal dans la liste des ports du composant (les noms
formels) doit tre connect un signal dans l'architecture (les noms rels). Ces associations peuvent tre explicites ou implicites (donnes par
l'ordre dans la liste)
Le circuit principal est constitu de 5 composants (U1, U2, U3, U4, et U5) mais seulement 3 entits (and, or et xor). Les 5 composants sont relis
entre eux par 3 signaux internes (in1, in2 et in3).

Procdure suivre :
1.

Dclarer lentit et larchitecture du circuit principale (ici ladditionneur 1bit)

2.

Dclarer tous les composants qui seront utiliss (ici 3 composant : and2, or2, xor2)

3.

Dclarer les signaux qui assureront la liaison entre tous les composants (ici In1, In2, In3)

4.

Faire laffectation des liaisons du schma aux broches des composants avec la fonction PORT MAP pour tous le composant ( ici 5
composants)

linstruction PORT MAP (a => in1, b => cin, q => sum); affecte lentre a du
composant U3 (Xor) au signal intermdiaire(interne) In1 et affecte lentre b du
composant U3 (Xor) lentre principale Cin du circuit additionneur et enfin il
Pr. Benaissa
Amami,
FSTcomposant
Tanger
la sortie
q du
U3 (Xor) la sortie principale du circuit
37affecte
additionneur complet sum

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

5.

Il ne faut pas oublier de dclarer les entits et les architectures des composants (ici 3 composants and2, or2 et xor2)

Lentit and2
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
ENTITY and2 IS
PORT (a,b : IN std_logic;q : OUT std_logic);
END and2;
ARCHITECTURE behv OF and2 IS
BEGIN
q<=a and b;
END behv;

Lentit or2

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
ENTITY or2 IS
PORT (a,b : IN std_logic;q : OUT std_logic);
END or2;
ARCHITECTURE behv OF or2 IS
BEGIN
q<=a or b;
END behv;

Lentit xor2

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
ENTITY xor2 IS
PORT (a,b : IN std_logic;q : OUT std_logic);
END xor2;
ARCHITECTURE behv OF xor2 IS
BEGIN
q<=((not a) and b) or (a and (not b));
END behv;

38

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

6.

Il faut attribuer les composants leur entit (voir tape 5) avec la fonction CONFIGURATION

Linstruction FOR u1,u3: xor2 USE ENTITY WORK.xor2; veut dire que u1 et u3
hritent du comportement de xor2 dfini dans un fichier part

Le programme complet en langage VHDL pour dcrire (modliser) ladditionneur1bit dune manire structurelle est le suivant :

39

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


TP 10 : Description en VHDL du circuit additionneur 2 bits avec la conception structurelle
Il existe un autre type de description pour ladditionneur 2bits o on dfinit une structure contenant deux additionneurs du type Additionneur
interconnects avec un signal interne Co. Cette description sappelle une description de type structurel.

Le ou les composants utiliss dans larchitecture doivent tre dfinis par le mot component suivi du nom lentit utiliser et la description de la
nature des ports du composant.

dditionneur1 et additionneur2 sont les deux additionneurs utiliss, la liste des connexions est indique dans lordre :
(additionneur1: A A(0), B B(0), Cin Cin, Som Som(0), Cout Co)
(additionneur2: A A(1), B B(1), Cin Co, Som Som(1), Cout Cout)
Il existe deux manires pour laffectation des entres et les sorties aux composants de larchitecture :
1.

Affectation des entres/sorties par noms (il faut respecter lordre )

- port map(Cin=>Cin, A=>A(0), B=>B(0), Cout=>Co, Som=>Som(0));


- port map(Cin=>Co, A=>A(1), B=>B(1), Cout=>Cout, Som=>Som(1));
2. Affectation des entres/sorties par position :
- port map(A(0), B(0), Cin, Som(0), Co
- port map(A(1), B(1), Co, Som(1), Cout);

40

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Il faut dclarer part, lentit laquelle component fait rfrence (de laquelle il hrite)

41

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


2.8.

Fonction Attribut : rising_edge(clk) et la fonction clk'event and clk='1'

La fonction ('event) 'vnement est un concept important en VHDL. Elle se rapporte des signaux et il se produit sur un signal. En d'autres
termes, un vnement sur un signal provoque un changement de la valeur de ce signal. Il est possible de vrifier si un vnement s'est produit sur
un signal. Une telle information peut tre obtenue grce l'attribut 'vnement (event) prdfini. Lvnement(event) est trs utilise dans
larchitecture des compteurs.
Linstruction clk'event and clk = '1' renvoie la valeur boolenne vrair (true) si le signal clk, de type bit, vaut 1 aprs un
changement de valeur, ce qui revient tester la prsence dune transition montante de ce signal.
I ya deux faons de dtecter des fronts montants (rising_edge ) et descendants (falling_edge ) de l'horloge.
La diffrence entre les deux fonctions "clk'event and clk='1' " et "rising_edge (clk)" ou "falling_edge (clk)" concernant la dtection des fronts
de lhorloge est la suivante :

On obtient la simulation suivante :

42

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Dans ce cas il n y a pas de diffrence entre les deux fonctions. Considrons le programme suivant :

On peut voir que le signal 'xr' ne change pas du tout, mais les changements de x0 comme dans le premier code. C'est la diffrence fondamentale
entre les deux mthodes.

43

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


TP 11 : Description en VHDL dun compteur 3bits : le compteur arrte de compter si Raz est gale 1

44

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

-- Compteurs 3 bits synchrone


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
ENTITY Compteur IS
PORT (
clk,raz :IN std_logic;
qs : OUT std_logic_vector(3 downto 0)); -- sortie vritable
END Compteur;
ARCHITECTURE Compteur_3bits OF Compteur IS
SIGNAL q : std_logic_vector(3 downto 0); -- signal intermdiaire
BEGIN
-- toujours faire :
qs <= q;
-- et en mme temps RAZ synchrone
PROCESS(clk) BEGIN
IF clk'event and clk='1' THEN
IF raz='1' THEN
q<=(OTHERS=>'0');
ELSE
q<=q+1;
END IF;
END IF;
END PROCESS;
END Compteur_3bits;

45

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

TP 12 : Compteur 3 bits simple, sans remise 0 et sans utiliser linstruction vnement (event)

46

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

TP 13 : Compteur 3 bits simple, avec remise 0 (RAZ) asynchrone, le compteur compte tant que Raz = 1

47

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


TP 14 : Ralisation dun Compteur 4 bits avec reset et pause est son affichage sur les 4 leds de la carte Spartan 3 E. Il recommence le
comptage chaque fois quil atteint la valeur 15

48

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

-- Compteur 4bits avec reset et pause et recommence compter aprs avoir


--atteint 15
-- et son affichage sur les 4 leds de
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

la care spartan 3E

entity counter_4bits is
port ( clk : in std_logic;
reset : in std_logic;
pause : in std_logic;
count_out : out std_logic_vector(3 downto 0));
end counter_4bits;

-- la vraie sortie

architecture Behavioral of counter_4bits is


signal temp_count : std_logic_vector(3 downto 0) := x"0";
signal slow_clk : std_logic;
-- Diviseur d'horloge peut tre chang pour adapter l'application
-- Clock (clk) est normalement 50 MHz, le cycle de l'horloge est de 20 ns
-- un diviseur de la frequence de l'horloge de n bits fera un slow_clk
-- de cycle gale 2^n cycles de l'horloge.
signal clk_divider : std_logic_vector(23 downto 0) := x"000000";
begin
-- Process that makes slow clock go high only when MSB of
-- clk_divider goes high.
clk_division : process (clk, clk_divider)
begin

49

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


if (clk = '1' and clk'event) then
clk_divider <= clk_divider + 1;
end if;
slow_clk <= clk_divider(23);
end process;
counting : process(reset, pause, slow_clk, temp_count)
begin
if reset = '1' then
temp_count <= "0000"; -- Asynchronous reset.
elsif pause = '1' then
temp_count <= temp_count; -- Asynchronous count pause.
else
if slow_clk'event and slow_clk ='1' then -- Counting state
if temp_count < 15 then
temp_count <= temp_count + 1; -- Counter increase
else
temp_count <= "0000"; -- Rollover to zero
end if;
end if;
end if;
count_out <= temp_count; -- Output
end process;
end Behavioral;

Voici le fichier test bench pour simuler le compteur 4 bits sur ISE

-- Fichier test bench pour simuler le compteur 4 bits sur ISE


LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY counter_tb_vhd IS
END counter_tb_vhd;
ARCHITECTURE behavior OF counter_tb_vhd IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT counter
PORT(
clk : IN std_logic;
reset : IN std_logic;
pause : IN std_logic;
count_out : OUT std_logic_vector(3 downto 0)
);
END COMPONENT;
--Inputs
SIGNAL clk : std_logic := '0';
SIGNAL reset : std_logic := '0';
SIGNAL pause : std_logic := '0';
--Outputs
SIGNAL count_out : std_logic_vector(3 downto 0);
constant clk_period : time := 10 ns;
BEGIN

50

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


-- Instantiate the Unit Under Test (UUT)
uut: counter PORT MAP(
clk => clk,
reset => reset,
pause => pause,
count_out => count_out
);
clock : PROCESS
BEGIN
clk <= NOT clk;
wait for clk_period;
END PROCESS;
pause_test : PROCESS
BEGIN
pause <= '0';
wait for clk_period*74;
pause <= '1';
wait for clk_period*6;
END PROCESS;
reset_test : PROCESS
BEGIN
reset <= '0';
wait for clk_period*106;
reset <= '1';
wait for clk_period*2;
END PROCESS;
END;

Voici le fichier test UCF pour simuler le compteur 4 bits sur la carte spartan 3E

NET
NET
NET
NET
NET

"clk" LOC = "C9" ;


"count_out<0>" LOC
"count_out<1>" LOC
"count_out<2>" LOC
"count_out<3>" LOC

=
=
=
=

"F12"
"E12"
"E11"
"F11"

;
;
;
;

#
#
#
#

LED<0>
LED<1>
LED<2>
LED<3>

NET "pause" LOC = "L13" ; # SW<0>


NET "reset" LOC = "K17" | PULLDOWN ;

51

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


TP 15 : Ralisation dun Compteur 8 bits est avec reset son affichage sur les 8 leds de la carte Spartan 3E

52

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


-- Compteur 8 bit sur spartan 3 E
---------------------------------------------------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity compteurspartan3E is
port (
CLK : in STD_LOGIC;
RESET_Switch_0 : in STD_LOGIC;
LED : out STD_LOGIC_VECTOR(7 downto 0)
);
end compteurspartan3E;
architecture Behavioral of compteurspartan3E is
signal COUNTER: STD_LOGIC_VECTOR(7 downto 0); -- dclaration du signal COUNTER (8bits)
signal PRESCALER: STD_LOGIC_VECTOR(25 downto 0); -- dclatation d'un PRESCALER (26bits)
begin
CounterProcess : process(RESET_Switch_0, CLK) -- sensibilt du process
begin
if rising_edge(CLK) then -- si le compteur est sur le front montant et
if RESET_Switch_0 = '1' then -- si l'intereupteur RESET_Switch_0 est 1 alors
PRESCALER <= (others => '0'); -- mettre PRESCALER 0
COUNTER <= (others => '0'); -- mettre le conpteur 0 aussi
else
-- sinon
if PRESCALER < "10111110101111000010000000" then -- si PRESCALER est < 50000000
PRESCALER <= PRESCALER + 1; --incrementer PRESCALER
else
-- sinon
PRESCALER <= (others => '0'); -- mettre PRESCALER 0
COUNTER <= COUNTER + 1; --incrementer le compteur
end if ;
end if;
end if;
end process ;
LED <= COUNTER; --affichage de la valeur de compteur (8bit) sur les 8 leds
end Behavioral;

Voici le fichier UCF pour la simulation de compteur 8 bits sur la carte spartan 3 E

NET LED(0)
NET
NET
NET
NET
NET
NET
NET

LOC = "F12" | IOSTANDARD=LVTTL;


LED(1) LOC = "E12" | IOSTANDARD=LVTTL;
LED(2) LOC = "E11" | IOSTANDARD=LVTTL;
LED(3) LOC = "F11" | IOSTANDARD=LVTTL;
LED(4) LOC = "C11" | IOSTANDARD=LVTTL;
LED(5) LOC = "D11" | IOSTANDARD=LVTTL;
LED(6) LOC = "E9" | IOSTANDARD=LVTTL;
LED(7) LOC = "F9" | IOSTANDARD=LVTTL;

NET RESET_Switch_0 LOC = "L13" | IOSTANDARD=LVTTL;


NET CLK

53

LOC = "C9" | IOSTANDARD=LVTTL;

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


TP 16 : Elaboration dune horloge 24 fois plus lente que lhorloge principale
Dans cet exemple, nous allons crer un compteur allant de 0 23 et en mme temps, nous allons utiliser ce signal pour gnrer une horloge qui est
24 fois plus lente que celle a lentre. Pour ce faire, il faut commencer par raliser que, pour compter jusqu' 23, il faut 5 bits, puisque 25=32). Par
la suite, on devrait aussi savoir quun compteur est compose de flip flops et de logique. Il faut donc avoir un process squentiel (avec clock). Un
compteur devrait augmenter son compte chaque front montant dhorloge SAUF quand il arrive 23. Quand il arrive 23, il doit recommencer
0. Ceci est ralis par le processus principale suivant :

TP 17 : Compteur avec autorisation


Prenons maintenant un deuxime exemple dun compteur. Imaginons cette fois-ci quon veuille contrler le
compteur avec un signal externe. Nous voulons que le compteur incrmente seulement quand un bouton est pes.
Quand on relche le bouton, on aimerait que le compte arrte.
Pour ce faire, il faut procder de la mme manire que lexemple prcdent. La diffrence, cependant, est quil y a
une condition de plus pour que le compteur fonctionne : A chaque front montant dhorloge, SI LE BOUTON EST
PESE, tu peux agir comme un compteur.
Le process deviendrait donc ceci :

3.

Machine tats finis

3.1.

Rappel et dfinition des systmes lectroniques

Un systme lectronique est caractris par :

Ses entres : e0; ; ei; ; en

Son tat lectrique E

Ses sorties : s0; ; si; ; sn


Il existe deux type de systmes lectroniques

Les systmes combinatoires construits laide de logique combinatoire

Les systmes squentiels construits laide de logique squentielle


Machines tats

Les combinaisons des entres conduisent un nombre fini de combinaisons de sortie, do lappellation machine
nombre dtats finis ou Machine Etats

Vecteur dentre : Combinaison des variables dentre

Vecteur de sortie : Combinaison des variables de sortie


Notations :

Entre : E

Etat Prsent : EP

Etat Futur : EF

Sortie : S

Etat : Indicateur de position dans le temps


Dfinitions

Registre dEtat : Compos de bascules permettant de mmoriser les valeurs des tats

Etat Prsent : sortie stable du registre dtat linstant prsent

Etat Futur : tat dans lequel se trouvera la machine aprs une impulsion d'horloge
Table de transition : deux parties indiquant le prsent et le futur.

E : Entre linstant n

EP : Etat Prsent linstant n

EF : Etat Suivant linstant n + 1

S : Fonction de Sortie linstant n + 1

Table de transition

54

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


3.2.

Machines tats finis

La machine tat reprsente la partie contrle, cest dire le cerveau du systme lectronique qui commande la partie oprative.

Une machine tats finis est un circuit squentiel dont les sorties dpendent dun tat et ventuellement des entres. La structure logique gnrale
dun tel circuit est reprsente sur la figure suivante :

Le bloc SM (State Memory) a pour fonction de mmoriser ltat courant de la machine. Il a par essence un comportement squentiel synchronis
sur un signal dhorloge.
Le bloc NSL (Next State Logic) a pour fonction de calculer le prochain tat en fonction de ltat courant et des entres.
Le bloc OL (output Logic) a pour fonction la gnration des signaux de sortie en fonction de ltat courant et ventuellement des entres.
La modlisation VHDL dune machine tats finis doit considrer les points suivants:

55

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Exemple 19 : Description en VHDL dun systme avec machine tats (4 tats):


Considrons un systme machine tats finis constitu de 4 tats : selon la figure suivante :

La description du systme se fait par un nombre fini dtats. Ci-dessus la reprsentation schmatique dun systme 4 tats (M0 M3), 2 sorties
(S1 et S2), 2 entres X et Y, sans oublier lentre dhorloge qui fait avancer le processus, et celle de remise zro qui permet de linitialiser
Ltat initial est M0. Les 2 sorties sont 0. Au coup dhorloge on passe inconditionnellement ltat M1 sauf si la condition Y=1 a t vrifie,
ce qui mne ltat M3 ou si X=0 a t valid ce qui mne M2.
De M3 on revient au coup dhorloge M0. De M1 on passe M2, et de M2 on passe M 3...
Dans chaque tat on dfinit les niveaux des sorties.
Traduisons cette machine tat en langage VHD avec :

Une entit

une ARCHITECTURE de description dtat avec 2 PROCESS : Un process asynchrone et un process synchrone.
Le 1er process (process SYNCHRONE) met jour la variable dtat en cours ( signal : etat), en la remplaant par le contenu dun autre signal
appel : etat_suiv . Ceci se fait chaque front dhorloge. Ce 1er Process gre aussi la remise zro (entre : reset).
Le 2me process (process ASYNCHRONE) met jour le signal etat-suiv en lui attribuant la valeur dun tat de la liste (M0, M1), en fonction de
conditions sur les entres ou de lordre prvu des tats. Il attribue aussi les niveaux des sorties.

PROCESS SYNCHRONE :

56

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Il est appel aussi current state process . Il met jour la variable dtat et doit possder une condition IF sur un front dhorloge. Il peut
possder une RAZ (optionnel). Il assigne (sans condition) la valeur de ltat suivant (next state variable) la variable dtat courante sur un front.
Le RAZ si elle existe, assigne une valeur statique la variable dtat courante. Ce process ne peut mettre jour aucun autre signal (sortie par
exemple) ou variable !

PROCESS ASYNCHRONE :
Il est appel aussi next state process . Ne pas oublier de mettre dans sa liste de sensibilit les diffrents signaux (entres) qui seront pris en
compte dans les tats :
exemple :
PROCESS ( etat, x, y).

Ce process est la partie combinatoire de la machine dtat et ne doit pas contenir de front dhorloge. Son architecture doit tre une simple structure
de CAS. Lexpression teste dans les cas doit tre la variable dtat courante.
Les variables dtat courant et next state doivent tre du mme type (entier, std_logic vector, std_logic...).
Ce process peut seulement assigner des valeurs la next state variable (etat_suiv), mais ne peut pas lire ses valeurs.
Les variables dtat courant et next state ne peuvent pas tre un port de lentit laquelle larchitecture appartient et aucune partie du corps de
larchitecture ne peuvent lire ou crire leurs valeurs sauf les 2 process.

SI on synthtise avec un fichier source VHDL crit sans suivre ces rgles, La synthse du code sera faite mais pas en temps que state
machine.
Le programme complet de cet exemple sera le suivant :

----- Dfinition de l'entit---ENTITY machine1 IS


PORT (reset, clk :IN STD_LOGIC; -- Ne pas oublier remise 0 et horloge !
X, Y :IN STD_LOGIC;
S1, S2 :OUT STD_LOGIC);
END machine1;

57

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


------ Dfinir L'architecture de description d'tat ----------------ARCHITECTURE diagramme OF machine1 IS
TYPE etat_4 IS (M0, M1, M2, M3);
--dfinir une liste des tats...
SIGNAL etat,etat_suiv :etat_4 := M0; --et 2 signaux: tats courant et suivant, contenant la
valeur d'un tat de la liste (initialise M0) .
BEGIN
definir_etat:PROCESS( reset, clk) -- "definir_etat":label optionnel
BEGIN
If reset = '1' THEN
etat <= M0;
ELSIF rising_edge(clk) THEN --Le
PACKAGE
std_logic_1164
l'utilisation.
etat <= etat_suiv ;
--Mise jour de la variable
l'horloge.
END IF;
END PROCESS definir_etat;

en

permet

d'tat par

-- Processus asynchrone
------------ Dfinir les tats des sorties------------------sorties : process (etat, x, y)
BEGIN
CASE etat IS --Le PROCESS doit contenir une structure de CAS unique dpendant
de la variable d'tat.
WHEN M0 => S1 <= '0'; S2<= '0';
IF Y='1' then etat_suiv <= M3;
elsif X='0' then etat_suiv <= M2;
suivant n'est attribu que dans la structure CASE

--Le signal de l'tat

ELSE etat_suiv <= M1;


END IF;
WHEN M1 => S1 <= '1'; S2<= '0';etat_suiv <= M2;
WHEN M2 => S1 <= '1'; S2<= '1';etat_suiv <= M3;
WHEN M3 => S1 <= '0'; S2<= '1';etat_suiv <= M0;
END CASE;
END process sorties ;
END diagramme ;

58

-- ne pas oublier de terminer l'architecture !

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


TP 20 : Description en VHDL dun systme avec machine tats (3 tats):

Le programme complet de cet exemple sera le suivant :

library ieee;
use ieee.std_logic_1164.all;
entity etats_3 is
Port (
-- Inputs
-- horloge et reset globals
clk : in std_logic;
reset : in std_logic;
X : in std_logic; -- signal d'entree
-- Outputs
Y : out std_logic;
Z : out std_logic_vector(3 downto 0)
);
end entity etats_3;
architecture Behav of etats_3 is
type etat is (A, B, C);
signal etat_present , etat_suivant : etat;
begin
exemple_synchrone : process(reset , clk)
begin
if (reset = '1') then
etat_present <= A;
elsif clk'event and clk = '1' then
etat_present <= etat_suivant;
end if;
end process;
exemple_asynchrone : process(etat_present, X)
begin

59

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


case etat_present is
when A =>
if (X = '1') then
etat_suivant <= B;
else
etat_suivant <= A;
end if;
Y <= '0';
Z <= (others => '0');
when B =>
if (X = '0') then
etat_suivant <= C;
Y <= '1';
else
etat_suivant <= A;
Y <= '0';
end if;
Z <= (others => '0');
when C =>
etat_suivant <= A;
Y <= '0';
Z <= "1001";
-- N'oubliez pas d'assigner un tat par default
when others =>
etat_suivant <= A;
Y <= '0';
Z <= (others => '0');
end case;
end process;
end architecture Behav;

60

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


TP 21
Q0)

: Description en VHDL dun systme avec machine tat : compteur synchrone modulo 7 (compte de 0 6 donc 3 sorties Q2 Q1

LIBRARY ieee; USE ieee.std_logic_1164.all;


ENTITY compt_etat_7 IS
PORT (clk, reset: IN std_logic ;
q0, q1, q2 : OUT std_logic);
END compt_etat_7;
ARCHITECTURE arch_compt_etat_7 OF compt_etat_7 IS BEGIN process (reset, clk) variable etat :
integer range 1 to 7;
begin if reset ='1' then etat:= 1;
q0 <= '0'; q1 <= '0'; q2 <= '0';
elsif clk'event and clk='1' then
case etat is when 1 => etat:=2;
q0<='1'; q1<='0'; q2<='0';
when 2 => etat:=3;
q0<='0'; q1<='1'; q2<='0';
when 3 => etat:=4; q0<='1'; q1<='1'; q2<='0';
when 4 => etat:=5; q0<='0'; q1<='0'; q2<='1';
when 5 => etat:=6; q0<='1'; q1<='0'; q2<='1';
when 6 => etat:=7; q0<='0'; q1<='1'; q2<='1';
when others => etat :=1; q0<='0'; q1<='0'; q2<='0';
end case;
end if;
end process;
END arch_compt_etat_7;

Dans cet exemple, on va parler des machines tats. Nous allons considrer la situation ou il y a une machine qui vend les films pour 5$.
Lusager a le droit de mettre des pices de 1$ ou de 2$ et des que le montant arrive a 5$ ou plus, il y a un film qui sort. Il est aussi possible de
lusager mette 6$ et dans ce cas, la machine donne un film et remet aussi la monnaie.
Nous voulons faire une machine de Moore et donc, les sorties ne dpendent que le ltat. Une information de plus est que, si la personne mettait
de largent pendant que le film sort, largent sera perdu.

61

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


Avec cette description, il devrait dj tre possible de dterminer quelques entres et sorties. Puisque cest une machine tats, il doit y avoir une
horloge. On peut soit insrer 1$, 2$ ou rien, donc on va avoir une entre pour chaque type de monnaie. A la sortie, on peut soit donner un film ou
soit donner un film et de la monnaie.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY machine IS
PORT (
clk : IN STD_LOGIC;
un_dollar : IN STD_LOGIC;
deux_dollars : IN STD_LOGIC;
film : OUT STD_LOGIC;
monnaie : OUT STD_LOGIC
);
END machine;
ARCHITECTURE rtl OF machine IS
TYPE etats IS (zero, un , deux, trois, quatre, cinq, six);
SIGNAL etat_present : etats;
SIGNAL etat_prochain : etats;
BEGIN
PROCESS (etat_present, un_dollar, deux_dollars)
BEGIN
CASE etat_present IS
WHEN zero => film <= '0';
monnaie <= '0';
IF un_dollar = '1' THEN
etat_prochain <= un;
ELSIF deux_dollars = '1' THEN
etat_prochain <= deux;
ELSE
etat_prochain <= zero;
END IF;
WHEN un =>
film <= '0';
monnaie <= '0';
IF un_dollar = '1' THEN
etat_prochain <= deux;
ELSIF deux_dollars = '1' THEN
etat_prochain <= trois;
ELSE
etat_prochain <= un;
END IF;
WHEN deux =>
film <= '0';
monnaie <= '0';
IF un_dollar = '1' THEN
etat_prochain <= trois;
ELSIF deux_dollars = '1' THEN
etat_prochain <= quatre;
ELSE
etat_prochain <= deux;
END IF;
WHEN trois =>
film <= '0';
monnaie <= '0';
IF un_dollar = '1' THEN
etat_prochain <= quatre;
ELSIF deux_dollars = '1' THEN
etat_prochain <= cinq;
ELSE
etat_prochain <= trois;
END IF;

62

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


WHEN quatre =>
film <= '0';
monnaie <= '0';
IF un_dollar = '1' THEN
etat_prochain <= cinq;
ELSIF deux_dollars = '1' THEN
etat_prochain <= six;
ELSE etat_prochain <= quatre;
END IF;
WHEN cinq =>
film <= '1';
monnaie <= '0';
etat_prochain <= zero;
WHEN six =>
film <= '1';
monnaie <= '1';
etat_prochain <= zero;
END CASE;
END PROCESS;
PROCESS (clk)
BEGIN
IF clk'EVENT AND clk = '1' THEN
etat_present <= etat_prochain;
END IF;
END PROCESS;
END;

Projet Devoir : Contrle de lafficheur LCD de la carte Spartan 3 E


La carte de dveloppement Spartan 3E dispose dun afficheur LCD 2 lignes de 16 caractres. La FPGA des la carte spartan 3 E contrle le LCD
via des interfaces de donnes de 4 bits malgr quil supporte 8 bits. Pour afficher les informations, lafficheur utilise le code ASCII standard et
nest pas rapide compar lhorloge de la carte 50 Mhz puisquil balaye lcran un intervalle dune demi second.

Les chronogrammes des commandes denvoi dun caractre sur lcran sont les suivants :

63

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Il suffit, en simplifiant, denvoyer simultanment sur lafficheur, la donne, le signal de slection et dcriture, puis, en retard de 40 ns de fournir
une impulsion de validation de largeur minimum 230 ns. Ce cot de linterface est simple, il implique une mmorisation des signaux de
commandes et des temporisations.
Signaux

64

Etat

fonctions

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


LCD_E

donne accs lcran

spcifie une opration d'criture de donnes,

spcifie une commande.

0
1

Ecriture : lcran reoit les donnes


Lecture : lcran prsente les donnes
Strataflach dsactiv : accs complet en lecture et criture lcran

Ecran vide

Affichage

LCD_RS

LCD_RS
SF_CE0
SW0

SF_D8
SF_D9
SF_D10
SF_D11

Les bits de donns

Sachant que la frquence de lhorloge de la carte sprtan 3E est de 50Mhz ce qui veut dire quun cycle dhorloge est gal 20 ns. Pour afficher des
donnes sur lcran, il faut suivre les tapes suivantes :
Etape1 :
Mettre SF_CE0 = 1 pour avoir accs complet en lecture / criture cran LCD (StrataFlash dsactiv)
Etape 2 : Phase dinitialisation du lcran
Cette tape passe par plusieurs squences :
1. Attendre 15 ms (750000 cycles dhorloge) ou plus avec LCD_E = 0 bien que lafficheur est gnralement prt quand FPFA termine la
configuration.
2. Envoyer sur SF_D<11 :8> = 3 = (0011)2 avec les signaux LCD_RW=0, LCD_RS = 0 et LCD_E = 1 pendant 240 ns soit 12 cycles
dhorloge
3. Attendre 4,1 ms ou plus soit 205000 cycles dhorloge avec LCD_E = 0
4. Envoyer sur SF_D<11 :8> = 3 = (0011)2 avec les signaux LCD_RW=0, LCD_RS = 0 et LCD_E = 1 pendant 240 ns soit 12 cycles
dhorloge.
5. Attendre 100 us ou plus soit 5000 cycles dhorloge avec LCD_E = 0
6. Envoyer sur SF_D<11 :8> = 3 = (0011)2 avec les signaux LCD_RW=0, LCD_RS = 0 et LCD_E = 1 pendant 240 ns soit 12 cycles
dhorloge.
7. Attendre 40 us ou plus soit 2000 cycles dhorloge avec LCD_E = 0
8. Envoyer sur SF_D<11 :8> = 2 = (0010)2 avec les signaux LCD_RW=0, LCD_RS = 0 et LCD_E = 1 pendant 240 ns soit 12 cycles
dhorloge.
9. Attendre 40 us ou plus soit 2000 cycles dhorloge avec LCD_E = 0
10. Il faut signaler la fin de linitialisation
Etape 3 : Phase de configuration.
Cette tape passe par plusieurs squences qui font appelle plusieurs fonctions (Fonction set, Entry mode set, Display on/off, Clear display, voir
timing et tableaux si dessous de datachett de la carte spartan 3 E). Ces squences sont toutes bases sur le transfert de donnes 8 bits en deux fois
4 bits en utilisant le registre SF_D<11 :8> dont le protocole est le suivant:
Soit une donne sur 8 bit <D7 D6 D5 D4 D3 D2 D1 D0> afficher sur lcran de lafficheur,
1.
On commence par envoyer les 4 bits du poids fort <D7 D6 D5 D4 > sur le bus SF_D des 8 bits avec LCD_RS = 0 et LCD_RW = 0
pendant 1 ms
2.
Attendre 1 ms avec LCD_E=1 (criture des donnes)
3.
Attendre 1 us avec LCD_E=0 (arrter lcriture)
4.
Ensuite envoyer les 4 bits du poids faible < D3 D2 D1 D0> sur le bus SF_D
5.
Attendre 1 ms avec LCD_E=1 (criture des donnes)
6.
Attendre 1 us avec LCD_E=0 (arrter lcriture)
7.
Attendre 40 us.
Fonction set : configuration du LCD
LCD_RS et LCD_RW sont activs au niveau bas pendant le transfert des donnes En charge ensuite les bits SF_D<11:8> par la valeur (28)16 =
40 = (00101000)2 (selon le protocole ci-dessus, voir les tableaux ci-dessus) en commenant par les bits du poids fort puis les bits les plus du
poids faible tout en respectant le chronogramme reprsent ci-dessus. Ce qui donne les squences suivantes :
1. Chargement des 4 bits les plus forts dans SF_D <11:8> pendant 1 ms.
2. LCD_E est active au niveau haut pendant 1ms.
3. LCD_E est active au niveau bas pendant 1s qui est le temps entre la transmission des forts et des faibles bits.
4. Chargement des 4 bits les plus forts dans SF_D <11:8> pendant 1 ms.
5. LCD_E est active au niveau haut pendant 1ms.
6. LCD_E est active au niveau bas pendant 40s qui est le temps entre la transmission de deux donnes successives.
Entry mode set :
LCD_RS et LCD_RW sont active au niveau bas pendant le transfert des donnes. En charge ensuite les bits SF_D<11:8> par la valeur
(C)16 = 12 = (00001100)2 (voir tableaux ci-dessus : I/D=1 => Auto-incrmentation de ladresse, DB0=0 => dplacement dsactiv ) en
suivant la mme dmarche cit auparavant.

Display on/off :

65

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

LCD_RS et LCD_RW sont active au niveau bas pendant le transfert des donnes (voir tableaux ci-dessus). En chargement des bits
SF_D<11:8> par la valeur (C)16 = 12 = (00001100)2 (voir tableaux ci-dessus : I/D=1 => Auto-incrmentation de ladresse, DB0=0 =>
dplacement dsactiv ) en suivant la mme dmarche cit auparavant.
Clear Display :
LCD_RS et LCD_RW sont active au niveau bas pendant le transfert des donnes (voir tableaux ci-dessus). En charge ensuite les bits bits
SF_D<11:8> par la valeur (1)16 = 1 = (00000001)2 (voir tableaux ci-dessus) en suivant la mme dmarche cit auparavant.
Attendre une dure de 1,64 ms.

Etape 4 : Dfinir le premier emplacement dans la DDRAM.


Dans cette tape on va utiliser la fonction Set DD RAM Address qui est daprs le tableau des fonctions consiste charger les bits SF_D<11:8>
par la valeur (80)16 = 128 = (10000000)2 en suivant la mme mthode prdfini auparavant.
Etape 5 : Afficheur prs recevoir les donnes que vous souhaitez afficher sur lcran.
Dans cette tape vous chargez les bits SF_D<11:8> par la valeur que vous souhaitez afficher sur lcran en code ASCII qui correspond aux
caractres afficher dans la DDRAM en suivant le mme protocole prdfini prcdemment. Lcrire dans la DDRAM impose de mettre
LCD_RS active au niveau haut et LCD_RW active au niveau bas
Exemple : Affichage de la lettre F sur lcran :
Il faut charger les bits SF_D<11:8> par la valeur 01000110 =70 en dcimal selon le protocole cit ci-dessus.

Conception avec VHDL


Le contrle du lafficheur de la carte Spartan 3 E en utilisant le langage de description VHDL ncessite lutilisation de 3 machines tats finis et
une horloge de synchronisation clk ainsi quune reset:

66

Pr. Benaissa Amami, FST Tanger

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Machine tat pour linitialisation

Etat dbut

Etat one
Attendre 750000
cycles clk

init_Fin = 1

Etat fin
init_dbut = 1

Etat Three
LCD_E=0
Attendre 4.1ms
(205000 cycles
clk)

Etat Nine
LCD_E=0
Attendre 40 us
(2000 cycles clk)

Etat Four
LCD_E=1
Ecrire SF_D=0X3
Attendre 240 ns
(12 cycles clk)

Etat Eight
LCD_E=1
Ecrire SF_D=0X2
Attendre 240 ns (12
cycles clk)

Etat Seven
LCD_E=0
Attendre 40 us
(2000 cycles clk)

67

Pr. Benaissa Amami, FST Tanger

Etat two
Ecrire SF_D=0X3
LCD_E=1 Attendre
240 ns (12 cycles
clk)

Etat Six
LCD_E=1
Ecrire SF_D=0X3
Attendre 240 ns (12
cycles clk)

Etat Five
LCD_E=0
Attendre 100 us
(5000 cycles clk)

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E

Machine tat pour le transfert des bits

Etat fin
LCD_E0 = 0

Transfert_init = 1

Etat Plus_fort1
LCD_E0=0
SF_D0 = 4 bits MSB
Attendre 2 cycles clk

Etat Pause2
Attendre
(2000 cycles clk)

Etat Plus_fort2
LCD_E0=1
SF_D0 = 4 bits MSB
Attendre 2 cycles clk

Etat Plus_faible 2
LCD_E0=1
SF_D0 = 4 bits LSB
Attendre 2 cycles clk

Etat Plus_faible 1
LCD_E0=0
SF_D0 = 4 bits LSB
Attendre 2 cycles clk

68

Pr. Benaissa Amami, FST Tanger

Etat Pause1
Attendre 1 us
(50 cycles clk)

Apprendre VHDL avec des exemples : Application au contrle de la carte Spartan 3E


Machine tat global

Fin

Init
init_fin = 1

init_Fin = 1

Fonction set
LCD_RS = 0
Code acquis 0X28
Attendre 2000 cycles
clk

Char_T
Attendre 2000
cycles clk

Entry set
LCD_RS = 0
Code acquis 0X6
Attendre 2000
cycles clk

Char_S
Attendre 2000
cycles clk

Char_F
LCD_RS = 1
Code acquis 0X4
Attendre 2000
cycles clk

Set Addr
LCD_RS = 0
Code acquis 0X80
Attendre 2000
cycles clk

69

Pr. Benaissa Amami, FST Tanger

Set display
LCD_RS = 0
Code acquis 0X28
Attendre 2000
cycles clk

Pause
Attendre 82000
cycles clk

Clear display
LCD_RS = 0
Code acquis 0X01
Attendre 2000
cycles clk