Vous êtes sur la page 1sur 20

Module Technologies des Systèmes Embarqués CI-GBM2, S1

Module Technologies
des Systèmes Embarqués
Chapitre -4-
2ème année Cycle Ingénieur en GBM,

Préparé par : Semestre 1 Langage de Description HW


Slim Ben Othman &
Ahmed Karim Ben Salem

Objectifs du chapitre

oConnaître les concepts de base de la description de matériel en VHDL


oUtiliser le langage VHDL pour décrire des circuits logiques simples
oSimuler et synthétiser des circuits logiques décrits en VHDL.
Plan :
oIntroduction au VHDL
oStructure du langage INTRODUCTION AU VHDL
oTypes en VHDL
oZone concurrente / Zone séquentielle
oHiérarchisation
oDescription de circuits logiques
oVHDL TestBench
(Chapitre II) Cours Technologies des Systèmes Embarqués, CIGBM2-S1 3

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 1
Module Technologies des Systèmes Embarqués CI-GBM2, S1

VHDL, c’est quoi? VHDL, Pourquoi ?


• VHDL est un langage de description de matériel (HDL) utilisé pour la

V • VHSIC modélisation, la synthèse et la vérification de circuits numériques.


• (Very High Speed Integrated Circuit) • Il a été développé dans les années 1980 par le ministère de la Défense des
États-Unis et a été mis à jour plusieurs fois.
• 1987 : VHDL devient un standard IEEE (IEEE 1076).

H
• 1993 : Publication de VHDL-93, une mise à jour majeure introduisant des fonctionnalités
améliorées. compatible avec la synthèse de circuit
• Hardware • 2002 : VHDL-2002 est publié avec des améliorations de la convivialité et la compatibilité
avec VHDL-93.
• IEEE Standard 1164 rajoute la notion de forces sur les signaux et est souvent appelé MVL9

D
(multivalued logic, nine values).
• IEEE 1076.3 (Numeric Standard) pour la synthèse.
• IEEE 1076.4 : VITAL initiative (VHDL Initiative Toward ASIC Libraries) Pour la génération de modèles
• Description de timing.
• Depuis, VHDL continue d'évoluer avec des versions ultérieures.

L • Language • Les premiers outils de synthèse en 1995

Domaines de description Niveaux d’abstraction

• Le langage VHDL est assez complexe car il prétend à un vaste domaine


d'applications.
• Même si la syntaxe d'une description VHDL possède une forme informatique, sa
sémantique est électronique et il est très important de conserver le point de Synthèse Comportemental
vue d'un électronicien lors de l'écriture de descriptions de circuits. Comporteme
ntale

VHDL
• Les systèmes VHDL sont orientés vers :
• la simulation (par exemple: Synopsys et Green Mountain VHDL), RTL
• la synthèse ou la paramétrisation de circuits (par exemple des FPGA).
Synthèse
Logique

• VHDL est utilisé pour


Logique
• Décrire des circuits numériques
Placement/
• Décrire des machines à états Routage
• Préparer des signaux de test pour simuler cette écriture Layout

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 2
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Exemple de Code

• Déclaration des bibliothèques:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
STRUCTURE DU VHDL • Commentaires : use ieee.std_logic_unsigned.all;

-- Circuit décodeur
-- Deux vers quatre

Exemple de Code Exemple de Code

• Déclaration de l’entité du démultiplexeur : • Déclaration de l’architecture du démultiplexeur:

DECOD2_4 entity DECOD2_4 is architecture DESCRIPTION of DECOD2_4 is


port( begin
IN0: in std_logic; D0 <= (not(IN1) and not(IN0));
IN1: in std_logic; D1 <= (not(IN1) and IN0);
D0, D1, D2, D3: out std_logic D2 <= (IN1 and not(IN0));
); D3 <= (IN1 and IN0);
end DEMUX2_4; end DESCRIPTION;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 3
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Introduction Domaine concurrent et séquentiel

Il existe 5 catégories d’unité de conception • Description d’un système matériel


• L’entité (mot clé entity) • description d’action concurrentes,
• Décrit un système vu de l’extérieur (boîte noire) • description d’action en séquence,

