You are on page 1of 34

Dcrire un circuit numrique avec VHDL

Cours N2

Variables boolennes

la base des systmes numriques on retrouve la logique boolenne.


Dans un systme numrique, tous les signaux sont effectivement des variables
boolennes.
Une variable boolenne peut prendre une seule de deux valeurs: vrai ou faux.
On peut interprter ces deux valeurs de diffrentes faons selon le contexte.
valeur
logique
vrai
faux

quivalent
numrique
1
0

ex. : lampe

ex : tension

ex : alarme

allume
teinte

leve
basse

active
dsactive

Fonctions boolennes, symboles et tables de vrit

Il y a trois fonctions boolennes de base


linversion
le ET logique; et,
le OU logique.

Plusieurs fonctions peuvent tre drives de ces trois fonctions de base, comme
le NON-OU, le NON-ET, le OU-exclusif et lquivalence.

Diffrentes portes logiques

Un exemple de design

Un comit compos de quatre personnes a besoin dun mcanisme de vote


secret pour les amendements sur la constitution du comit. Un amendement
est approuv si au moins 3 personnes votent pour.
Concevoir un circuit logique qui accepte 4 entres reprsentant les votes. La
sortie du circuit doit indiquer si lamendement est accept.

Donner la table de vrit, lquation et le circuit logique


#

vote1 (A)

vote2 (B)

vote3 (C)

vote4 (D)

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1

amendement
approuv (F)
0
0
0
0
0
0
0
1
0
0
0
1
0
1
1
1

quivalence entre les trois reprsentations

F = A' BCD + AB' CD + ABC ' D + ABCD'+ ABCD


= A' BCD + ABCD + AB' CD + ABCD + ABC ' D + ABCD + ABCD'+ ABCD
= BCD ( A'+ A) + ACD ( B'+ B) + ABD(C '+C ) + ABC ( D'+ D)
= BCD (1) + ACD(1) + ABD(1) + ABC (1)
= BCD + ACD + ABD + ABC

Langages de description matrielle

Pour dcrire un circuit logique, les schmas sont peu adquats.


Limite aux circuits les plus simples.
Il est difficile de dessiner un circuit complexe avec un schma de portes logiques. Il
est encore plus difficile de le modifier.
Un simple changement dans une quation boolenne du circuit se rpercute par une
grande quantit de connexions corriger.
Il est difficile, voire impossible, dutiliser des variables en guise de paramtres dun
circuit reprsent par un schma.

Les langages de description matrielle (Hardware Description Language HDL)


ont vu le jour au dbut des annes 1980 lorsque la complexit des circuits
concevoir a rendu impossible lutilisation exclusive de schmas.
Les avantages des HDL par rapport aux schmas sont :
les HDL permettent de dcrire des systmes complexes complets;
les HDL favorisent la dcomposition en modules paramtrables;
les HDL facilitent ltablissement de spcifications et dinterfaces clairement
dfinies;
les HDL normalisent lchange dinformations.

Langages de description matrielle

Les HDL peuvent servir trois choses :


la modlisation de circuits (surtout numriques);
la description de circuits en vue de leur synthse (i.e. leur ralisation matrielle); et,
la documentation de circuits.

Les deux HDL de loin les plus populaires sont Verilog et VHDL.
Verilog ressemble un peu C, et VHDL ressemble ADA.
Les deux langages sont relativement faciles apprendre, mais difficiles
matriser.
VHDL est plus vaste, bien que plusieurs des particularits pour lesquelles Verilog
na pas dquivalent soient rarement utilises.
Quand on connat lun des deux langages, il est relativement ais de passer
lautre.
Un troisime langage, SystemC, est populaire pour la modlisation plus haut
niveau.
8

VHDL

Lacronyme VHDL signifie Very High Speed Integrated Circuit (VHSIC) Hardware
Description Language (HDL).
VHDL est un langage de programmation complet. Le langage a t dvelopp
pour le compte du gouvernement amricain pour documenter la conception
dASIC. Il est fortement inspir du langage ADA.
Rapidement, des simulateurs de VHDL sont apparus, puis des synthtiseurs
capables de traduire un programme VHDL en une liste dinterconnexions entre
des portes logiques (netlist) pouvant tre ralise sur un ASIC.
Le langage VHDL est normalis par lIEEE. La premire norme remonte 1987.
Des mises jour ont eu lieu en 1993, 2000, 2002 et 2008. La norme plus rcente
est prsentement mal supporte par les outils de conception.

