Polytech'Orléans
description
Transcript of Polytech'Orléans
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
1
Polytech'Orléans
Filière ESI
MODULE
Processeurs du traitement du signalIntroduction au VHDLFASCICULE DE COURSANNÉE 2005-2006SPE 3 Option “ESI”Rodolphe WEBER
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
2
FORMATION VHDL
•Introduction•Premiers pas•Les Objets VHDL•Les Opérateurs VHDL•Assignation concurrente•Assignation séquentielle•Les Testbenchs•Les Compléments•Les machines d'états•Les règles de conception
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
3
Source: DataquestLogic
StandardLogic
ASIC
ProgrammableLogic Devices(PLDs)
GateArrays
Cell-BasedICs
Full CustomICs
CPLDsSPLDs(PALs) FPGAs
Les circuits logiques programmables
Introduction
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
4
Les circuits logiques programmables
•Les CPLD (complex programmable logic devices)•association de plusieurs blocs logiques•chaque bloc logique contient des macro-cellules (qq10 à qq100)•une macro-cellule réalise une fonction logique combinatoire + bascule•matrice de connexions centrale•temps de propagation prévisible•horloge rapide•technologie eeprom ou flash, ISP
Introduction
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
5
Introduction
Les circuits logiques programmables
•Les FPGA (Field programmable gate arrays)•matrice de blocs logiques (fonctions logiques, multiplexeurs, LUT)•densité plus grande•réseau d’interconnexions•temps de propagation variable•deux technos SRAM ou antifusible
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
6
Exemple d'une single-slice d'un CLB (Configurable Logic Block) d'un Virtex ou Spartan II
Détail extrait de l'architecture d'un FPGA Xilinx
Introduction
F5IN
CINCLKCE
COUT
D QCK
S
REC
D QCK
REC
OG4G3G2G1
Look-UpTable
Carry&
ControlLogic
O
YBY
F4F3F2F1
XBX
Look-UpTable
BYSR
S
Carry&
ControlLogic
SLICE
COUT
D QCK
S
REC
D QCK
REC
OG4G3G2G1
Look-UpTable
Carry&
ControlLogic
O
YBY
F4F3F2F1
XBX
Look-UpTable
F5INBYSR
S
Carry&
ControlLogic
CINCLKCE SLICE
+ éventuellement des fonctions spécialisées implantées en dur :+ entrees/sorties + Blockram+ DLL+ registre à décalage+ multiplieurs+ communications+ ….
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
7
Les ASICs (Application Specific Integrated Circuit)
• Conçus pour des applications particulières :
• réduction des coûts pour les grandes productions
• meilleures performances (vitesse, consommation,…)
• confidentialité, durcissement.
• Différentes technologies :
• Pré-caractérisés (standard cells) : à partir d'un wafer nu
• Pré-diffusé (gate array) et mer de portes (sea of gates) : les transistors sont
déjà sur le wafer, il reste à déposer les interconnexions
Introduction
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
8
Comparaison ASIC/FPGA
Introduction
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
9
Introduction
Rappels d’électronique numérique
Système combinatoire (asynchrone) : [b2,b1,b0]=f(a3,a2,a1,a0)
or
and
xornot
mult
a0
a1
a2
a3
b0
b1
b2
a
b
[b2,
b1,
b0]
[a3,
a2,a
1,a0
]
mémoire
f(a3,a2,a1,a0)≈Fonctionnellement
Vision comportementale
Mais temporellement :
Niveaux logiques
1 2 3
si niveaux logiques alors delay
•Mauvaise performance en temps•Difficultés pour mettre au point•Difficultés pour tester tous les cas
delay
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
10
Introduction
Design Synchrone
logiquecombinatoire
logiquecombinatoire
logiquecombinatoire
logiquecombinatoire
clk2
Feed-back combinatoire
Améliore les performances en vitesse Simplifie la vérification fonctionnelle Autorise des analyses statiques du timingAssure une parfaite testabilité Architectures des composants calquent cette vision (cf. architecture virtex)
a b c d e f g
clk1
(Registre = flip-flop = bascule D = Z-1)« Q=D au front de clk1, sinon Q=Q »
registre
registre
registre
D Q
registre
a(n-1)
b(n-1)
c(n)=b(n-1)
d(n)
e(n+1)=d(n))
f(n+1)
g(n+2))
^ ^ ^ ^
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
11
Qu'est-ce que le VHDL ?
• VHSIC Hardware Description Language
• VHDL est un langage de modélisation et/ou de synthèse de systèmes électroniques
• C'est un langage normalisé au niveau international, il est sensé être indépendant de
tout compilateur ou simulateur (actuellement version 93, la version 2000 existe mais les
modifications sont spécifiques).
• Il peut cibler des CPLDs, des FPGAs ou des Asics.
• Conception de haut niveau d'abstraction : Modification rapide de la conception,
réduction cycle, réduction risques…
• Meilleur management du projet, développement de grosses conception (structure de
programmation hiérarchisée)
• Adéquation entre le style d'écriture et les compilateurs : les résultats en terme de vitesse
ou de compacité peuvent être notablement différents.
Introduction
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
12
Simulation rapideSimulation rapideFaible précisionFaible précision
Flux de conception VHDL et Niveaux d'abstraction
Editeur VHDL
Synthèse VHDL
Placement/Routage
Testbench génération de stimuli
Simulation VHDL :
comportementale
rtl
logique
•fonctionnelle
•structurelle
comportementale
VHDL Synthèse
VHDL Générique
validationtiming
validation
librairies (VITAL,UNISIM…)
Simulation lente(x100)Simulation lente(x100)Grande précisionGrande précision
rtl : Register Transfert level : ensemble de registres (synchro.), interconnectés par de la logique combinatoire
Fic
hie
r d
e co
ntr
ain
te
Introduction
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
13
Introduction
Procédure de développement d'un composantprogrammable
Introduction
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
14
I ) Structure d’un fichier VHDL
library ieee;use ieee.std_logic_1164.all;
entity essai is port (a,b : in std_logic; c : out integer);end essai;
architecture archi1 of essai isSignal s1, s2 : std_logic;begin..end archi1;
Permet d’accéder à d’autres descriptions définies dans des diverses librairies. Rem. : Plusieurs couples entity/architecture sont possibles au sein d ’un même fichier. Les clauses library et use ne sont pas globales. Leur effet s’arrête dès la déclaration d’une nouvelle entity. D'office il y a Standard et Work
Description de l’interface
Description du comportement de l’entité. Pour une même entité plusieurs architectures sont possibles.
Premiers pas
a
b
cs1
s2
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
15
Exemple de projet avec l’outil Xilinx et Modelsim
• Simulation :1. (Ouvrir le webpack)2. Ecrire le composant en VHDL 3. Ecrire le testbench associé en VHDL4. Ecrire le batch (*. do) qui va compiler tous les fichiers dont vous avez besoin pour la simulation5. Ouvrir Modelsim, lancer le fichier batch puis la simulation
• Synthèse :1. Ouvrir le webpack2. Ouvrir ou créer un projet (pas de chemin avec des espaces)3. Insérer tous les fichiers nécessaires dans ce projet 4. (facultatif) Définir un fichier de contraintes (*.ucf)5. Lancer les différentes étapes de la synthèse. Chaque étape peut générer un fichier VHDL pour la
simulation qu'il suffit de préciser ensuite dans le fichier batch de simulation.
D
rst
enen
a
b
rst
c
Intro.vhd
clk
Premiers pas
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
16
library ieee;use ieee.std_logic_1164.all;entity intro isport ( rst : in std_logic;
clk : in std_logic;en : in std_logic;a : in std_logic;b : in std_logic;c : out std_logic);
end intro ;
architecture vhd of intro isbegin
process (clk, rst)begin
if rst='1' thenc <= '0';
elsif rising_edge(clk) thenif en='1' then c <= a and b;end if;
end if;end process;
end vhd;
library ieee;use ieee.std_logic_1164.all;
entity intro_tb isend intro_tb;
architecture vhd of intro_tb is
component intro port ( rst : in std_logic;
clk : in std_logic;en : in std_logic;a : in std_logic;b : in std_logic;c : out std_logic);
end component ;
signal rst : std_logic :='1';signal clk : std_logic := '0';signal en : std_logic:= '0';signal a : std_logic:= '0';signal b : std_logic:= '0';signal c : std_logic;constant periode : time := 20 ns;
beginclk <= not clk after periode/2;rst <= '1', '0' after 45 ns;
--generateur pseudoaleatoire pour a et b et du enprocessvariable m_a : std_logic_vector(6 downto 1):= "000001";variable m_b : std_logic_vector(6 downto 1):= "011001";
variable m_en : std_logic_vector(6 downto 1):= "110001";
beginwait until clk='1';a <= m_a(6) after periode/7;m_a(6 downto 2) := m_a(5 downto 1);m_a(1) := m_a(1) xor m_a(6);b <= m_b(6) after periode/5;m_b(6 downto 2) := m_b(5 downto 1);m_b(1) := m_b(1) xor m_b(6);en <= m_en(6) after periode/3;m_en(6 downto 2) := m_en(5 downto 1);m_en(1) := m_en(1) xor m_en(6);end process;
-- instantiation du composant testertest : introport map (rst => rst, en => en, a => a,
b => b, c => c );
end vhd;
intro.vhd
intro_tb.vhd
Exemple de projet avec le webpack et ModelSim
Premiers pas
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
17
vlib workvcom -93 intro.vhdvcom -93 intro_tb.vhdvsim intro_tbview structureview signalsview wavedo wave_intro.dorun 1000 ns
intro.do
Exemple de projet avec le webpack et ModelSim
Premiers pas
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
18
Le Design Flow Xilinx
HDL
HDL ParsingIdentification of language syntax errors
HDL SynthesisMacro recognition, FSM extraction,
resource sharing
Low Level OptimizationMacro implementation, timing optimization,
LUT mapping, register replication
.NGC .LOG
Constraints
1) SynthesisConversion VHDL => netlist
Une descriptionBien précise =Une fonction connueEt donc optimisée
Machine d’états : très éfficaces pour décrire des process
- Soft- Hard
Premiers pas
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
19
Translate
Map
Place & Route
Implement
. . .
.
.
.
Le Design Flow Xilinx
2) Implementation includes many phases• Translate: Merge multiple design
files into a single netlist• Map: Group logical symbols from
the netlist (gates) into physical components (CLBs and IOBs)
• Place & Route: Place components onto the chip, connect them, and extract timing data into reports
3) Download
Constraints
simulation
Modèle vhdl
Fichier binaire => composants
Premiers pas
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
20
1ères Règles d’écriture du VHDL
VHDL 87 (obsolète), VHDL 93 ( en cours) , VHDL 2000 (très peu de changement) La simulation comportementale est indépendante du style d'écriture et du compilateur utilisée et
de la cible , pas la synthèseLes commentaires commencent par deux tirets et se prolongent jusqu’à la fin de la ligne
-- ceci est un commentaire
En général, les commandes VHDL se terminent par ';' Aucune distinction entre les minuscules et les majuscules Règles de dénomination :
26 lettres de l ’alphabet + les 10 chiffres + ‘ _ ’ le premier caractère est une lettre interdit : v__hdl, vhdl_ et les noms réservés
Valeurs explicites :entiers : 123, 1_2_3, 2#11# 3, 16#0F# 15, 2#11#e3 24caractère ASCII: ‘ a ’ , ‘ @ ’bit : '0', '1', 'Z', '-',...chaîne de caractère : "composant programmable"bus : "0010", "001-", "0Z1"... X"F6" "11111100"boolean : true, false
Premiers pas
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
21
II) Les objets VHDL
Les objets manipulés en VHDL sont :
les ports E/S (PORT)
les signaux (SIGNAL)
les constantes (CONSTANT)
les variables (VARIABLE) (cf. les PROCESS)
les paramètres (GENERIC) (cf. compléments)
Ces objets représentent une valeur
Ils doivent être typés
vhdl standard (integer, bit, bit_vector, boolean, time, array, énumération…)
librairie IEEE Standard 1164 : ieee.std_logic_1164 (std_logic, std_logic_vector,…)
librairie IEEE Numeric_std (signed, unsigned,…)
type défini par l'utilisateur
Les objets VHDL
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
22
Les objets VHDL
Ils sont définis dans la section entity
Ils listent les signaux d'interface avec l'extérieur du composant
Il y a 4 modes possibles :
L'affection se fait avec "<=" (sauf pour le mode IN)
Exemple :
Les ports E/S
library ieee;use ieee.std_logic_1164.all;
entity essai is port (a,b : in std_logic; c : out std_logic);end essai;
architecture vhd of essai is begin c <= a and b; end vhd;
a
b
cessai
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
23
Les objets VHDL
Les signaux
Ils représentent une équipotentielle (virtuelle ou non) Ils doivent être déclarés avant utilisation Ils peuvent être déclarés :
Dans un package, ils sont alors globaux Dans une entity, ils sont communs à toutes les architectures de l'entity Dans l'architecture, ils sont locaux
L'affectation se fait avec "<=" L'initialisation se fait avec ":=" (attention danger car OK pour la simu mais pas pour la synthèse !)
entity essai is port (a,b : in std_logic; c : out integer); signal rst : std_logic;end essai;
architecture rtl of essai issignal carry : std_logic :='0'; begin : carry <= a and b : end rtl;
package essai is signal clk : std_logic; signal rst : std_logic :='1';end essai;
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
24
Les objets VHDL
Les ports E/S vs. les signaux
library ieee;use ieee.std_logic_1164.all;
entity essai is port (a,b : in std_logic; sigout,c : out std_logic);end essai;
architecture vhd of essai is begin sigout <= a and b; c <= sigout or a; -- ne fonctionne pas … end vhd;
a
b sigoutessai
c
sigbuf
La solution : utiliser un signal intermédiaire
architecture vhd of essai issignal sigbuf : std_logic; begin sigbuf <= a and b; sigout <= sigbuf; c <= sigbuf or a; … end vhd;
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
25
Les objets VHDL
Les constantes
Ils doivent être déclarés avant utilisation
Ils peuvent être déclarés :
Dans un package, ils sont alors globaux Dans une entity, ils sont communs à toutes les architectures de l'entity
Dans l'architecture, ils sont locaux L'affectation se fait avec ":="
architecture rtl of essai isconstant VCC : std_logic :='1';constant GND : std_logic:='0';constant periode : time := 20 ns; begin : end rtl;
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
26
Les objets VHDL
Le typage des objets VHDL
Types scalaires prédéfinis
integer : par défaut 32bits mais limites paramétrables.ex.: signal val integer range 0 to 15 implique que val ne peut prendre que les 16 valeurs de 0 à 15.
Il sera donc codé sur 4 bits
natural : sous-type de integer, limité aux nombres >=0 positive : sous-type de integer, limité aux nombres >0
real : (non synthétisable pour les simus seulement)
time : (non synthétisable pour les simus seulement) x := 20 ns;
Types énumérations prédéfinis
character, string : (ex: 'a', "bonjour")
bit, bit_vector : seulement 0 ou 1 (ex. : '0', '1', "0101") type peu ou pas utilisé
boolean : false ou true
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
27
Les objets VHDL
std_logic et std_logic_vector( package std_logic_1164) : 9 états possibles dont 4 synthétisables
0 : bas 1 : haut Z : haute impédance - : indifférent
Ex.: signal s :std_logic; -- représente 1 bit
signal bus : std_logic_vector( 7 downto 0); -- représente un vecteur (un bus) de 8 bits
bus(7) représente le bit de poids fort et bus(0) le bit du poids faible
signal toto : std_logic_vector( 0 to 3); -- représente un vecteur (un bus) de 4 bits
toto(0) représente le bit de poids fort et toto(3) le bit du poids faible
s <= ‘1’; -- notez le simple cote
bus <= "01-10ZZZ" ; -- notez le double cote
bus(1) <= s and bus(2) ;
toto <= bus (7 downto 4); affectation rapide d'un vecteur : bus <= (others => '0') bus <= "00000000"
Le typage des objets VHDL (suite)
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
28
Les objets VHDL
Le typage des objets VHDL (suite)
Type personnalisé
type montype is integer range 0 to 31;
subtype int5b is integer range 0 to 31;
signal vala : montype;
signal valb : int5b;
signal valc : integer range 0 to 31;
vala <= valc ; --erreur !!!
valb <=valc ;
type etat is (debut, fin, stop); signal x : etat; -- idéal pour une machine d'états
x<=debut;
type table is array (0 to 3, 0 downto 7) of bit;signal x :table;x(2,4)<='1';
-- voilà comment est défini std_logic_vector dans la librairie 1164type std_logic_vector is array ( natural range <>) of std_logic; signal x : std_logic_vector (5 downto 0);x<="101010";
Tableaux d'éléments
type vs. subtype
-- voilà comment est défini une ROM 16 x 8bitsType romtype is array ( 0 to 15) of std_logic_vector (7 downto 0); constant my_rom : romtype := ( X"FF", X"00",…,X"11");
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
29
Les objets VHDL
La Librairie NUMERIC_STD
Elle permet de faire de l'arithmétique cc2 avec des vecteurs : use ieee.numeric_std.all;C'est aussi un vecteur, mais il représente un nombre signé ou non signé
possibilités d'opérations arithmétiques ou relationnelles entre eux, mais aussi avec des integer
Elle définit deux types vecteurs : SIGNED et UNSIGNED :
signal u: unsigned ( 3 downto 0); -- "1010" représentent 10
signal s: signed (3 downto 0); -- "1010" représentent -6
Changement de type :
Typestd_logic_vector
Typesigned
Typeunsigned
Typeinteger
to_signed(i,nbits)
to_integer(s)
to_integer(u)
to_unsigned(i,nbits)
signed(v)
std_logic_vector(s)
unsigned(v)
std_logic_vector(u)
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
30
Les opérateurs VHDL
III) Les opérateurs VHDL
Opérateur Description Résultatnot Complément Logique Unaire même typeand ET logique même typeor OU logique même type
nand Non-ET même typenor Non-OU même typexor OU exclusif même typenxor NON-OU exclusif (93) même type
Opérateurs logiques (sur booléens, bits et dérivés)
Opérateurs relationnels (sur types scalaires ou dérivés (signed et unsigned) )
Opérateur Description Résultat= Égalité Booléen/= Inégalité (différent) Booléen< Inférieur Booléen
<= Inférieur ou Égal Booléen> Supérieur Booléen
>= Supérieur ou Égal Booléen
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
31
Les opérateurs VHDL
Les opérateurs VHDL (suite)
Opérateurs bits (sur vecteurs de bits et types numériques) :Opérateur Description Résultat
& Concaténation même type, plus large
Opérateurs arithmétiques (sur les types numériques : entiers, signés, non signés, flottant) :
Opérateur Description Résultat + Addition dépend - Soustraction dépend
abs Valeur absolue Même type *, ** Multiplication, puissance dépend
/ Division dépend mod Modulo, sur entiers dépend rem Reste, sur entiers dépend
Opérateurs de décalage (sur les tableaux de bits, std_logic_vector, signed et unsigned) :sll, srl, sla, sra, rol, ror
"01" & "00" = "0100"
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
32
Le mode concurrent
IV) Assignation concurrente
La description de la fonctionnalité se fait dans l'architecture
Toutes les déclarations sont exécutées simultanément et en permanence
L'ordre des déclarations dans le code source n'a pas d'importance
Les déclarations possibles sont :
assignation continue : "<="
instantiation d'un composant port map (déclaration préalable du composant par component)
assignation conditionnelle when…else
assignation sélective with…select…when…when
appel d'un process
instruction generate
appel d'une fonction
assert
cf. compléments 5ème année
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
33
Assignation continue "<="
Le mode concurrent
library ieee;use ieee.std_logic_1164.all;
entity essai is port (a,b,c : in std_logic; d : out std_logic);end essai;
architecture archi1 of essai issignal e: std_logic;begind <= e and c after 5 ns;e <= a xor b after 6 ns;end archi1;
xor
and
b
a
c
e
d
en simulation uniquement pour simuler des délais
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
34
Le mode concurrent
Instantiation d'un composant
Le composant à instantier peut être déclaré de 3 façons :
Toutes les paires entity/architecture sont déclarées dans le même fichier
La paire entity/architecture est déclarée dans un autre fichier
La structure component est déclarée dans une library via un package
architecture rtl of principal is
component mux port (sel :in std_logic; a,b : in std_logic_vector (width-1downto 0); c : out std_logic_vector (width-1 downto 0));end component;
begin . . . end rtl;
package mon_package is
component mux ...end component;end mon_package;
a
b
cessai
a
b
cessai
ina
inb
a
c
outc
outa
comp1
comp2
tutu
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
35
Les objets VHDL
Instantiation (suite)
L'instantiation se fait avec "port map(…)"
library ieee;use ieee.std_logic_1164.all;
entity tutu is port (ina,inb,a,c : in std_logic; outc,outa : out std_logic);
end tut;
architecture vhd of tutu is
component essai isport (a,b : in std_logic; c : out std_logic);end component;
begin
comp1 : essai – instantiation par positionport map ( ina,inb,outc);
comp2 : essai – instantiation par nominationport map (b=>a, c=>outa, a=>c);
end vhd;
a
b
cessai
a
b
cessai
ina
inb
a
c
outc
outa
comp1
comp2
tutu
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
36
Le mode concurrent
Assignation conditionnelle
Forme générale : signal <= valeur when condition else autre_valeur when autre condition…;
Une seule cible peut être assignée
Les conditions sont sous-entendues exclusives
Mémorisation implicite lorsque toutes les conditions ne sont pas listées
S<= "a" when (sel="00") else "b" when (sel="01") else "c";
A <= B when c='0' else D when e='1' else D when e='1' and c='1' else F;
S<= '1' when sel="00" else '0' when sel="01" (else S);
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
37
Le mode concurrent
Assignation sélective
Forme générale : with selecteur select signal <= valeur when valeur_sel, valeur when valeur_sel ...;
Importance de la clause when others qui permet de préciser tous les cas non définis.
Possibilité de regrouper plusieurs valeurs du sélécteur pour une même assignation : " | ".
with selecteur select x<= a when "00", b when "01", c when "10", d when others;
with selecteur select x<= a when "00", b when "01" | "10", d when others;
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
38
- Un buffer 3 états- un décodeur d'adresse - un latch avec reset
Le mode concurrent
1ers Exemples
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
39
Le mode séquentiel
V) Assignation séquentielle
ATTENTION, ce mode concerne uniquement les function, procedure et les process
Les function et procedure ne manipulent que des variable (cf. complément 5ème année)
les process manipulent variable et signal
Au sein de ces descriptions, les déclarations sont exécutées de manière séquentielle
L'ordre des déclarations est donc important
Les déclarations possibles sont :
assignation continue : "<=" pour les signal et ":=" pour les variable
assignation conditionnelle if…then…elsif ... then ... else …end if;
assignation sélective case… is … when… => … when … =>… end case;
boucles for …. in … loop… end loop;
boucles while … loop … end loop;
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
40
Le mode séquentiel
Les process
Dans un process, l'interprétation des instructions est séquentielle MAIS l'ensemble de leur
réalisation est instantanée (le temps extérieur est suspendu) :
les signal sont assignés en sortie du process : '<=' "va prendre la valeur en sortie"
les variable sont assignées immédiatement : ':=' "prend la valeur"
les variables ne sont pas visibles à l'extérieur du process
Lors d'affectation multiple, c'est la dernière qui est prise en compte.
Le process n'est activé que lorsque les signal de sa liste de sensibilité ont subi un changement
(attention à l’interprétation des listes incomplètes)
Absence de liste de sensibilité : le process se réactive en permanence
process(a,b,c, d) variable e,f,g,h : std_logic; begin a <= b; a <= c and a ; d <= a and b ; e := f ; e := g and e; h := e and f ; end process;
process(a) begin c<=b and a; end process;
Process(liste de sensibilité) --Déclaration de constantes et variables Begin --Description séquentielle End process
Règle : tout signal qui modifie un autre signal ou variable doit être dans la liste de sensibilité
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
41
process(a,b)-- process (a,b,c) begin if (a=b) then c<='1'; else c<='0'; end if; d<=c; end process;
process(clk,rst) variable éventuelle begin if rst='1' then mise à zeros de c
elsif rising_edge(clk)
then
if en='1' then
description du bloc
combinatoire
end if end if; end process;
process(d,en) begin if en='1' then q<=d; -- else q<=q end if; end process;
assignation conditionnelle
Forme générale : if condition then ….. elsif conditons then ….else…; Mise en oeuvre de process clockés :
if clk='1' and clk'event ou if rising_edge(clk)
if clk='0' and clk'event ou if falling_edge(clk) Absence de liste de sensibilité+ wait until (clk='1') placé en tête de la partie déclarative du process
Attention aux mémorisations implicite et aux listes incomplètes:
Structure d'un process clocké
Le mode séquentiel
logiquecombinatoire b c
registrea
clk
rst, en
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
42
Le mode séquentiel
Assignation sélective
Forme générale : case sélecteur is when val_select => instructiuons;... end case; Possibilité de grouper des valeurs de sélections
par 'val1_select | val2_select ' par val1_select to val2_select
Attention aux clauses incomplètes pouvant générer des registres ou des latches :utilisation de la clause when others
process begin wait until (clk='1'); case en is when "00" | "11" => q<='1'; c<='0'; when "10" => q<='0'; c<='1'; when others => null; -- ou when others => q<= ' - '; c <= ' - '; end case; end process;
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
43
Le mode séquentiel
Les boucles loop
process begin for i in 0 to 3 loop y(i) <= a(3-i); end loop; end process;
Forme générale :
for i in val_deb to val_fin loop…end loop;
L'indice i de boucle n'a pas besoin d'être déclaré mais il n'est ni visible de l'extérieur ni
modifiable
Les bornes doivent être statiques
while condition loop … end loop;
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
44
- Un buffer 3 états- un décodeur d'adresse - une rom synchrone- une bascule D avec reset- un compteur- un registre à décalage
1ers Exemples
Le mode séquentiel
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
45
Testbench
VI) Les Testbenchs
Pour générer des stimulis et valider le design vhdl.
la durée s'exprime avec un type physique : fs, ps, ns, us, ms
Possibilité ( nécessité) d'utiliser des ressources VHDL non synthétisable
label : wait on liste_signal until condition for durée; -- dans des process
wait on : attente sur évènements
wait until : attente de conditions (s’il a eu un événement sinon la condition n’est pas testée)
wait for : attente pour un certains temps
wait for 10 ns ;
Vhdl àtester
stimuli
wait on clk until now=1ms ; --attente synchrone d’une durée de simulation
wait until now=1ms ;
wait until clk=‘1’ ; -- attente d’un front montant
constant Period: TIME := 25 NS;...Stimulus: processbeginA <= "0000";B <= "0000";wait for Period;A <= "1111";wait for Period;B <= "1111";wait for Period;wait;end process;
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
46
Testbench
Les Testbenchs
signal <= valeur after durée absolue, valeur after durée absolue ,… ;
H <= "00", "01" after 10 NS, "10" after 20 NS;clk<= not clk after 50 ns; -- génération d’une horloge à 10 MHz
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
47
Complément
VII) Les Compléments
Les Paramètres Génériques
Les Fonctions
Les Procédures
Les Packages
La boucle Generate
Package Textio
Les Attributs
Les assertions
Les Configurations
cf. compléments 5ème année
2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans
48
Les paramètres génériques
Ils sont déclarés dans l'entityIls permettent de paramétrer des composantsune valeur par défaut peut être définie (":=")l'instanciation se fait grâce à "generic map(…)"
entity mux is generic (width : integer :=8); port (sel :in std_logic; a,b : in std_logic_vector (width-1 downto 0); c : out std_logic_vector (width-1 downto 0));end mux;
architecture behav of mux isbeginc<=a when sel='0' else b;end behav;
comp1 : mux generic map ( 4)port map(sel=>seldata, a=> dataa, b=> datab, c=>data);comp2 : mux port map (sel=>seladr, a=>adra, b=> adrb, c=>adr);
Complément