• L’architecture (mot clé architecture)


• Décrit l’intérieur (le fonctionnement, le comportement) de la boîte noire. • Deux jeux d’instructions en VHDL
• La configuration (mot clé configuration) • Instructions concurrentes : elles s’exécutent en même temps,
• Instructions séquentielles : elles s’exécutent les une après les autres
• La déclaration de paquetage (mot clé package)
• Le corps de paquetage (mot clé package body)

Types d’objets Les opérateurs

• Les objets d’un programme VHDL sont tous typés. • Opérateur logique :
• Avant toute utilisation d’une constante, d’une variable ou d’un signal, il faut les and, or, nand, nor, xor, xnor, sll, srl, sra, rol, ror
déclarer. • Opérateur de comparaison :
=, /=, <, <=, >, >=
• Opérateur d’addition :
• La déclaration des objets s’effectue uniquement dans la partie déclarative +, -, &
du programme. • Opérateur mathématique :
*, /, mod, rem
• Opérateur de signe :
-
• Opérateur divers :
**, abs, not

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 4
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Entité Entité

• L'entité définit les ports (vue externe) et leur mode (in, out, inout, buffer) • Exemple
• Paramétrer le modèle (paramètres génériques)
• Syntaxe: entity DECOD2_4 is
generic(
data_width: integer :=2
entity nom_de_l_entite is );
{generic(liste_des_parametres)} port(
• Modes:
{port(liste_des_port_avec_leur_mode)} Data_in: in std_logic_vector(data_width-1 downto 0);
end {nom_de_l_entite} Enable: in std_logic;
Data_out: out std_logic_vector((2**data_width)-1 downto 0)
);
end DECOD2_4;

Architecture Architecture

• Définition de signaux et d'autres objets internes • Exemple


• Description du fonctionnement ou de la structure de l’entité à l’aide
d’instructions concurrentes entity Bascule is
port(
• Syntaxe:
R,S: in std_logic;
Q, QB: out std_logic architecture behav of Bascule is
); signal Q_int, QB_int : std_logic;
entity nom_de_l_entite is end Bascule; begin
architecture nom_de_l_architecture of nom_de_l_entite is architecture behav of Bascule is Q_int <= R nand Qb_int;
{partie déclarative} begin QB_int <= Q_int nand S;
begin Q <= R nand Qb; Q et QB protégées Q<= Q_int;
{suite d’instructions concurrentes} QB <= Q nand S; en lecture QB <= QB_int;
end nom_de_l_architecture; end behav; end behav;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 5
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Déclaration de Types

• Tout objet en VHDL doit être typé.


• Un type définit :
• l'ensemble des valeurs que l'on peut affecter à l'objet
• l'ensemble des opérations disponibles sur l'objet
• VHDL possède les types:
TYPES EN VHDL • scalaires dont la valeur est constituée d'un seul élément
• composites dont la valeur comprend plusieurs éléments
• accès ou pointeurs
• Fichier

Type Scalaire Type Scalaire


énuméré
• Énuméré • Ce type déclare toutes les valeurs qu'un objet de ce type peut prendre.
type T_FEU is (ROUGE, ORANGE, VERT); type T_FEU is (ROUGE, ORANGE, VERT);
signal FEU : T_FEU; signal FEU : T_FEU;
• entier
type ETAT is (INIT, LECT, ECR, ATT);
signal COMPT : integer range 0 to 15;
• flottante • Les types ci-dessous sont des types prédéfinis
signal MASSE : REAL; -- de -1e38 à 1e38
type BOOLEAN is (FALSE, TRUE);
• physique qui est un entier avec l'unité correspondant (non synthetisable)
type BIT is ('0' , '1');

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 6
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Type Scalaire Type Scalaire


entier Logique à valeurs multiples
• C'est un type prédéfini • Il existe des signaux logiques à plusieurs états:
• 0, 1, haute impédance, don’t care, non déterminé, …
type integer is range -2_147_483_648 to 2_147_483_647 • Le type "std_logic" remplace le type "bit" pour permettre d’avoir 9 états
différents
• On peut définir un sous type :
• Utilisation de librairie IEEE.std_logic_1164
subtype nom_de_sous_type is type_de_base contraintes; • Exemple
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
subtype NATURAL is INTEGER range 0 to INTEGER'high
signal SORTIE, Q: std_logic;

