Académique Documents
Professionnel Documents
Culture Documents
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é
heure 0 10 25
Pilote de s
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
IF etat = 9 THEN
BEGIN
neuf <= ‘1’;
WAIT ON a,b; ELSE
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
Types et sous-types
Blocs et généricité
Les Attributs
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
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
ELSIF rising_edge(h) THEN sortie
Sortie <= entree; entree
END IF;
END PROCESS reg_async ; raz
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 sortie
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
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