Circuit combinatoire en VHDL

Entit: interface avec le monde extrieur


Architecture: partie dclarative et corps
Principe de la concurrence
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity add3bits is
port (
Cin : in std_logic;
X : in std_logic;
Y : in std_logic;
Cout : out std_logic;
S : out std_logic
);
end add3bits;
architecture flotDeDonnees of add3bits is
signal T1 : std_logic;
signal T2 : std_logic;
signal T3 : std_logic;
begin
S <= T1 xor Cin;
Cout <= T3 or T2;
T1 <= X xor Y;
T2 <= X and Y;
T3 <= Cin and T1;
end flotDeDonnees;

10

Trois styles de description dun circuit

noncs concurrents
Assignations de signaux concurrentes, choisies et conditionnelles
Instanciations de composantes
Processus

Style de description du circuit


Par flot de donnes
Structurale
Comportementale

11

Description par flot de donnes

Le modle dun circuit numrique par flot de donnes dcrit sa fonction sans ncessairement dfinir
sa structure. En gnral, cela signifie que les valeurs des signaux et ports du circuit sont tablies par
des assignation concurrentes de valeurs (concurrent signal assignment).
Pour les circuits combinatoires, les assignations concurrentes des signaux utilisent souvent des
oprateurs logiques qui sont des mots cls du langage: and, or, nand, nor, xor, xnor, not. On peut
utiliser des parenthses pour faire respecter la prsance requise dans les expressions.

12

Description par flot de donnes


library ieee;
use ieee.std_logic_1164.all;
entity combinatoire1 is
port (
A : in std_logic;
B : in std_logic;
C : in std_logic;
F : out std_logic
);
end combinatoire1;
architecture flotDeDonnees1 of combinatoire1 is
begin
F <= not(A and (B xor not(C)));
end flotDeDonnees1;

architecture flotDeDonnees2 of combinatoire1 is


signal entree : std_logic_vector(2 downto 0);
begin
entree <= (A, B, C);
with entree select
F <=
'1' when "000",
'1' when "001",
'1' when "010",
'1' when "011",
'0' when "100",
'1' when "101",
'1' when "110",
'0' when "111",
'0' when others;
end flotDeDonnees2;

architecture flotDeDonnees3 of combinatoire1 is


begin
F <= '1' when (A = '0' or B /= C) else '0';
end flotDeDonnees3;

13

Description structurale

Un circuit numrique peut tre dfini par sa structure, c'est--dire par un


assemblage de blocs.
Une description structurale correspond une description par schma, o les
instanciations de composantes et leurs interconnexions sont numres avec
du texte.
Une description structurale est approprie pour relier entre eux diffrents soussystmes dun systme numrique.
En gnral, il est prfrable dutiliser un diteur de schma pour dcrire un tel
circuit, et laisser un outil gnrer automatiquement le code VHDL structural.

14

Description structurale
library ieee;
use ieee.std_logic_1164.all;
entity combinatoire1 is
port (
A : in std_logic;
B : in std_logic;
C : in std_logic;
F : out std_logic
);
end combinatoire1;
architecture structurale of combinatoire1 is
component INV -- inverseur
port (I : in std_logic; O : out std_logic);
end component;
component NAND2
port (I0, I1 : in std_logic; O : out std_logic);
end component;
component XOR2
port (I0 : in std_logic; I1 : in std_logic; O : out std_logic);
end component;

entity INV is
port (I : in std_logic; O : out std_logic);
end INV;
architecture arch of INV is
begin
O <= not I;
end arch;
entity NAND2 is

entity XOR2 is

signal NET18 : std_logic;