SORTIE <= ‘Z’; -- haute impédance
Q <= ‘1’;

Type Scalaire Type Composite


Logique à valeurs multiples
Le type std_logic : • Deux types sont considérés : tableau et record
• ‘Au démarrage les signaux sont dans un état inconnu 'U'. • Un tableau est un ensemble d’éléments du même type
• 'X' indique un conflit, le signal est affecté d'un côté à '1' et d'un autre à '0'. • Pour un ensemble de std_logic, nous avons le type prédéfini std_logic_vector : on
définit la taille et l'ordre des éléments
• '0' et '1' correspondant aux valeurs booléennes du signal. signal BUS1 : std_logic_vector (7 downto 0);
• 'Z' correspond à l'état haute impédance. signal REG : std_logic_vector (0 to 31);
• 'W' est la valeur d'un signal relié à 2 résistances de tirage, une tirant à 0 et • On peut aussi définir un type tableau d’éléments composites
l'autre à 1.
type MEMO is array (15 downto 0) of std_logic_vector(7 downto 0);
• 'H' et 'L' sont des valeurs d'un signal relié respectivement à une résistance signal A,B : MEMO;
de tirage à 1 et à 0.
• '-' est un état indifférent. Utile pour décrire les tables de vérité.

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 7
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Type Composite Accès aux éléments

• Record : Ensemble d'éléments de types différents • A,B: std_logic_vector(15 downto 0);


• Accès direct:
type NAME is record
• A <=X"0FD4"
identifier : type_indication;
• A(3) <= ‘1’;
:
identifier : type_indication; • B(15) <= ‘0’;
end record; • Accès par tranches:
• A(15 downto 12) <= "1011";
type PAQUET is record • B(0 to 2) <= "111" ; -- erreur
mot_unique : std_logic_vector (7 downto 0);
data : std_logic_vector (23 downto 0); • A(10 downto 2) <= B(15 downto 7);
CRC : std_logic_vector( 5 downto 0);
num : integer range 0 to 1023;
end record;
signal paq_rec : PAQUET;

Accès aux éléments Accès aux éléments


Exemples
• Par agrégat SIGNAL a: STD_LOGIC;
• Notation positionnelle SIGNAL b: STD_LOGIC_VECTOR(3 DOWNTO 0);
• A(3 downto 1) <= ('0', '1', B(15)); SIGNAL c: STD_LOGIC_VECTOR(3 DOWNTO 0);
• B <= ('1','1',others => '0'); SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);
• Notation par nommage SIGNAL e: STD_LOGIC_VECTOR(15 DOWNTO 0);
• A <= (1 =>'1', 3 =>'1',others =>'0'); SIGNAL f: STD_LOGIC_VECTOR(8 DOWNTO 0);
• Par concaténation ……….
signal A,B,C,D : std_logic;
a <= ‘1’;
signal BYTE : std_logic_vector(7 downto 0);
b <= ”0000”; -- Base Binaire par défaut
signal Z_BUS,A_BUS : std_logic_vector(3 downto 0); c <= B”0000”; -- Base Binaire explicite
Z_BUS <= A & C & D & B; d <= ”0110_0111”; -- Utiliser ‘_’ pour augmenter la lisibilité
BYTE <= Z_BUS & A_BUS; e <= X”AF67”; -- Base Hexadecimale
f <= O”723”; -- Base Octale

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 8
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Accès aux éléments


Exemples
type MY_WORD is array (15 downto 0) of std_logic;
signal MEM_ADDR: MY_WORD;
MEM_ADDR(10 downto 5) <="101010";

type YOUR_WORD is array (0 to 15) of std_logic;


signal DATA_WORD: YOUR_WORD := “1101100101010110”;
ZONE CONCURRENTE
type Pixel is record
teinte: std_logic_vector (7 downto 0);
af: integer;
cd: Couleurs;
end record;
variable I4: Pixel;
I4.cd := Vert;

