Aller au contenu

Carte du langage VHDL

VHDL sépare l'interface d'un circuit de sa ou ses implémentations.

library ieee;
use ieee.std_logic_1164.all;

entity inverter is
  port (
    input_i  : in  std_logic;
    output_o : out std_logic
  );
end entity inverter;

architecture rtl of inverter is
begin
  output_o <= not input_i;
end architecture rtl;

Unités de conception

Unité Rôle
Clause library Rend visible une bibliothèque compilée
Clause use Importe les déclarations d'un paquetage
Entité Déclare génériques et ports : l'interface publique
Architecture Implémente une entité
Paquetage Partage types, constantes, fonctions et procédures
Corps de paquetage Implémente constantes différées et sous-programmes
Configuration Sélectionne les associations ; rarement nécessaire dans un petit projet
Contexte Regroupe les clauses répétitives en VHDL-2008

Deux mondes d'exécution

Région concurrente

Les instructions placées après le begin d'une architecture sont concurrentes. Leur ordre dans le fichier ne donne pas un ordre d'exécution.

sum_o   <= a_i xor b_i xor cin_i;
carry_o <= (a_i and b_i) or (cin_i and (a_i xor b_i));

Région séquentielle

Les instructions d'un processus, d'une fonction ou d'une procédure sont séquentielles.

process(all)
begin
  if select_i = '1' then
    y_o <= b_i;
  else
    y_o <= a_i;
  end if;
end process;

Le processus reste concurrent avec tous les autres processus. La syntaxe séquentielle explique comment ce processus calcule ses pilotes lorsqu'il se réveille.

Synthétisable ou réservé à la simulation

Généralement synthétisables :

  • Affectations combinatoires et processus combinatoires complets.
  • Processus déclenchés par un front.
  • Boucles bornées dont les limites sont connues à l'élaboration.
  • Génériques statiques et instructions generate.
  • Arithmétique fondée sur numeric_std.

Généralement réservés aux bancs de test :

  • Délais arbitraires wait for 10 ns.
  • Lecture et écriture de fichiers texte.
  • Assertions servant d'oracle de vérification.
  • std.env.finish.
  • Allocation dynamique avec des types accès.

Note

Certaines assertions peuvent être ignorées par la synthèse. Le rapport du synthétiseur, et non la seule légalité du langage, détermine ce qui sera réellement implémenté.

Convention de nommage proposée

Élément Signification Exemple
_i Port d'entrée button_i
_o Port de sortie led_o
_io Port bidirectionnel data_io
_n Signal actif à l'état bas reset_n_i
_q Valeur enregistrée/courante count_q
_d Prochaine valeur state_d
C_ Constante C_CLOCK_HZ
G_ Générique G_WIDTH

La cohérence est plus importante que la convention exacte.

Suite