signal NET37 : std_logic;
begin
U1 : NAND2 port map(I0 => NET37, I1 => A, O => F);
U2 : XOR2 port map(I0 => NET18, I1 => B, O => NET37);
U3 : INV port map(I => C, O => NET18);
end architecture structurale;

15

Description comportementale

En VHDL, la description comportementale dun systme numrique est faite


laide dnoncs similaires ceux dun langage procdural comme C et Java,
incluant les structures de condition et de rptition.
La possibilit dutiliser une description comportementale est un outil trs
puissant aux concepteurs de circuits numriques. En effet, il est alors possible
dabstraire le comportement du circuit un trs haut niveau, et donc de dfinir
un systme complexe en peu de temps, de faon concise, paramtrable et
facilement modifiable.
Cependant, comme une description comportementale peut prendre multiples
formes, il faut garder en tte la nature du circuit dsir et linventaire de
composantes matrielles disponibles pour sassurer que la description puisse
tre synthtise en un circuit de complexit acceptable.
Les descriptions comportementales en VHDL se font laide de lnonc
process lintrieur dune architecture. Un processus dcrit une partie du
circuit qui sexcute de faon concurrente dautres processus et des
assignations concurrentes de signaux.
16

Description comportementale porte ET, ex. 1

library ieee;
use ieee.std_logic_1164.all;
entity porteET4 is
port (
I : in std_logic_vector(3 downto 0);
F : out std_logic
);
end porteET4;
architecture flotDeDonnees of porteET4 is
begin
F <= I(3) and I(2) and I(1) and I(0);
end flotDeDonnees;

architecture comportementale of porteET4 is


begin
process (I)
variable sortie : std_logic;
begin
sortie := '1';
for k in 3 downto 0 loop
sortie := sortie and I(k);
end loop;
F <= sortie;
end process;
end comportementale;

17

Description comportementale porte ET, ex. 2


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity porteET is
generic (
W : positive := 8 -- le nombre d'entres de la porte ET
);
port (
I : in std_logic_vector(W - 1 downto 0);
F : out std_logic
);
end porteET;
architecture comportementale of porteET is
begin
process (I)
variable sortie : std_logic;
begin
sortie := '1';
for k in W - 1 downto 0 loop
sortie := sortie and I(k);
end loop;
F <= sortie;
end process;
end comportementale;

18

VHDL: quelques dtails


Espaces, littraux, commentaires

Il ny a pas de diffrence entre les espaces, tabulations et retours de chariot,


prsents seuls ou en groupe.
Le langage nest pas sensible la casse.
Littraux:
Un littral compos dun caractre unique est plac entre apostrophes : a, 5.
Un littral compos dune chane de caractres est plac entre guillemets :
"bonjour", "123ABC".
Un littral numrique peut tre spcifi avec sa base, avec le format
base#chiffres[.chiffres]#[exposant], o les crochets indiquent des lments
facultatifs. La base doit tre entre 2 et 16, inclusivement. Par exemple, les nombres
suivants ont tous la mme valeur : 10#33# = 10#3.3#E1 = 2#10001# = 16#21# =
7#45#.
Un littral compos de bits peut tre exprim en bases 2, 8 ou 16, avec les
spcificateurs de base B, O et X, respectivement : B"11111111", O"377", X"FF".

Tout texte plac aprs deux tirets et jusqu la fin dune ligne est un
commentaire, ce qui est semblable au // de C. Il ny a pas de commentaires en
bloc (/* */) en VHDL.
19

VHDL: quelques dtails


Objets

Ici, objet na pas le mme sens que dans un langage orient objet.
Il y a quatre catgories dobjets en VHDL :
constant (et generic) : peut contenir une valeur unique qui ne change pas; un objet
generic est une constante spciale permettant dappliquer un paramtre une
entit lors de son instanciation;
variable: peut contenir une valeur temporaire; les objets variable sont utiles pour
stocker des valeurs intrimaires dans les calculs;
signal (et port) : peut contenir une liste de valeurs dans le temps; un objet signal
correspond en gnral un fil dun circuit; un port dune entit est implicitement un
signal pour cette entit;
file: un objet dans lequel on peut crire et lire des valeurs, et qui correspond un
fichier du systme dexploitation.