Zone concurrente Affectation Conditionnelle:


Instruction When
• Le corps de l'architecture est une zone concurrente: les instructions • Modifie l’état d’un signal suivant le résultat d’une condition logique entre
s'exécutent toutes en même temps (en parallèle) un ou des signaux, valeurs, constantes.
• Syntaxe:
<SIGNAL> <= <expression> when <condition>
[else <expression> when <condition>]
[else <expression>];
• Exemple:

B_DAT <= REG1 when ENA1='0'


else REG2 when ENA2='0'
else "ZZZZZZZZ" ;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 9
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Affectation Selective: Affectation Selective:


Instruction With Instruction With
• Permet d’affecter différentes valeurs à un signal, selon les valeurs prises
par un signal de sélection. with HEX select
• Syntaxe: LED<= "1111001" when "0001", --1
"0100100" when "0010", --2
with <SIGNAL_DE_SELECTION> select "0110000" when "0011", --3
<SIGNAL> <= <expression> when <valeur_de_selection>, "0011001" when "0100", --4
[<expression> when <valeur_de_selection>,] "0010010" when "0101", --5
<expression> when others; "0000010" when "0110", --6
• Exemple: "1111000" when "0111", --7
"0000000" when "1000", --8
"0010000" when "1001", --9
“1000000" when “0000", --0
“0110110" when others; --a,g,d

Zone Séquentielle

• En VHDL, une zone séquentielle existe dans laquelle une suite


d'instructions s’exécutent les unes après les autres.

• Cette zone se trouve dans les process, fonctions et procédures.

ZONE SÉQUENTIELLE

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 10
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Process Instructions Conditionnelles


• Process est une instruction concurrente complexe à écrire dans une architecture • Assignation conditionnelle : if
• Process définit une zone séquentielle
• Les différents process d'une architecture s'exécutent tous en parallèle if <condition> then
• Syntaxe de process : <instructions>;
[elsif <condition> then <instructions>;]
<etiquette_optionnelle> : process (liste de signaux) [else <instructions>;]
<Déclaration des variables ou signaux> end if ;
begin
<Description du process> • Exemple:
end process; if (RESET='1') then
• Un processus se déclenche à chaque changement d’état d’un de ses signaux d’activation,
SORTIE <= "0000";
s’exécute et se rendort jusqu’au prochain déclenchement. elsif (LOAD='1') then
• les modifications apportées aux valeurs de signaux par les instructions prennent effet à la fin SORTIE <= DIN;
du processus. end if;

Instructions Conditionnelles Instructions de Bouclage

• Assignation sélective : case • Couramment utilisées dans les descriptions destinées à la simulation,
• Les boucles doivent être considérées avec soin en synthèse, en s’assurant qu’elles ne risquent pas de
case <signal_de_slection> is provoquer la création de logique encombrante et superflue.
when <valeur_de_sélection> => <instructions>; • Boucle for :
[when others => <instructions>;]
end case; <etiquette> : for <variable_boucle> in <intervalle> loop
• Exemple <instructions>;
end loop;
case SEL is
when “000” => S1 <= E1; • Boucle while:
when “001” => S1 <= ‘0’;
when “010” | “011” => S1 <=’1’; <etiquette> : while <condition> loop
-- La barre | permet de réaliser un ou logique <instructions>;
when others => S1 <= ‘0’; end loop;
end case;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 11
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Instructions de Bouclage Instructions d’attente

• Utilisées uniquement dans les descriptions destinées à la


boucle1 : for indice in 7 downto 0 loop simulation,
if indice=7 then
d_bus(indice) <= databus(15);
• Elle s’utilise pour suspendre un process jusqu’un événement
else • wait until condition;
d_bus(indice) <= not d_bus(15- • wait until A=‘1 ’;
• wait until CLK’event and CLK=’1’;
indice); total:=15;
end if;
end loop;
i:=15; • wait for time expression;
boucle2 : while i>=0 loop • wait for 5 ns;
if compte(i) =’0’ then tot:= tot-1;
else tot:= tot-2; • wait on signal;
end if; • wait on A , B
i:= i-2;
end loop;

