Upload
vince
View
54
Download
0
Embed Size (px)
DESCRIPTION
Polytech'Orléans. Filière ESI MODULE Conception Numérique avancée Complements VHDL FASCICULE DE COURS ANNÉE 2006-2007 SPE 4 Option “SE” Dr. Rodolphe WEBER. Compléments VHDL. Faire du code générique Compilation conditionnelle Les testbenchs Les règles de conception - PowerPoint PPT Presentation
Citation preview
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
1
Polytech'Orléans
Filière ESI
MODULE
Conception Numérique avancéeComplements VHDLFASCICULE DE COURSANNÉE 2006-2007SPE 4 Option “SE”Dr. Rodolphe WEBER
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
2
Compléments VHDL
• Faire du code générique• Compilation conditionnelle• Les testbenchs• Les règles de conception • Les machines d'états
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
3
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.
Rappel
a
b
cs1
s2
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
4
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);
Code Générique
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
5
Utilistation d’attributs Ils permettent de récupérer de l'information sur la nature des objets
type etat is (lundi, mardi, mercredi, jeudi, vendredi);signal indice : integer range 0 to 255;signal tab : std_logic_vector (3 downto 0);signal clk : std_logic;
Objet etat indice tab Objet'left lundi 0 3
Objet'right vendredi 255 0 Objet'high vendredi 255 3 Objet'low lundi 0 0
Objet’pos(mardi) 1 - - Objet’succ(mardi) mercredi - - Objet’pred(mardi) lundi - -
Objet'length - 256 4 Objet'range - - 3 downto 0
Objet'reverse_range - - 0 to 3
à éviter
Code Générique
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
6
Appel d'une fonction x <= fonction(a,b) ou x:=fonction(a,b)
Elle doit être spécifiée au préalable dans un package, une entity ou une architecture.
Elle peut ne rien générer, comme générer de la logique.
Une fonction dont le nom est entre " devient un opérateur. La surcharge est possible.
Il existe des fonctions toutes faites :
exemple : la librairie ieee.std_logic_1164 :
9 états possibles (1,0,Z,'-',…)
fonctions logiques (and,nand, or,nor…)
détection de front : rising_edge,falling_edge
function maxval (in1,in2 :signed) return signed is variable resultat : signed (in1'range) ; begin…return resultat;end maxval;
Les fonctions
Code Générique
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
7
Les Procédures
Appel d'une procédure procedure(a,b,c,d)
Elle doit être spécifiée au préalable dans un package, une entity ou une architecture.
procedure Nom_proc ({<class> Nom_para: <mode> <type_spec>}) is --<class>: signal | variable | constant --<mode>: in | inout | outbegin -- description de la procédure end;
-- example: adder
procedure ADD (signal A0, A1, B0, B1: in STD_LOGIC; signal C0, C1: out STD_LOGIC) is
variable X, Y: STD_LOGIC;
begin
x := B0 and A0;
Y := B1 xor A1;
C0 <= (B0 and not A0) or ( not B0 and A0);
C1 <= (Y and not X) or (not Y and X);
end;
Code Générique
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
8
Les Packages
package unité de compilation permettant de regrouper constant, type, signal, component, function et
procedurepackage nom_du_package is-- description du package-- vue externeend package nom_du package;
package body nom_du_package is-- description interneend package body nom_du_package;
Le package est compilé à part soit dans une librairie spécifique soit dans la librairie courante work.
On peut l'utiliser par la clause use :
use work.nom_du_package.all;
library tutu;
use tutu.nom_du_package.all;
Code Générique
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
9
architecture archi of essai is signal temp : std_logic_vector( 0 to 31); signal vcc : std_logic ; beginvcc <= '1';boucle : for i in 0 to 31 generate premier : if i=0 generate dffa: DFF port map ( SI,CLK,reset,vcc,temp(0)); end generate; autres : if i>0 generate dffb: DFF port map ( temp(i-1),CLK,reset,vcc,temp(i)); end generate;end generate;po<=temp;end archi;
Duplication de composants ou d'équations
Forme générale : label : for indice in val_debut to val_fin generate … end generate label; Possibilité d'insérer des conditions dans la boucle : if condition then generate … end
generate; pas de else ni de elsif.
-- constant vcc : std_logic :='1';
Compilation conditionnelle
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
10
Configuration
configuration permet d'établir la correspondance avec un composant existant :
Pour cibler un composant seul
for label: composant_cible use entity librairie.composant_source(nom_architecture); end for;
Pour cibler une famille de composant
for all composant_cible use entity librairie.composant_source(nom_architecture); end for;
Pour cibler le reste
for others composant_cible use entity librairie.composant_source(nom_architecture); end for;
Mis en œuvre :
directe dans la partie déclarative de l'architecture
par le biais d'un bloc configuration : configuration tutu of composant_cible is -- description des configurationsend;
Possibilité de hiérarchiser les configurations :
for label: composant_cible use configuration librairie.nom_configuration end for;
Compilation conditionnelle
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
11
Les Testbenchs
Les Testbenchs Pour générer des stimulis et valider le design vhdl.
Possibilité ( nécessité) d'utiliser des ressources VHDL non synthétisable, description uniquement fonctionnelle
Vhdl àtester
stimuli
Vérification manuelle sur chronogramme :- fastidieux, voire impossible si design complexe- taux de couverture ?
Modèle comportementale
Vhdl àtester
stimuli
ComparaisonDes
résultats
Vérification automatique :- Efficace mais- validité du modèle comportementale ?- Vitesse ?
Modèle C, Matlab, Scilab….
Fichierstimuli
FichierRésultat
Vhdl àtester
lecturestimuli
EcritureRésultat
ComparaisonDes
résultats
Vérification automatique :- Très efficace
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
12
Les Testbenchs
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 ;
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
-- méthode simple mais lourdeconstant 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;
Génération d’un chronogrammela durée s'exprime avec un type physique : fs, ps, ns, us, ms
now représente le temps courant (sous modelsim)
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, attention initialiser clk à la déclaration
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
13
Les assertions
Les assertions permettent d'avoir des informations dynamiques sur la simulation :assert test report message severity action
si le test est négatif on affiche le message avec arrêt ou non de la simulation
Action Effets
NOTE poursuite néant
WARNING poursuite écriture sur fichier .log
ERROR poursuite écriture sur écran
FAILURE arrêt écriture sur fichier
Arrêter le simulateur :assert false severity failure ;
Afficher un message :assert false report " Fin OK" severity note;oureport "Fin Ok" severity note
Testbench
exemple : assert (now< 10 ms) report " Fin de simu" severity failure
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
14
Le Package TEXTIO (VHDL 93)
process file F : TEXT open WRITE_MODE is "testout.txt"; variable L: line; begin while true loop -- on peut tester une durée NOW < finsimu write(L,NOW,LEFT,10); -- NOW = temps de simulation write(L,to_integer(a)); writeline(F,L); wait until clk='1'; end loop;end process;
process file G : TEXT open READ_MODE is "test.txt"; variable L: line; variable bvar,cvar : integer range 0 to 7;variable dvar : real; begin while not ENDFILE(G) loop wait until clk='1'; readline(G,L); read(L,bvar); -- on ne lit que des variables read(L,cvar); read(L,dvar); b <= bvar; c <= cvar; d <= dvar; end loop; wait; -- finend process;
use std.textio.all;Les modes peuvent être :
READ_MODE, WRITE_MODE, APPEND_MODE
Cadrage possible avec WRITE : LEFT, + taille minimum du chanp RIGHT,+ taille minimum du chanp
les types standards sont utilisés : TIME, INTEGER CHARACTER STRING BIT et BIT_VECTOR REAL
avec use ieee.std_logic_textio.all, on peut utiliser STD_LOGIC et STD_LOGIC_VECTOR lire et écrire de l'hexa ou octal :
HREAD et HWRITEOREAD et OWRITE
0 ns 025 ns 075 ns 1125 ns 2
2 5 1.17 3 5e31 4 4.2e-14 2 2.3
Les Testbenchs
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
15
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
Règles de Conception
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
16
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))
^ ^ ^ ^
Règles de Conception
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
17
Règles de Conception
Règles de conception
Systèmes synchrones(simu fonctionnelle simplifiée et puissante, analyse temporelle statique possible,) :
1 SEULE horloge (broche globale du composant)
Si plusieurs domaines d horloges, il faut des FIFOs tampons
resynchroniser tous les signaux asynchrones pour éviter la métastabilité
D Q D Qreset_Nreset_1_N reset_2_N
s_reset_N
horloge
GlobalClear
GlobalClock
EPLD
Resynchronisation de la remontée du RESET
exemple :Synchronisation du reset, actif de manière asynchrone et inactif de manière synchrone :
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
18
Règles de Conception
Règles de conception
Adopter une démarche qualité (dénomination, hierarchisation, testbench…)
Attention aux assignations incomplètes (mémorisation implicite)
Attention à l’utilisation des variables
Penser implantation (orienter le compilateur) : il faut connaître l’architecture
du composant
Ecrire un registre à décalage 32 bits à partir de l’architecture ci-contre
Proposer un schéma pour la fonction suivante : sortie= (a+b) ou (c+d)
Trouver le bon compromis entre ressources et vitesses en choisissant le bon
degré de parallélisation (pas compact mais rapide) ou de sérialisation (compact
mais lent) : cf. transparent suivant
Four-input LUT•Any 4-input logic function•Or 16-bit x 1 sync RAM•Or 16-bit shift register
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
19
Règles de Conception
Exemple : implantation d’un filtre d’ordre 2
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
20
Les machines d’états
Machines d’états
s(2) s(1) s(0)
E0 0 0 1
E1 1 1 0
E2 0 0 1
E3 0 1 0
E4 1 0 1
Autre concept
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
21
ENTITY machine IS PORT (clk, rst : in bit ;cond : in bit-vector(2 DOWNTO O) ;sortie: out bit-vector(2 DOWNTO 0)) ;END machine ;
ARCHITECTURE arch OF machine ISTYPE etats is (etatO, etatl, etat2, etat3, etat4) ;SIGNAL etat: etats ;BEGIN
PROCESS(clk, rst)BEGINIF rst='l' THEN
etat <= etat0 ;ELSIF ( clk ' EVENT and clk= ' l' ) then
CASE etat ISWHEN etat0 => etat <= etatl ;WHEN etatl => IF cond = "OOO" THEN etat <= etat0 ;
ELSIF cond = "001" THEN etat <= etat4 ;ELSIF cond = "010" THEN etat <= etat3 ;ELSIF cond = "011" THEN etat <= etat2 ;ELSE etat <= etatl ;
END IF ;WHEN etat2 => etat <= etat3 ;WHEN etat3 => IF cond = "110" THEN etat <= etat0 ;
ELSE etat <= etat4 ; END IF ;
WHEN OTHERS => etat <= etat0 ;END CASE;
END IF;END PROCESS;
sortie <= "001" WHEN (etat=etat0) ELSE"110" WHEN (etat=etat1) ELSE"001" WHEN (etat=etat2) ELSE"010" WHEN (etat=etat3) ELSE"101" ;
END ARCH;
Ges
tion
des
éta
tsG
esti
ond
es s
orti
es
version synchronisée
Machine à états codés
Les machines d’états
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
22
ENTITY machine IS PORT (clk, rst : in std_logic ;cond : in std_logic_vector(2 DOWNTO O) ;sortie: out std_logic_vector(2 DOWNTO 0)) ;END machine ;ARCHITECTURE arch OF machine ISCONSTANT etat0 : std_logic_vector(4 DOWNTO 0) := "00001";CONSTANT etat1 : std_logic_vector(4 DOWNTO 0) := "00010";CONSTANT etat2 : std_logic_vector(4 DOWNTO 0) := "00100";CONSTANT etat3 : std_logic_vector(4 DOWNTO 0) := "01000";CONSTANT etat4 : std_logic_vector(4 DOWNTO 0) := "10000";SIGNAL etat: std_logic_vector(4 DOWNTO 0) ;BEGIN
PROCESS(clk, rst)BEGINIF rst='l' THEN
etat <= etat0 ;ELSIF ( clk ' EVENT and clk= ' l' ) then
CASE etat ISWHEN etat0 => etat <= etatl ;WHEN etatl => IF cond = "OOO" THEN etat <= etat0 ;
ELSIF cond = "001" THEN etat <= etat4 ;ELSIF cond = "010" THEN etat <= etat3 ;ELSIF cond = "011" THEN etat <= etat2 ;ELSE etat <= etatl ;
END IF ;WHEN etat2 => etat <= etat3 ;WHEN etat3 => IF cond = "110" THEN etat <= etat0 ;
ELSE etat <= etat4 ; END IF ;
WHEN OTHERS => etat <= "-----" ;END CASE;
END IF;END PROCESS;sortie <= "001" WHEN (etat=etat0) ELSE
"110" WHEN (etat=etat1) ELSE"001" WHEN (etat=etat2) ELSE"010" WHEN (etat=etat3) ELSE"101" ;
END ARCH;
Ges
tion
des
éta
tsG
esti
ond
es s
orti
es
Machine à états décodés
2 versions du One-Hot Encoding :•One-Hot-One : chaque état correspond à un bit•One-Hot-Zero : idem sauf pour l’état de repos qui correspond à tous les bits à 0 (gain de 1 bit)
Les machines d’états
2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans
23
ENTITY machine IS PORT (clk, rst : in std_logic ;cond : in std_logic_vector(2 DOWNTO O) ;sortie: out std_logic_vector(2 DOWNTO 0)) ;END machine ;ARCHITECTURE arch OF machine ISCONSTANT etat0 : std_logic_vector(3 DOWNTO 0) := "0001";CONSTANT etat1 : std_logic_vector(3 DOWNTO 0) := "0110";CONSTANT etat2 : std_logic_vector(3 DOWNTO 0) := "1001";CONSTANT etat3 : std_logic_vector(3 DOWNTO 0) := "0010";CONSTANT etat4 : std_logic_vector(3 DOWNTO 0) := "0101";SIGNAL etat: std_logic_vector(4 DOWNTO 0) ;BEGIN
PROCESS(clk, rst)BEGINIF rst='l' THEN
etat <= etat0 ;ELSIF ( clk ' EVENT and clk= ' l' ) then
CASE etat ISWHEN etat0 => etat <= etatl ;WHEN etatl => IF cond = "OOO" THEN etat <= etat0 ;
ELSIF cond = "001" THEN etat <= etat4 ;ELSIF cond = "010" THEN etat <= etat3 ;ELSIF cond = "011" THEN etat <= etat2 ;ELSE etat <= etatl ;
END IF ;WHEN etat2 => etat <= etat3 ;WHEN etat3 => IF cond = "110" THEN etat <= etat0 ;
ELSE etat <= etat4 ; END IF ;
WHEN OTHERS => etat <= etat0;END CASE;
END IF;END PROCESS;sortie <= etat(2 downto 0);
END ARCH;
Ges
tion
des
éta
ts
Machine à états codés avec les sorties
Les machines d’états