Lors de la dclaration dun objet, on spcifie sa catgorie, son identificateur et


son type. On peut aussi lui assigner une valeur initiale.

20

VHDL: quelques dtails


Identificateurs

Un identificateur de base lgal est compos de lettres, chiffres et/ou du


soulignement.
Le premier caractre doit tre une lettre, le dernier ne peut pas tre le
soulignement, et on ne peut utiliser deux soulignements de suite.
Un identificateur ne peut pas tre lun des mots rservs du langage.

21

VHDL: quelques dtails


Types prdfinis
catgorie

scalaires

type
ou sous-type
boolean
bit

source
de la dfinition
type prdfini
type prdfini

character

type prdfini

integer
natural
positive

type prdfini
sous-type prdfini
sous-type prdfini

real

type prdfini

valeurs
FALSE et TRUE
0 et 1
256 caractres de la norme ISO 88591, avec des abrviations reconnues et
certaines qui sont propres VHDL
Les 128 premiers sont les caractres
ASCII.
plage minimale de 231 + 1 231 1
0 231 1
1 231 1
typiquement
1.7014111E308 1.7014111E308
U : valeur inconnue, pas initialise
X : valeur inconnue force
0 : 0 forc

std_logic

Package
std_logic_1164

1 : 1 forc
Z : haute impdance (pas connect)
W : inconnu faible
L : 0 faible
H : 1 faible

bit_vector
string
std_logic_vector
composs

unsigned
signed

type prdfini
type prdfini
Package
std_logic_1164
Package
numeric_std
Package
numeric_std

- : peu importe (dont care)


tableau de bit
tableau de character
tableau de std_logic
tableau de std_logic, interprt
comme un nombre binaire non sign
tableau de std_logic, interprt
comme un nombre binaire sign
en complment deux

22

VHDL: quelques dtails


Oprateurs
catgorie

oprateurs

logique

and, or, nand, nor, xor,


xnor, not

relation

=, /=, <, <=, >, >=

dcalage

sll (dc. logique gauche),


srl (dc. logique droite),
sla (dc. arithmtique gauche),
sra (dc. arithmtique droit),
rol (rotation gauche),
ror (rotation droite)

arithmtique

+, -, *, /,
abs (valeur absolue),
mod (modulo),
rem (reste)
** (exponentiation)

concatnation

&

type de
loprande de
gauche

type de
loprande de
droite

type de
lexpression

bit, boolean
scalaire ou tableau

tableau de bit
ou boolean

type
numrique

integer

type
numrique

boolean

comme
loprande de
gauche

type
numrique

integer
tableau ou type numr

tableau
23

Un exemple de design

Un comit compos de quatre personnes a besoin dun mcanisme de vote


secret pour les amendements sur la constitution du comit. Un amendement
est approuv si au moins 3 personnes votent pour.
Concevoir un circuit logique qui accepte 4 entres reprsentant les votes. La
sortie du circuit doit indiquer si lamendement est accept.

24

Donner la table de vrit, lquation et le circuit logique


#

vote1 (A)

vote2 (B)

vote3 (C)

vote4 (D)

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1

amendement
approuv (F)
0
0
0
0
0
0
0
1
0
0
0
1
0
1
1
1

quivalence entre les trois reprsentations

F = A' BCD + AB' CD + ABC ' D + ABCD'+ ABCD


= A' BCD + ABCD + AB' CD + ABCD + ABC ' D + ABCD + ABCD'+ ABCD
= BCD ( A'+ A) + ACD ( B'+ B) + ABD(C '+C ) + ABC ( D'+ D)
= BCD (1) + ACD(1) + ABD(1) + ABC (1)
= BCD + ACD + ABD + ABC

25

Code VHDL
une solution possible
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity vote is
port (
lesvotes: in std_logic_vector(3 downto 0);
approbation : out std_logic
);
end vote;
-- table de vrit rduite
architecture flotdonnees1 of vote is
begin
with lesvotes select
approbation <=
'1' when "0111",
'1' when "1011",
'1' when "1101",
'1' when "1110",
'1' when "1111",
'0' when others;
end flotdonnees1;