Exemples d’application Exemples d’application


case S is
when "00" => Z <= A;
entity MUX_4 is
if (( not S1 and not S0 )=’1’) then when "01" => Z <= B;
port (
Z <= A; when "10" => Z <= C;
S1, S0, A, B, C, D: in std_logic;
elsif (( not S1 and S0) = ‘1’) then when "11" => Z <= D;
Z: out std_logic);
Z <=B; -- ou when others => Z <= D;
end MUX_4;
elsif ((S1 and not S0) =’1’) then end case;
architecture behav_MUX_4 of MUX_4 is
Z <=C; Note : S est un signal std_logic_vector(1 downto 0)
begin S <= S1 & S0;
else
P1: process (S1, S0, A, B, C, D) - - la liste de sensibilité For I in 0 to 3 loop
Z <=D;
begin if S = I then
end if;
… Z <= Data(I);
end process P1; end if; Note : Data est un signal
end behav_MUX_4; std_logic_vector(3 downto 0)
end loop; Data <= D & C & B & A;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 12
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Affectation des signaux Affectation des signaux

• Dans une architecture (zone concurrente), l’affectation est immédiate.


• Dans un process (zone séquentielle) l’affectation est : Architecture CONCUR of EXEMPLE is Architecture SEQ of EXEMPLE is
• immédiate pour des variables signal Z, A, B, C, D : std_logic; signal Z, A, B, C, D : std_logic;
• retardée jusqu’à la fin du process pour des signaux begin begin
Z <= A and B; process (A, B, C, D)
Z <= C and D; begin
end CONCUR; Z <= A and B;
Z <= C and D;
Erreur multi sources
end process; -- la valeur retenue est
affectée maintenant
end CONCUR;

Affectation des signaux Affectation des signaux Le


processu
Process (A,B,M) A s se

Processus en exécution
Processus en exécution
begin réveille
Process () Y <= A;
begin SIG B
M <= B;
SIG <= '0'; Z <= M;
SIG <= '1'; end process; Y
SIG <= '0'; Le
end process; SIG processu
s se M
réveille
Z

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 13
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Les variables

• L'affectation se fait par le signe " := "


• Les variables ne sont déclarées que dans un process
• La valeur des variables est mise à jour dès l’exécution de l’instruction
d’affectation
• Les variables ne sont pas visibles à l’extérieur du process
HIÉRARCHISATION
• Les variables gardent leur valeur pour le réveil suivant

Hiérarchisation Déclaration du Component

• Conception d’un bloc et son utilisation dans un autre circuit: instantiation • Se fait dans la partie déclarative de l’architecture.
ou instantiation multiple • On utilise le mot clé « component »
• Exemple:
• Première étape: écrire l’entité et l’architecture du module
• Deuxième étape: introduire ce module au circuit appelant (ce module
s’appellera « component ») entity DEMI_ADD is component DEMI_ADD
port ( port (
• Troisième étape: instantiation du module A,B: in std_logic; A,B : in std_logic;
SUM,C: out std_logic); SUM,C: out std_logic);
end DEMI_ADD; end component;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 14
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Instantiation du component Exemple : Additionneur

• Utilisation du mot clé « port map »


• Exemple:

entity DEMI_ADD is
U1: DEMI_ADD
component DEMI_ADD port (
port map (A => SIG_A,
port ( A,B: in std_logic;
B => SIG_B,
A,B : in std_logic; SUM,C: out std_logic);
SUM => SOMME,
SUM,C: out std_logic); ❶ C => RETENUE);
end DEMI_ADD;
architecture COMPORT of DEMI_ADD is
end component;
begin
U1: DEMI_ADD ❷ SUM <= A xor B;
port map (SIG_A,SIG_B, SOMME, RETENUE); C <= A and B;
end COMPORT;

Exemple : Additionneur Exemple : Additionneur

architecture COMPORT of ADD_COMPLET is


