Académique Documents
Professionnel Documents
Culture Documents
Coursvhdl PN PDF
Coursvhdl PN PDF
modélisation et synthèse
Patrice NOUEL
Décomposition Schéma
Netliste
Spécifications hiérarchique
ÓModélisation ÓSynthèse
Ë Tout le langage. ËLangage simplifié(
Logique + Temporel pas de retards). Le
style d ’écriture
ËUn modèle peut être anticipe une primitive
comportemental, circuit.
structurel ou de type ËLa synthèse
data-flow. demande une bonne
ËExemple: créer des connaissance du
circuit et de la
programmes de test technologie.
ÓUnités de compilation
ÓConcurrence, signaux, événements, processus
ÓSimulation événementielle
ÓInstructions séquentielles
ÓLe délai delta
ÓDescriptions structurelles
ENTITY comparateur IS
PORT( a
SIGNAL a : IN bit_vector(7 DOWNTO 0); egal
SIGNAL b : IN bit_vector(7 DOWNTO 0); b
SIGNAL egal : OUT bit);
END comparateur;
Mode
Protégé en lecture
SIGNAL s, r, q, qb : bit;
BEGIN
-- premier processus
qb <= s NOR q;
s qb
-- deuxième processus
q <= qb NOR r;
END ;
r q -- l’ordre d’écriture est indifférent !!!
Ó Type déclaré
Ó État en référence à ce type
Ó Un ou plusieurs pilotes (driver) associés
s <= ’0’ ,’1’ AFTER 10 ns , ’0’ AFTER 25 ns; -- un seul pilote
h e u re 0 10 25
Pilote de s
é ta t ’0 ’ ’1 ’ ’0 ’
SIGNAL h : bit;
BEGIN
0 100
horloge: PROCESS
BEGIN
END PROCESS;
END; BEGIN
heure 5 8 10
deuxième liste pour H= 3
événement qb s r
heure 7 8 10
troisième liste pour H=5
événement q s r
s
0 3 8
r
q
qb 7
5
Ós <= 1 + 2; Óx := 1 + 2;
ÓC ’est le pilote du ÓUne variable est
signal qui est affectée immédiatement
immédiatement affecté
Óx prend la valeur 3
Ó3 est mémorisé dans le
pilote de s Óune variable n ’est pas
visible au dehors du
ÓLe signal est affecté processus
plus tard ( Processus
endormi par WAIT)
equivalent:PROCESS(etat)
equivalent:PROCESS BEGIN
ENTITY delta IS
Trois exemples de
PORT ( a : IN bit; description
b : IN bit; d’une fonction très simple
c : IN bit;
s : OUT bit); s = (a . b) + c
END delta;
a b c
Ó ARCHITECTURE plus_simple OF
delta IS
BEGIN C1
-- une seule instruction concurrente C1
s <= NOT (c OR ( a AND b)) ;
END plus simple;
ÓDéclarer
Ë un composant (COMPONENT) : Support pour le câblage
Ë une liste de signaux (SIGNAL) nécessaires au câblage
ÓInstancier
Ë chaque composant en fixant les paramètres (GENERIC
MAP) et le câblage(PORT MAP)
ÓConfigurer
Ë Choisir pour chaque composant instancié le modèle correct
(couple Entité-architecture). (USE)
Aspect extérieur du
h
compteur 4 bits plein
raz
h
s0 s1 s2 s3
plein
raz
d0 d1 d2 d3
calcul
compter
BEGIN
Par position
B3: bascule
PORT MAP (h, d(3), raz, s(3), sb(3));
B2: bascule
PORT MAP (h => h, d =>d(2), raz => raz, s => s(3),
sb => sb(3));
-------------------------------------------------
combi: calcul Par dénomination
PORT MAP (s, sb, compter,d, plein);
END structurelle;
compteur4 ENTITY
ARCHITECTURE
BEGIN
ARCHITECTURE tb OF test_circuit IS
Ó Éléments lexicaux
Ó Les structures de contrôle
Ó Types et sous-types
Ó Sous-programmes (fonctions et procédures)
Ó Blocs et généricité
Ó Les Attributs
Ó Signal avec pilotes multiples
Ó Les bibliothèques
ÓArithmétiques
+ - * / ** MOD REM
ÓÉnumérés
Ë TYPE boolean IS (FALSE,TRUE);
Ë TYPE bit IS (‘0’,’1’);
Ë TYPE type_etat IS (debut, etat1, fin);
ÓEntiers
Ë TYPE integer IS RANGE -2147483648 TO 2147483647 ;
-- (entier 32 bits)
Ë SUBTYPE natural IS integer RANGE 0 TO integer’high;
ÓFlottants
Ë TYPE real IS RANGE -1.0e38 TO 1.0e38;
ÓPhysiques
Ë TYPE time IS RANGE -2147475648 TO 2147483647
• UNITS
fs;
ps = 1000 fs;
ns = 1000 ps; -- etc...
• END UNITS;
ÓTableaux:
TYPE bit_vector IS ARRAY (natural RANGE <> OF bit);
-- non contraint
TYPE string IS ARRAY ( positive RANGE <> OF character);
-- non contraint
TYPE matrice IS ARRAY (1 TO 4, 0 TO 7) OF bit;
-- tableau à 2 dimensions 4 X 8
ÓEnregistrements :
TYPE date IS RECORD
jour : natural RANGE 1 TO 31;
mois : string;
année : integer RANGE 0 TO 4000;
END RECORD;
s : = ‘1’; s := a OR b;
END IF;
Ó Procédures Ó Fonctions
Ë classes d ’objet Ë classes d ’objet
• CONSTANT • CONSTANT
• SIGNAL • SIGNAL
• VARIABLE • par défaut : CONSTANT
Ë modes Ë mode
• IN (CONSTANT par défaut) • IN
• OUT (VARIABLE par • par défaut : IN
défaut)
• INOUT (VARIABLE par
défaut)
• par défaut : IN
ENTITY es IS
PORT (e : IN bit; s : OUT bit); -- une entrée, une sortie externe
END es ;
ARCHITECTURE deux_blocs OF es IS
SIGNAL i : bit; -- signal de liaison entre blocs internes
BEGIN
B1 : BLOCK PORT (e1: IN bit; s1 : OUT bit); PORT MAP ( e1 => e, s1 => i);
BEGIN
s1 <= e1;
END BLOCK B1;
B2 : BLOCK PORT (e2: IN bit; s2 : OUT bit); PORT MAP ( e2 => i, s2 => s);
BEGIN
s2 <= e2;
END BLOCK B2;
e1 s1 e2 s2
END deux_blocs; e i s
BEGIN BEGIN
latch: PROCESS(en, d)
q <= d;
q <= GUARDED d ;
END IF;
-- autres instructions
concurrentes éventuelles END PROCESS;
END BLOCK; -- autres PROCESS
-- entrées-sorties locales
BEGIN
END BLOCK;
ENTITY compteur_gen IS
GENERIC( Nb_bits : natural := 4;
Modulo : natural := 16;
Tpropagation : TIME := 2 ns);
PORT( h : IN bit;
sortie : OUT bit_vector(Nb_bits - 1 DOWNTO 0);
END;
-- On est dans l’architecture, un COMPONENT compt a
été déclaré, on instancie le compteur générique
C1: compt GENERIC MAP ( 5, 17, 10 ns)
PORT MAP ( clock, sortie);
ÓDéfinition
ÓAttributs de type
ÓAttributs de tableau
ÓAttributs de signal
ÓAttribut de bloc
t1'LEFT = 1 t2'LEFT = 10
t1'RIGHT = 10 t2'RIGHT = 1
t1'LOW = 1 t2'LOW = 1
t1'POS(4) = 3 t2'POS(4) = 6
t1 ’VAL(0) = 1 t2 ’VAL(1) = 9
ÓExemple:
CONSTANT Nb_bits : natural := 16; -- susceptible de changer
SIGNAL vecteur : bit_vector(0 TO Nb_bits);
…..
FOR i IN vecteur ’RANGE LOOP -- écriture constante
-- donc de 0 TO Nb-bits….. ou alors
FOR i IN 0 TO vecteur’RIGHT
ÓBEHAVIOR
Ë nom_architecture ’BEHAVIOR ou label ’BEHAVIOR
Booléen vrai si le bloc ou l ’architecture ne contient pas
d ’instanciation de composant (COMPONENT)
ÓSTRUCTURE
Ënom_architecture ’ STRUCTURE ou label ’ STRUCTURE
Booléen vrai si le bloc ou l ’architecture ne contient aucune
affectation de signal
valeur := ’0’;
END IF; Pilote 1 résolution
END LOOP;
RETURN valeur Pilote 2 SIGNAL
END;
etc...
ÓDéconnexion
Ë Le délai de déconnexion est défini par défaut après 0 ns
Ë L ’instruction DISCONNECT permet de fixer un délai autre
Ë Pour un type REGISTER la dernière valeur est conservée
-- autres BUS
ÓFonctions
Ë de résolution: std_ulogic_wired_or, std_ulogic_wired_and
Ë de conversion: to_integer, to_unsigned, to_signed,
conv_signed, zero_extend, sign_extend
Ë surcharge: +, -, *, abs, /, mod, rem, **, sla, sra, sll, srl, rol,
ror, eq, =, ne, /=, lt, <, gt, >, le, <=, ge, >=, and, or, nor, xor,
not, xnorand_reduce, nand_reduce, or_reduce, nor_reduce,
xor_reduce, xnor_reduce, maximum, minimum
ÓRestrictions du langage
ÓLes étapes de la synthèse
ÓDescription de circuits combinatoires
ÓDescription de circuits séquentiels
ÓStructuration des circuits synchrones: description des
séquenceurs
ÓMéthodes possibles
Ë Instructions concurrentes
Ë Processus avec les entrées en liste de sensibilité
Ë Fonctions appliquées au signal de sortie
Ë Tableau de constantes
Ó Affectation simple
Ë S <= a AND b AFTER 10 ns;
Ó Affectation conditionnelle
Ë neuf <= ’ 1’ WHEN etat = " 1001" ELSE ’ 0’ ;
Multi: PROCESS(ad,e0,e1,e2,e3)
BEGIN
-- Multiplexeur CASE ad IS
WHEN 0 => s <= e0;
WITH ad SELECT
WHEN 1 => s <= e1;
s <= e0 WHEN 0, WHEN 2 => s <= e2;
WHEN OTHERS => s <= e3;
e1 WHEN 1, END CASE;
END PROCESS;
e2 WHEN 2,
e3 WHEN OTHERS;
ÓS <= ‘0’ & e(7 downto 1); -- ne génère rien car il s’agit
d’une multiplication par 2. Décalage de fils.
ÓMéthodes possibles
Ë Donner la préférence aux processus explicites
Ë Attention à la mémorisation implicite sur les parties
combinatoires. Utiliser systématiquement des variables.
Reg_sync : PROCESS
BEGIN
WAIT UNTIL rising_edge(h);
IF raz = ‘1’ THEN
Sortie <= (OTHERS => ‘0’); h
sortie
ELSE
Sortie <= entree; entree
END IF;
END PROCESS Reg_sync ; raz
Reg_async : PROCESS
BEGIN
WAIT ON h, raz ;
IF raz = ‘1’ THEN
Sortie <= (OTHERS => ‘0’); h
Reg_e : PROCESS
BEGIN
WAIT UNTIL rising_edge(h);
IF en = ‘1’ THEN
Sortie <= entree; h
END IF;
END PROCESS reg_e ;
entree d
en sorti
e
Conception de circuits et langage VHDL P.Nouel 109
Compteur synchrone
Compteur : PROCESS
VARIABLE c : natural RANGE 0 TO Modulo – 1;
BEGIN
WAIT UNTIL rising_edge(h) ;
IF compter THEN
IF c < Modulo –1 THEN
c := c + 1 ;
ELSE
c := 0 ;
END IF;
sortie <= to_unsigned( c , sortie’length);
END IF;
END PROCESS Compteur;
Reg_dec : PROCESS
VARIABLE stmp : std_ulogic_vector(3 DOWNTO 0);
BEGIN
WAIT UNTIL rising_edge(h) ; -- entièrement synchrone
CASE selection IS
WHEN ”11” => stmp := d_entree ; -- chargement paralelle
WHEN ”10” => stmp := stmp(2 DOWNTO 0) & edg; -- gauche
WHEN ”01” => stmp := edd & stmp(3 DOWNTO 1); --droite
WHEN OTHERS => NULL ; -- mémorisation
sortie <= stmp ;
END CASE;
END PROCESS Reg_dec ;
Séquenceur Traitement
Fin_calcul indicateurs sorties
hs ht
clk
Générateur d’horloges
hs
ht
ordres
indicateurs
entrées état
futur sorties
état présent
état
futur sorties
entrées
comb registres comb registres
MEALY
état présent
BEGIN
PROCESS(inclok, outclock, we, address)
BEGIN
IF inclok = ‘1’ and inclok’EVENT THEN
IF we = ‘1’ THEN
Mem (address) <= data;
END IF;
END IF;
END PROCESS;
retards
retards
registre registre
D
horloge
horloge
ENTITY bus_trois_etat IS
PORT (periph_a, periph_b : IN std_logic_vector (7 DOWNTO 0);
cs_a, cs_b : IN std_logic;
sortie_commune : OUT std_logic_vector );
END ;
ARCHITECTURE synthetisable OF bus_trois_etat IS
BEGIN
sortie_commune <= periph_a WHEN cs_a = ‘1’
ELSE “ZZZZZZZZ“;
sortie_commune <= periph_b WHEN cs_b = ‘1’
ELSE “ZZZZZZZZ“;
END;
ENTITY bus_bidirectionnel IS
PORT( liaison : INOUT std_logic ; -- un seul fil
…);
END;
ARCHITECTURE synthetisable OF bus_bidirectionnel IS
SIGNAL signal_interne, entree_interne, direction : std_logic ;
BEGIN
Liaison <= signal_interne WHEN direction = ‘1’ ELSE ‘Z’
entree_interne <= liaison ;
…
END ;
ÓBibliothèques VITAL
Signal
s
Retard transport
ÓPackages standards
Ë VITAL_Timing: Type de données et sous-programmes de
modélisation des relations temporelles ( ex: Setup, Hold)
Ë Vital_Primitives : Jeu de primitives combinatoires et tables
de vérité
Ë Vital_Memory: Spécifique pour modélisation des mémoires
Óhttp://www.eda.org
ÓNewsgroup : comp.lang.vhdl