26

Code VHDL
une Bascule D

Bascule D sans signal dinitialisation


Bascule D avec signal dinitialisation
un comportement asynchrone;
un comportement synchrone.

loquet D (D-latch)

VHDL: quelques dtails


Objets
Ici, objet na pas le mme sens que dans un langage orient objet.
Il y a quatre catgories dobjets en VHDL :
constant (et generic) : peut contenir une valeur unique qui ne
change pas; un objet generic est une constante spciale permettant
dappliquer un paramtre une entit lors de son instanciation;
variable: peut contenir une valeur temporaire; les objets variable sont
utiles pour stocker des valeurs intrimaires dans les calculs;
signal (et port) : peut contenir une liste de valeurs dans le temps; un objet
signal correspond en gnral un fil dun circuit; un port dune entit est
implicitement un signal pour cette entit;
file: un objet dans lequel on peut crire et lire des valeurs, et qui correspond
un fichier du systme dexploitation.

VHDL: quelques dtails


Dfinition de nouveaux types
avec le mot cl type, et des sous-types avec le mot cl subtype .
Type compos record :
type entiers_sous_20 is range 0 to 19;
type matrice_reelle_1_par_10 is array (1 to 10) of real;
type tableauSLV3 is array (natural range <>) of std_logic_vector(2 downto 0);
constant vecteurs : tableauSLV3 :=
("000", "001", "010", "011", "100", "101", "110", "111");
type nom_de_mois is (janvier, fvrier, mars, avril, mai, juin, juillet, aout, septembre,
octobre, novembre, dcembre);
type date is record
jour : integer range 1 to 31;
mois : nom_de_mois;
anne : positive range 1 to 3000;
end record;
constant confederation : date := (1, juillet, 1867);

VHDL: quelques dtails


Structures de rptition et de slection
for
for identificateur in gammeDeValeurs loop
noncs;
end loop;

while
while ( condition de rptition ) loop
noncs;
end loop;
lnonc next interrompt le flot de la boucle et passe litration suivante, et
l nonc exit termine la boucle compltement .

VHDL: quelques dtails


Structures de rptition et de slection
On peut utiliser deux types de structures de slection lintrieur dun processus :
if-then-else et case,
-- nonc if-then-else
if ( condition ) then
noncs;
elsif ( condition ) then
noncs;
else
noncs;
end if;
-- nonc case
case ( expression ) is
when ( choix unique, plusieurs spars par |, ou gamme de valeurs ) =>
noncs;
when ( choix unique, plusieurs spars par |, ou gamme de valeurs ) =>
noncs;
when others =>
noncs;
end case;

VHDL: quelques dtails


Sous-programmes : fonctions et procdures
Fonctions:
function porteET(V: std_logic_vector) return std_logic is
variable resultat : std_logic := '1';
begin
for k in V'range loop
resultat := resultat and V(k);
end loop;
return resultat;
end;

VHDL: quelques dtails


Package
En VHDL, un package est un fichier contenant des dclarations pouvant tre
utiliss dans dautres fichiers.
Un package contient deux parties : une dclaration et un corps.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
package NUMERIC_STD is
type UNSIGNED is array (NATURAL range <>) of STD_LOGIC;
type SIGNED is array (NATURAL range <>) of STD_LOGIC;
function "abs" (ARG: SIGNED) return SIGNED; -- autres declarations
end NUMERIC_STD;
package body NUMERIC_STD is
function "abs" (ARG: SIGNED) return SIGNED is
variable RESULT: SIGNED(ARG_LEFT downto 0);
begin
if ARG'LENGTH < 1 then return NAS; end if;
return RESULT;
end "abs";
-- autres dfinitions ...
end NUMERIC_STD;

VHDL: quelques dtails


Library
En VHDL, une librairie (library) est un endroit o le compilateur entrepose
linformation ncessaire pour un design en particulier ;
Le nom de la librairie par dfaut est work, mais les outils de design suivent
souvent leur propre convention. Par exemple, avec Active-HDL, le nom de la
librairie par dfaut est le mme que le nom du design.

You might also like