component DEMI_ADD
port(
A,B : in std_logic;
SUM,C: out std_logic);
end component;
signal N1, N2, N3 : std_logic;
begin
entity ADD_COMPLET is ADD1: DEMI_ADD
port ( port map (A=>A, B=>B, SUM=>N1, C=>N2);
A,B,CIN : in std_logic; ADD2: DEMI_ADD
SUM,COUT : out std_logic); port map (A=>N1, B=>CIN, SUM=>SUM, C=>N3);
end ADD_COMPLET; COUT <= N2 or N3;
end COMPORT ;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 15
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Circuits Combinatoires :
Restrictions dans la description
• Un circuit combinatoire donne toujours les mêmes sorties quand l’entrée
est la même.
• Un process est combinatoire si les conditions suivantes sont toutes
respectées :
• le process comporte une liste de sensibilité
DESCRIPTION DE CIRCUITS LOGIQUES • la liste de sensibilité comprend tous les signaux lus
• tous les signaux doivent être affectés quelle que soit les entrées (Attention dans un
"if" ou dans un "case")
• toutes les variables doivent être affectées avant d'être lues

Circuits Combinatoires : Circuits Combinatoires :


Exemple 1 Exemple 2

Architecture COMB1 of NONET is Architecture COMB3 of NONET is


begin begin
--équation logique --Traduction de la table
S <= A nand B; ❶ --de vérité dans un process
end COMB1; process (A,B)
begin
Architecture COMB2 of NONET is if A='1' and B='1' then
begin S <= '0';
--Traduction de la table else
S <= '0' when (A='1' and B='1‘) S <= '1';
else '1'; end if;
end COMB2; end process; ❸
❷ end COMB3;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 16
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Architecture AVEC_caseF of CIRCUIT is Architecture AVEC_When of CIRCUIT is


signal A,S : std_logic_vector (2 downto 0); signal A,S : std_logic_vector (2 downto 0);
Circuits Combinatoiresbegin
: Begin Circuits Séquentiels :
Exemple 2 process (A) S <= "000" when A= "000" Restrictions dans la description
Begin else "001" when A= "001"
case A is else "011" when A= "010" • Un process comporte un point de mémorisation si au moins une des
when "000" => S <= "000" else "010" when A= "011"
Architecture AVEC_IF of CIRCUIT is
when "001" => S <= "001" else "110" when A= "100" conditions suivantes est vérifiée :
signal A,S : std_logic_vector (2 downto 0);
begin
when "011" => S <= "010"

else "111" when A= "101"
else "101" when A= "110"
• la liste de sensibilité ne comprend pas tous les signaux lus
process (A)
begin
end case;
❷ else "100" when A= "111"
❹ • les signaux ne sont pas affectés quelle que soit la branche
end process; else "000";
if A = "000" then S <= "000";
end AVEC_case; Affectation avec case end AVEC_When; Affectation sélective • une variable est lue avant d'être affectée
elsif A ="001" then S <= "001";
elsif ...
end if; Architecture AVEC_With of CIRCUIT is Architecture Direct of CIRCUIT is
end process; ❶ signal A,S : std_logic_vector (2 downto 0); signal A,S : std_logic_vector (2 downto 0);
Begin
end AVEC_IF; Affectation avec if Begin
with A select S(2) <= (A(2) and not A(1) and not A(0))
S <= "000" when "000" , or (A(2) and not A(1) and A(0))
"001" when "001" , or(A(2) and A(1) and not A(0)) or
"011" when "010" , (A(2) and A(1) and A(0));
"110" when "100" , S(1) <= (not A(2) and A(1) and not A(0))
❸ … ❺ or (not A(2) and A(1) and A(0)) or
Affectation sélective "000" when others; (A(2) and not A(1) and not A(0))
Affectation non or (A(2) and not A(1) and A(0));
end AVEC_With;
conditionnelle
… 65
end Direct;

Circuits Séquentiels : Circuits Séquentiels :


Bascule à verrouillage (latch) Bascule synchrone

entity L is architecture A of L is entity R is architecture A of R is


port ( begin port ( begin
process (CLK)
D,G : in std_logic; process (D,G) D,CLK : in std_logic;
begin
Q : out std_logic); begin Q : out std_logic); if (CLK’event and CLK='1‘) then
end L; if G='1' then end R; Q <= D;
Q <= D; end if;
end if; end process;
end R;
end process;
end A;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 17
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Circuits Séquentiels : Circuits Séquentiels :


Bascule synchrone avec Set/Reset asynchrone Bascule synchrone avec Set/Reset synchrone

entity Ris architecture A of R is entity Ris architecture A of R is


port ( begin port ( begin
D,CLK,SET : in std_logic; process (CLK, SET) D,CLK,SET : in std_logic; process (CLK)
Q : out std_logic); begin Q : out std_logic); Begin
end R; if (SET ='1') then end R; if (CLK’event and CLK='1‘) then
Q<= '1'; if (SET ='1') then
elsif (CLK’event and CLK='1‘) then Q<= '1';
Q <= D; else
end if; Q <= D;
end process; end if;
end R; end if;
end process;
end R;

Circuits Séquentiels : Circuits Séquentiels :


Exemple : Registre tampon 3 bits Exemple : Registre tampon 3 bits

architecture A of REG is
begin
TAMPON : process (H,RAZ)
entity Reg is begin
port ( if RAZ = '0' then
E : in std_logic_vector(2 downto 0); S <= "000";
H,RAZ : in std_logic; elsif (H’event and H = ‘1’) then
S : out std_logic_vector(2 downto 0)); S <= E;
end Reg; end if;
end process;
end A;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 18
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Remarques Remarques

• Les instructions suivantes sont interdites dans une zone concurrente • Un seul « if » dans un process synchrone
A <= not A; process (CLK)
CMPT <= CMPT + 1; begin
REG <= REG (0) & REG(7 downto 1); if (CLK'event and CLK='1‘) then
process (CLK) Q <= D;
• On utilise
…... un process synchronisé sur un front begin end if;
if (CLK'event and CLK='1‘) then end process;
process (CLK) Q <= D;
begin end if; process (TOTO)
if rising_edge(CLK) then if (TOTO=‘1’) then if (TOTO=‘1’) then
A <= not A; … …
-- CMPT <= CMPT + 1; end if; end if;
end if; end process; end process;
end process;

Présentation

• Testbench = entité VHDL qui applique un stimuli (vecteur d’entrées) sur le


circuit à tester (the Design Under Test (DUT)) et (optionellement) verifie
les sorties attendues.
• Les résultats peuvent être générés sous forme graphique ou textuelle.
• Portabilité : peut être utilisé sur différentes plateformes de simulation
VHDL TESTBENCH
Sorties Observées
Process
Design Under
Générateur de Test (DUT)
Stimuli

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 19
Module Technologies des Systèmes Embarqués CI-GBM2, S1

Déroulement de simulation Exemple de TestBench

• La notion de temps ne s'utilise que pour spécifier l'ordre des événements. entity addit is
port ( VHDL Module
• Les seuls moyens d'avancer dans le temps sont : a,b,c: in bit;
• par un changement d'un signal en entrée s,r: out bit);
end addit; entity demo1 is
• par la commande wait for temps architecture addit of addit is end demo1; VHDL
• par la commande after temps begin architecture demo1 of demo1 is TestBench
s <= a xor b xor c; signal asig,bsig,csig,sum,carry : bit;
• sinon, les signaux sont tous stables et les process dorment tous. r <= ((a and b) or (c and (a xor b))); begin
end addit; asig <= not asig after 100 ns;
bsig <= not bsig after 200 ns;
csig <= not csig after 400 ns;
ad1: entity work.addit
port map (asig,bsig,csig,sum,carry);
end demo1;

Exemple de TestBench

• Quelques autres manières de spécifier des valeurs


sur les entrées : process
begin
s_en<='0';
s_d0<='1';
wait for 40 ns;
s_en<='1';
wait for 40 ns;
..
end process;

process
• Ou encore: begin
wait for 5 ns;
s_en<='0','1' after 10 ns,'0' after 18 ns, '1' after 25 ns;
wait;
end process;

Support prepare par : Slim Ben Othman, Ahmed Karim Ben Salem 20

Vous aimerez peut-être aussi