Leçon 2 sur 22

Chapitre 2 — Introduction aux langages de description matérielle

Présentation du chapitre

Un langage de description matérielle permet de représenter un circuit numérique sous une forme textuelle exploitable par des outils de simulation et de synthèse. Cette représentation ne décrit pas seulement une suite d’actions : elle exprime des ressources matérielles, leurs connexions, leur synchronisation et les opérations qu’elles réalisent en parallèle. Ce chapitre introduit la notion de HDL, présente les langages VHDL, Verilog et SystemVerilog, explique les différences fondamentales entre un programme logiciel et une description matérielle, puis détaille le cycle complet de développement d’un système numérique sur FPGA.

Objectif général

Comprendre comment une spécification fonctionnelle devient une architecture matérielle simulée, synthétisée, implantée puis validée sur une carte FPGA.

 

Objectifs pédagogiques

  • Définir un langage de description matérielle et expliquer son rôle dans la conception numérique.
  • Distinguer une description structurelle d’une description comportementale.
  • Expliquer les fonctions de la simulation et de la synthèse.
  • Présenter les caractéristiques essentielles de VHDL, Verilog et SystemVerilog.
  • Comparer l’exécution séquentielle d’un programme et le fonctionnement concurrent d’un circuit.
  • Décrire toutes les étapes du cycle de développement d’un système numérique sur FPGA.
  • Créer, compiler et simuler une première description VHDL.

Compétences visées

  • Lire l’interface d’un composant décrit en VHDL.
  • Associer une instruction HDL à une fonction matérielle probable.
  • Identifier les parties simulables, synthétisables et non synthétisables d’un projet.
  • Interpréter les messages d’analyse syntaxique et les chronogrammes de simulation.
  • Choisir une chaîne d’outils adaptée à une activité d’apprentissage ou à un projet FPGA.

Sommaire du chapitre

1. 2.1 Définition d’un HDL

2. 2.2 Principaux langages HDL

3. 2.3 Programme logiciel et description matérielle

4. 2.4 Cycle de développement d’un système numérique

5. Travaux pratiques : premier projet et simulation d’une porte logique

6. Synthèse, autoévaluation et glossaire

Idée directrice

Une description HDL est un modèle de matériel. Les lignes écrites dans le fichier source sont interprétées comme des circuits pouvant fonctionner simultanément, et non comme une liste d’instructions exécutées une à une par défaut.

 

2.1 Définition d’un HDL

2.1.1 Qu’est-ce qu’un langage de description matérielle ?

L’acronyme HDL signifie Hardware Description Language, c’est-à-dire langage de description matérielle. Un HDL est un langage formel destiné à décrire l’organisation, le comportement et le fonctionnement temporel d’un circuit électronique numérique. Il permet de représenter aussi bien une porte logique élémentaire qu’un processeur, un contrôleur de communication, un filtre numérique ou un système complet intégré dans un FPGA.

Un fichier HDL constitue un modèle du circuit. Ce modèle peut être analysé par un simulateur afin d’en vérifier le comportement, puis par un outil de synthèse afin d’en déduire une architecture composée de portes, de bascules, de multiplexeurs, de mémoires et d’autres ressources disponibles dans la technologie cible.

Description matérielle : représentation textuelle d’un circuit, de ses interfaces, de ses ressources internes et de leurs relations.

Modèle : abstraction suffisamment précise pour prévoir le comportement du circuit sans le construire immédiatement.

Technologie cible : famille de composants dans laquelle la description doit être implantée, par exemple un FPGA particulier ou une bibliothèque de cellules ASIC.

Pourquoi ne pas dessiner uniquement des schémas ?

Les schémas logiques restent utiles pour comprendre une architecture ou documenter un bloc. Toutefois, ils deviennent difficiles à produire, à modifier et à vérifier lorsque le nombre de signaux augmente. Une description textuelle apporte une meilleure modularité, facilite la réutilisation et permet d’automatiser les tests. Elle peut également être versionnée, comparée et intégrée dans une chaîne de développement collaborative.

Critère

Schéma logique

Description HDL

LisibilitéTrès bonne pour un petit circuitBonne si le code est structuré et documenté
ÉvolutionModifications manuelles parfois longuesParamétrage et réutilisation facilités
VérificationInspection visuelle et simulation éventuelleSimulation automatisable et assertions possibles
Taille du projetPeu adapté aux architectures très complexesAdapté aux projets hiérarchiques de grande taille
Gestion des versionsComparaison graphique délicateComparaison ligne par ligne et historique des modifications
PortabilitéDépend souvent de l’outil de dessinPossible entre outils si les normes sont respectées

 

2.1.2 Rôle d’un langage de description matérielle

Le HDL sert de langage commun entre la spécification fonctionnelle et la réalisation physique. Il formalise ce que le circuit doit faire, précise ses interfaces et fournit aux outils les informations nécessaires à la vérification et à l’implémentation.

  • Décrire les entrées, les sorties et les paramètres d’un composant.
  • Exprimer les relations logiques et arithmétiques entre les signaux.
  • Décrire les éléments mémorisants et leur synchronisation par une horloge.
  • Construire une architecture hiérarchique à partir de sous-composants.
  • Créer des modèles destinés à la simulation fonctionnelle ou temporelle.
  • Fournir une description synthétisable pouvant devenir un circuit réel.
  • Documenter de manière non ambiguë les choix d’architecture.

Point de vigilance

Un code HDL syntaxiquement correct n’est pas nécessairement synthétisable. Certaines constructions servent uniquement à la simulation, par exemple la génération de stimuli avec des retards explicites.

 

2.1.3 Représentation d’un circuit numérique

La représentation d’un circuit repose sur plusieurs niveaux d’abstraction. Plus le niveau est élevé, plus le concepteur décrit la fonction globale sans détailler chaque porte. Plus le niveau est bas, plus la description se rapproche des ressources matérielles élémentaires. Le choix du niveau dépend de l’objectif : compréhension, simulation rapide, synthèse, optimisation ou description d’un composant technologique précis.

Niveau

Éléments décrits

Exemple

Utilité principale

SystèmeFonctions et échanges entre grands sous-systèmesChaîne acquisition–traitement–communicationArchitecture générale et partitionnement
ComportementalRésultat attendu en fonction des entrées et de l’étatAlgorithme de contrôle ou machine à étatsModélisation fonctionnelle
RTLTransferts entre registres et logique combinatoireRegistre, compteur, UAL, multiplexeurSynthèse numérique courante
PortesPortes logiques et bascules interconnectéesNetlist de cellulesAnalyse après synthèse
PhysiquePlacement, routage et délais réelsRessources FPGA placéesImplémentation et analyse temporelle

 

L’interface : la frontière du composant

Avant de décrire le fonctionnement interne, il faut définir l’interface du composant. En VHDL, cette interface est déclarée dans une entité. Les ports indiquent les noms des signaux, leur direction et leur type. Cette séparation permet de modifier l’architecture interne sans nécessairement changer les blocs qui utilisent le composant.

ZONE DE CODE — VHDL — Interface d’une porte ET à deux entrées

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

 

entity porte_et is

    port (

        a : in  std_logic;

        b : in  std_logic;

        y : out std_logic

    );

end entity porte_et;

L’entité décrit uniquement l’interface. Le fonctionnement interne est défini dans une architecture séparée.

 

 

2.1.4 Description de la structure et du comportement

Description structurelle

Une description structurelle indique de quels sous-composants le circuit est constitué et comment ils sont connectés. Elle correspond à une vue d’assemblage. Chaque instance représente un bloc matériel distinct. Cette approche est adaptée à la conception hiérarchique, à la réutilisation de composants et à la représentation explicite d’une architecture.

  • Déclaration ou référence des sous-composants.
  • Création d’instances distinctes.
  • Connexion des ports par des signaux internes.
  • Organisation hiérarchique du système.
ZONE DE CODE — VHDL — Structure d’un circuit composé de deux portes

architecture structurelle of circuit_exemple is

    signal s_interne : std_logic;

begin

    U1 : entity work.porte_et

        port map (

            a => x1,

            b => x2,

            y => s_interne

        );

 

    U2 : entity work.porte_ou

        port map (

            a => s_interne,

            b => x3,

            y => sortie

        );

end architecture structurelle;

Les instances U1 et U2 correspondent à deux ressources matérielles présentes simultanément.

 

 

Description comportementale

Une description comportementale exprime la fonction réalisée sans imposer directement l’assemblage détaillé des portes. Le concepteur décrit la relation entre les entrées, l’état interne et les sorties. L’outil de synthèse choisit ensuite une structure équivalente compatible avec les contraintes et la technologie cible.

ZONE DE CODE — VHDL — Comportement d’une porte ET

architecture comportementale of porte_et is

begin

    y <= a and b;

end architecture comportementale;

L’affectation concurrente exprime directement l’équation logique y = a ET b.

 

 

Description par flot de données

Le style par flot de données met l’accent sur les transformations appliquées aux signaux. Il utilise souvent des affectations concurrentes et convient particulièrement aux circuits combinatoires. Dans la pratique, les styles structurel, comportemental et par flot de données peuvent coexister dans un même projet.

Style

Question principale

Avantage

Limite

StructurelQuels blocs et quelles connexions ?Architecture explicite et réutilisableVerbeux pour une fonction simple
ComportementalQuel comportement doit être obtenu ?Description compacte et proche de la spécificationStructure finale moins visible dans le code
Flot de donnéesComment les signaux sont-ils transformés ?Très lisible pour les équations combinatoiresMoins adapté aux contrôleurs complexes

 

2.1.5 Simulation

La simulation exécute le modèle HDL dans un environnement logiciel afin d’observer son comportement au cours du temps. Elle ne crée pas encore le circuit physique. Le simulateur calcule les changements de signaux, respecte les événements et affiche généralement les résultats sous forme de chronogrammes.

Démarche de simulation fonctionnelle

1

Préparer le composant et son banc de test

 

2

Analyser puis élaborer les unités VHDL

 

3

Lancer la simulation et appliquer les stimuli

 

4

Observer les chronogrammes et les messages

 

5

Corriger le modèle ou le test jusqu’à validation

 

Éléments d’une simulation

  • Le composant à tester, souvent appelé DUT, pour Design Under Test.
  • Un banc de test qui génère les entrées et définit les scénarios.
  • Un modèle du temps permettant de représenter l’horloge, les événements et certains retards.
  • Des observations ou assertions permettant de comparer les sorties aux résultats attendus.
  • Un chronogramme pour visualiser les valeurs des signaux dans le temps.

Simulation fonctionnelle et simulation temporelle

Aspect

Simulation fonctionnelle

Simulation temporelle

ObjectifVérifier la logique et les séquencesVérifier le comportement avec les délais physiques
MomentAvant ou après synthèseAprès synthèse ou après placement-routage
DélaisSouvent idéalisésDélais issus de la technologie et du routage
VitesseGénéralement rapidePlus lente et plus détaillée
Défauts détectésErreur fonctionnelle, mauvaise transition, cas oubliéViolation de temps, propagation excessive, problème d’horloge

 


 

 

2.1.6 Synthèse

La synthèse transforme une description HDL synthétisable en une représentation matérielle appelée netlist. Cette netlist contient des éléments logiques et leurs connexions. Pour un FPGA, l’outil cherche à utiliser les LUT, les bascules, les mémoires, les blocs DSP et les autres ressources disponibles dans la famille sélectionnée.

Transformation réalisée par l’outil de synthèse

1

Lire la description HDL et les paramètres

 

2

Construire une représentation interne du circuit

 

3

Déduire les opérateurs, registres, mémoires et multiplexeurs

 

4

Optimiser la logique tout en conservant le comportement

 

5

Mapper les fonctions sur les ressources de la technologie cible

 

6

Produire une netlist et un rapport de synthèse

 

Notion de code synthétisable

Une construction est synthétisable lorsqu’un outil peut lui associer une réalisation matérielle finie et déterminée. Par exemple, une affectation logique peut devenir une LUT, une condition dans un processus cadencé peut devenir une logique de commande autour de bascules, et un tableau correctement décrit peut être implanté dans une mémoire interne.

Construction

Simulation

Synthèse habituelle

Interprétation

Affectation logiqueOuiOuiLogique combinatoire
Processus avec front d’horlogeOuiOuiBascules ou registres
Boucle à bornes statiquesOuiSouvent ouiRéplication ou organisation de matériel
Retard explicite afterOuiGénéralement nonModélisation temporelle, pas une ressource logique portable
Lecture d’un fichier de stimuliOuiGénéralement nonFonction du banc de test
Attente non liée à une horlogeOuiLimitée ou nonÀ réserver principalement à la simulation

 

Simulation correcte ≠ matériel correct

La simulation valide le modèle testé. La synthèse et l’implémentation peuvent révéler d’autres problèmes : ressources insuffisantes, chemins trop lents, signaux non contraints ou différences entre une construction simulable et son équivalent matériel.

 

2.2 Principaux langages HDL

Plusieurs langages sont utilisés pour décrire et vérifier les circuits numériques. VHDL et Verilog sont les deux langages HDL historiques les plus répandus. SystemVerilog étend Verilog avec des mécanismes de conception et surtout de vérification plus riches. Le choix dépend de la culture de l’équipe, des outils, des bibliothèques existantes et des exigences du projet.

2.2.1 VHDL

VHDL signifie VHSIC Hardware Description Language. C’est un langage fortement typé, structuré autour d’unités de conception clairement séparées. Une entité définit l’interface d’un composant et une ou plusieurs architectures peuvent en décrire le fonctionnement. Les paquetages regroupent des types, constantes, fonctions et procédures réutilisables.

Caractéristiques de VHDL

  • Typage fort permettant de détecter de nombreuses incohérences dès l’analyse.
  • Syntaxe explicite et adaptée aux projets fortement documentés.
  • Séparation claire entre interface et architecture.
  • Gestion naturelle de la concurrence et des processus.
  • Possibilité de définir des types complexes et des paquetages.
  • Normalisation permettant une bonne portabilité lorsque les bibliothèques standards sont utilisées.
ZONE DE CODE — VHDL — Description complète d’une porte OU

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

 

entity porte_ou is

    port (

        a : in  std_logic;

        b : in  std_logic;

        y : out std_logic

    );

end entity porte_ou;

 

architecture rtl of porte_ou is

begin

    y <= a or b;

end architecture rtl;

 

 

Le typage de VHDL oblige le concepteur à préciser la nature des signaux et à effectuer des conversions explicites lorsque les représentations diffèrent. Cette rigueur peut produire davantage de lignes, mais elle améliore la lisibilité des interfaces et réduit certaines erreurs silencieuses.

2.2.2 Verilog

Verilog utilise une syntaxe plus concise, historiquement proche de celle du langage C. Un module regroupe l’interface et le comportement. Les affectations continues décrivent la logique combinatoire, tandis que les blocs procéduraux permettent d’exprimer des comportements combinatoires ou séquentiels.

Caractéristiques de Verilog

  • Syntaxe compacte et généralement rapide à apprendre pour une personne connaissant le langage C.
  • Description des interfaces et du comportement dans un module.
  • Large utilisation dans la conception de circuits intégrés et dans de nombreuses bibliothèques industrielles.
  • Typage historiquement moins strict que VHDL, ce qui exige une attention particulière aux largeurs et aux signes.
  • Support des descriptions structurelles, comportementales et RTL.
ZONE DE CODE — Verilog — Porte OU équivalente

module porte_ou (

    input  wire a,

    input  wire b,

    output wire y

);

    assign y = a | b;

endmodule

Cette description réalise la même fonction que l’exemple VHDL précédent.

 

 

2.2.3 SystemVerilog

SystemVerilog est une extension majeure de Verilog. Il améliore la description RTL avec des types plus riches et des constructions explicites, telles que les blocs combinatoires et séquentiels dédiés. Il ajoute aussi des fonctions avancées de vérification : assertions, interfaces, classes, contraintes aléatoires et mécanismes de couverture.

  • Types logiques et structures de données plus expressifs.
  • Blocs always_comb, always_ff et always_latch clarifiant l’intention du concepteur.
  • Interfaces facilitant le regroupement de signaux associés.
  • Assertions pour exprimer et vérifier des propriétés temporelles.
  • Fonctionnalités orientées objet utilisées dans les environnements de vérification.
  • Base de méthodologies industrielles de vérification, notamment les environnements à composants réutilisables.
ZONE DE CODE — SystemVerilog — Multiplexeur combinatoire

module mux2 (

    input  logic a,

    input  logic b,

    input  logic sel,

    output logic y

);

    always_comb begin

        if (sel == 1'b0)

            y = a;

        else

            y = b;

    end

endmodule

 

 

2.2.4 Comparaison générale entre VHDL et Verilog

Critère

VHDL

Verilog

Style syntaxiqueVerbeux, explicite et proche d’un langage de spécificationCompact et proche du style C
TypageFort et strictPlus permissif dans sa forme historique
InterfaceEntité séparée de l’architectureInterface intégrée au module
RéutilisationPaquetages, génériques, types définisParamètres, fonctions, includes et modules
ConcurrenceInstructions concurrentes et processusAffectations continues et blocs procéduraux
LisibilitéTrès explicite pour les interfaces complexesTrès compacte pour les blocs RTL courants
Erreurs de largeurSouvent signalées grâce au typagePeuvent nécessiter une discipline accrue
Domaines d’usageFormation, FPGA, aéronautique, défense et nombreux projets industrielsASIC, FPGA et écosystèmes industriels variés
Normes modernesVHDL-2008 apporte plusieurs simplificationsSystemVerilog prolonge et enrichit Verilog

 

Même fonction, deux écritures

Les deux exemples suivants décrivent un multiplexeur à deux entrées. Malgré des syntaxes différentes, la synthèse doit produire une fonction matérielle équivalente.

ZONE DE CODE — VHDL — Multiplexeur 2 vers 1

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

 

entity mux2 is

    port (

        a   : in     std_logic;

        b   : in     std_logic;

        sel : in  std_logic;

        y   : out std_logic

    );

end entity mux2;

 

architecture rtl of mux2 is

begin

    y <= a when sel = '0' else b;

end architecture rtl;

 

 

ZONE DE CODE — Verilog — Multiplexeur 2 vers 1

module mux2 (

    input  wire a,

    input  wire b,

    input  wire sel,

    output wire y

);

    assign y = (sel == 1'b0) ? a : b;

endmodule

 

 

Comment choisir un langage ?

Il n’existe pas de langage universellement supérieur. Pour un nouveau projet, le choix doit être cohérent avec les compétences de l’équipe, la chaîne d’outils, les composants réutilisables, les exigences de certification et la stratégie de vérification. Dans un cours consacré à VHDL, l’objectif est d’acquérir des principes de conception qui restent largement transférables aux autres HDL.

Situation

Choix raisonnable

Formation nécessitant une forte rigueur de typageVHDL
Projet réutilisant une importante bibliothèque VHDLVHDL
Équipe maîtrisant Verilog et chaîne de vérification associéeVerilog ou SystemVerilog
Vérification avancée avec assertions et environnement orienté objetSystemVerilog
Projet mixte avec composants tiersLangage principal de l’équipe et simulation multilangage si l’outil le permet

 

2.3 Programme logiciel et description matérielle

La principale difficulté pour un débutant consiste à ne pas interpréter le VHDL comme un langage de programmation classique. Un programme logiciel fournit des instructions à un processeur existant. Une description matérielle définit au contraire les ressources et les connexions qui réaliseront les opérations. Cette différence modifie la manière de raisonner sur l’ordre d’exécution, le temps, les données et les performances.

2.3.1 Exécution séquentielle d’un programme

Dans un modèle logiciel simple, un processeur lit une instruction, la décode puis l’exécute avant de passer à la suivante. Les opérations semblent donc se dérouler selon l’ordre écrit. Les systèmes modernes utilisent des mécanismes internes de parallélisme, mais le programmeur conserve généralement un modèle d’exécution séquentiel pour chaque fil d’exécution.

ZONE DE CODE — Pseudo-code logiciel — Calcul logiciel séquentiel

lire a

lire b

somme    = a + b

produit  = a * b

resultat = somme - produit

afficher resultat

Les étapes sont exprimées dans l’ordre où elles doivent être exécutées par le programme.

 

 

Le temps d’exécution dépend du nombre d’instructions, de l’architecture du processeur, de sa fréquence, des accès mémoire et du système d’exploitation éventuel. Une même unité arithmétique peut être utilisée successivement pour plusieurs opérations.

2.3.2 Fonctionnement parallèle d’un circuit

Dans un circuit, plusieurs ressources physiques peuvent travailler au même instant. Une porte ET ne doit pas attendre qu’une autre porte OU ait terminé une instruction indépendante : chaque bloc réagit aux variations de ses entrées. De même, plusieurs registres peuvent mémoriser leurs valeurs sur le même front d’horloge.

ZONE DE CODE — VHDL — Trois relations concurrentes

architecture rtl of calcul_parallele is

begin

    somme   <= a + b;

    produit <= a * b;

    zero    <= '1' when a = 0 else '0';

end architecture rtl;

Les trois affectations représentent trois fonctions matérielles actives en parallèle. Leur ordre dans le fichier ne définit pas une séquence d’exécution.

 

 

Conséquence essentielle

Échanger l’ordre de deux affectations concurrentes indépendantes ne change normalement pas le circuit obtenu. En revanche, l’ordre des instructions à l’intérieur d’un processus peut avoir une signification séquentielle pour la simulation de ce processus.

 

2.3.3 Instructions logicielles et composants matériels

Écriture ou notion

Interprétation logicielle

Interprétation matérielle probable

AdditionInstruction exécutée par une unité arithmétique du processeurAdditionneur combinatoire ou bloc DSP
ConditionChoix du prochain chemin d’instructionsMultiplexeur, comparateur et logique de commande
Variable persistanteEmplacement en mémoireRegistre, mémoire distribuée ou bloc RAM
BoucleRépétition dans le tempsRéplication de matériel ou contrôleur séquentiel selon la description
FonctionCode appelé pendant l’exécutionLogique combinatoire réutilisée ou dupliquée selon le contexte
DélaiAttente gérée par le logiciel ou le systèmeCompteur d’horloge, protocole ou contrainte temporelle

 

Exemple : une condition devient un multiplexeur

ZONE DE CODE — VHDL — Sélection d’une entrée

process(a, b, sel)

begin

    if sel = '0' then

        y <= a;

    else

        y <= b;

    end if;

end process;

En synthèse, cette condition combinatoire correspond typiquement à un multiplexeur 2 vers 1.

 

 

Exemple : un front d’horloge devient un registre

ZONE DE CODE — VHDL — Mémorisation synchrone

process(clk)

begin

    if rising_edge(clk) then

        q <= d;

    end if;

end process;

La valeur de d est mémorisée dans une bascule au front montant de clk.

 

 

2.3.4 Notion de concurrence

La concurrence signifie que plusieurs instructions ou processus représentent des blocs actifs simultanément. Chaque instruction concurrente peut dépendre de signaux produits par d’autres blocs. Le simulateur organise les événements afin de calculer une évolution cohérente de tous les signaux.

Concurrence entre processus

ZONE DE CODE — VHDL — Deux processus actifs en parallèle

P_REGISTRE : process(clk)

begin

    if rising_edge(clk) then

        q <= d;

    end if;

end process;

 

P_SORTIE : process(q, enable)

begin

    if enable = '1' then

        y <= q;

    else

        y <= '0';

    end if;

end process;

P_REGISTRE et P_SORTIE sont concurrents. Les instructions internes de chacun sont évaluées séquentiellement lors de l’activation du processus.

 

 

Concurrence ne signifie pas absence d’ordre temporel

Un circuit parallèle reste soumis à la causalité et aux délais de propagation. Une sortie ne peut prendre une nouvelle valeur qu’après la modification des entrées et la propagation à travers la logique. Dans une conception synchrone, l’horloge impose des instants communs de mémorisation, tandis que la logique combinatoire calcule les valeurs entre deux fronts.

Fonctionnement simplifié d’un système synchrone

1

Un front d’horloge met à jour les registres

 

2

Les nouvelles valeurs se propagent dans la logique combinatoire

 

3

Les résultats se stabilisent avant le front suivant

 

4

Le front suivant mémorise les nouveaux résultats

 

2.3.5 Impact du matériel sur la conception

Le code HDL n’est pas indépendant des ressources. Chaque opération possède un coût en surface, en délai et en consommation. Une multiplication peut utiliser un bloc DSP ou une importante quantité de logique. Un grand tableau peut nécessiter une mémoire interne. Une division entière générale peut devenir un circuit coûteux. Le concepteur doit donc connaître les conséquences matérielles des choix d’écriture.

Principales contraintes

  • Surface : nombre de LUT, bascules, mémoires, DSP et entrées-sorties utilisés.
  • Fréquence maximale : vitesse à laquelle le circuit peut fonctionner sans violation temporelle.
  • Latence : nombre de cycles ou temps écoulé entre l’entrée et la sortie correspondante.
  • Débit : quantité de données pouvant être traitée par unité de temps.
  • Consommation : énergie dynamique due aux commutations et consommation statique du composant.
  • Précision : largeur des données, représentation signée ou non signée, virgule fixe ou flottante.
  • Testabilité : possibilité d’observer, de stimuler et de vérifier les blocs.

Compromis entre parallélisme et partage de ressources

Approche

Ressources

Débit

Latence

Complexité de commande

Deux opérateurs en parallèlePlus élevéesÉlevéFaible à modéréeFaible
Un opérateur partagé dans le tempsRéduitesPlus faiblePlus élevéePlus importante
Architecture pipelineRegistres supplémentairesTrès élevé après remplissagePlusieurs cyclesModérée

 

Exemple conceptuel : duplication ou partage

ZONE DE CODE — VHDL — Architecture parallèle

s1 <= a + b;

s2 <= c + d;

Deux additions indépendantes peuvent conduire à deux additionneurs actifs simultanément.

 

 

ZONE DE CODE — Pseudo-code matériel — Architecture partagée — principe

selon etat faire

    ETAT_1 : operateur <= a + b

    ETAT_2 : memoriser premier_resultat

    ETAT_3 : operateur <= c + d

    ETAT_4 : memoriser second_resultat

fin selon

Le partage d’un additionneur exige un contrôleur et plusieurs cycles. Ce pseudo-code illustre l’idée sans constituer une description VHDL complète.

 

 

Règles de raisonnement recommandées

1. Identifier les données qui doivent être mémorisées et celles qui peuvent rester combinatoires.

2. Déterminer quelles opérations doivent réellement être simultanées.

3. Estimer la largeur de chaque signal avant d’écrire les expressions arithmétiques.

4. Associer chaque construction à une ressource matérielle probable.

5. Prévoir l’horloge, le reset, les validations et les interfaces dès l’architecture initiale.

6. Vérifier après synthèse que le matériel inféré correspond à l’intention.

2.4 Cycle de développement d’un système numérique

Le développement FPGA est un processus itératif. Chaque étape produit des résultats qui peuvent conduire à revenir sur la spécification, l’architecture ou le code. La réussite ne consiste pas seulement à obtenir une compilation sans erreur : le système doit respecter sa fonction, ses contraintes temporelles, ses ressources et son comportement réel sur la carte.

Cycle principal de conception

1

Spécification

 

2

Description VHDL

 

3

Analyse syntaxique

 

4

Élaboration

 

5

Simulation fonctionnelle

 

6

Synthèse

 

7

Placement et routage

 

8

Analyse temporelle

 

9

Génération du fichier de configuration

 

10

Programmation du FPGA

 

11

Validation sur la carte

 

2.4.1 Spécification

La spécification décrit ce que le système doit réaliser, dans quelles conditions et avec quelles performances. Elle doit être vérifiable. Une formulation vague telle que « le système doit être rapide » doit être remplacée par une exigence mesurable : fréquence d’échantillonnage, latence maximale, débit minimal ou fréquence d’horloge visée.

Contenu d’une spécification utile

  • Fonctions attendues et cas de fonctionnement.
  • Liste des entrées, sorties et protocoles.
  • Format, largeur et cadence des données.
  • Horloges, resets et conditions d’initialisation.
  • Contraintes de débit, de latence et de précision.
  • Comportement en cas d’erreur ou d’entrée invalide.
  • Ressources ou composants imposés.
  • Critères d’acceptation et scénarios de test.

Bonne pratique

Associer à chaque exigence un test prévu. Cette traçabilité évite de terminer la conception sans pouvoir démontrer que le cahier des charges est respecté.

 

2.4.2 Description VHDL

La description VHDL traduit l’architecture retenue en unités de conception. Le projet est généralement décomposé en composants simples : interface, chemin de données, contrôleur, mémoires et blocs de communication. Chaque bloc doit avoir un rôle précis et une interface stable.

  • Créer les entités et définir les ports.
  • Choisir les types de signaux et leurs largeurs.
  • Décrire la logique combinatoire et séquentielle.
  • Instancier les sous-composants dans une architecture hiérarchique.
  • Ajouter des génériques pour les paramètres réutilisables.
  • Documenter les hypothèses d’horloge, de reset et de protocole.
ZONE DE CODE — VHDL — Squelette minimal d’une unité VHDL

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

 

entity nom_composant is

    port (

        entree  : in     std_logic;

        sortie  : out std_logic

    );

end entity nom_composant;

 

architecture rtl of nom_composant is

begin

    -- Description concurrente du matériel

end architecture rtl;

 

 

2.4.3 Analyse syntaxique

L’analyse syntaxique vérifie que le texte respecte la grammaire du langage et que les identificateurs, types, bibliothèques et unités référencées sont cohérents. Cette étape détecte les parenthèses manquantes, les mots-clés incorrects, les incompatibilités de types et les références inconnues.

Type d’erreur

Exemple de cause

Méthode de correction

SyntaxePoint-virgule ou end manquantLire la première erreur signalée et vérifier le bloc concerné
Nom inconnuSignal mal orthographié ou unité absenteComparer la déclaration et l’utilisation
Type incompatibleMélange entre vecteur logique et valeur numériqueEmployer les bons types et conversions
Bibliothèque absentePaquetage non importéAjouter les clauses library et use nécessaires
Largeur incompatibleAffectation de vecteurs de tailles différentesRedimensionner explicitement ou corriger l’interface

 

2.4.4 Élaboration

L’élaboration construit l’instance complète du modèle à partir de l’entité de plus haut niveau. L’outil résout les génériques, relie les architectures, instancie les sous-composants et crée la hiérarchie qui sera simulée ou synthétisée. Une unité peut être syntaxiquement correcte mais échouer à l’élaboration si un composant manque ou si les ports ne correspondent pas.

  • Choix de l’entité de niveau supérieur.
  • Association des architectures aux entités.
  • Évaluation des génériques et constantes statiques.
  • Création des instances et vérification des associations de ports.
  • Construction de la hiérarchie finale du modèle.

2.4.5 Simulation fonctionnelle

La simulation fonctionnelle vérifie le comportement logique sans dépendre du placement physique final. Le banc de test applique des combinaisons d’entrées, des séquences temporelles et des cas limites. Les sorties sont observées ou comparées automatiquement aux valeurs attendues.

Stratégie de test

1. Tester les valeurs nominales les plus simples.

2. Tester les valeurs limites et les changements proches des fronts d’horloge.

3. Tester chaque branche conditionnelle et chaque transition d’état.

4. Tester les resets, activations et situations d’erreur.

5. Automatiser les comparaisons par des assertions lorsque cela est possible.

6. Conserver les tests afin d’éviter les régressions lors des modifications.

2.4.6 Synthèse

Après validation fonctionnelle, l’outil de synthèse infère les ressources et optimise la logique. Le rapport de synthèse fournit des informations essentielles : nombres de LUT, bascules, mémoires et DSP, avertissements, horloges détectées et schémas RTL. Il faut vérifier ce rapport plutôt que de considérer la fin de la synthèse comme une validation automatique.

Élément du rapport

Question à se poser

Ressources utiliséesL’utilisation est-elle cohérente avec la fonction ?
Latches inférésSont-ils intentionnels ou dus à une affectation combinatoire incomplète ?
Horloges détectéesToutes les horloges sont-elles prévues et contraintes ?
Signaux supprimésLe circuit a-t-il été optimisé parce qu’une sortie n’est pas connectée ?
Multiplicateurs et mémoiresLes blocs spécialisés attendus ont-ils été utilisés ?
AvertissementsIndiquent-ils une ambiguïté fonctionnelle ou seulement une information maîtrisée ?

 

2.4.7 Placement et routage

Le placement associe chaque ressource logique de la netlist à une ressource physique du FPGA. Le routage choisit les interconnexions permettant de relier ces ressources. Ces décisions influencent les délais, la consommation et parfois la possibilité même d’implanter le projet.

  • Placement des LUT, bascules, mémoires et DSP.
  • Affectation des entrées-sorties aux broches physiques.
  • Utilisation des réseaux dédiés à l’horloge.
  • Routage des signaux et estimation des délais.
  • Résolution des congestions et optimisation des chemins critiques.

2.4.8 Analyse temporelle

L’analyse temporelle vérifie que les données ont suffisamment de temps pour se propager entre deux éléments séquentiels et qu’elles respectent les contraintes de setup et de hold. Elle s’appuie sur les contraintes d’horloge et sur les délais calculés après placement-routage.

Chemin critique : chemin dont le délai limite la fréquence maximale du circuit.

Slack : marge entre le temps disponible et le temps nécessaire ; une marge négative indique généralement une contrainte non respectée.

Setup : durée pendant laquelle la donnée doit être stable avant le front actif de l’horloge.

Hold : durée pendant laquelle la donnée doit rester stable après le front actif.

Erreur fréquente

Une simulation fonctionnelle parfaite ne garantit pas le respect des contraintes temporelles. Sans contrainte d’horloge correcte, l’outil ne peut pas vérifier sérieusement la fréquence souhaitée.

 

2.4.9 Génération du fichier de configuration

Lorsque l’implémentation est valide, l’outil génère un fichier de configuration contenant les informations nécessaires pour configurer les ressources du FPGA. Le nom et le format du fichier dépendent du constructeur et du mode de programmation. Ce fichier n’est pas un programme exécutable par un processeur : il définit l’état des éléments configurables du composant.

2.4.10 Programmation du FPGA

La programmation transfère le fichier de configuration vers le FPGA ou vers une mémoire de configuration associée. Une configuration directement chargée dans le FPGA est souvent volatile : elle disparaît à la coupure de l’alimentation. Une mémoire externe non volatile peut être utilisée pour recharger automatiquement la configuration au démarrage.

  • Connecter la carte et vérifier son alimentation.
  • Sélectionner l’interface de programmation appropriée.
  • Détecter le composant dans l’outil.
  • Choisir le fichier de configuration généré.
  • Lancer le transfert et vérifier l’état de fin.

2.4.11 Validation sur la carte

La validation matérielle confronte la conception au fonctionnement réel des boutons, LED, horloges, capteurs et interfaces. Elle peut révéler des défauts absents du banc de test : rebond des boutons, polarité inversée, broche mal affectée, niveau électrique incorrect, entrée asynchrone ou hypothèse erronée sur la fréquence de l’oscillateur.

Plan de validation

1. Vérifier les alimentations, l’horloge et les contraintes de broches.

2. Tester un comportement simple permettant de confirmer la programmation.

3. Valider chaque interface indépendamment avant le système complet.

4. Comparer les observations avec les scénarios du banc de test.

5. Ajouter des signaux de diagnostic ou un analyseur logique embarqué si nécessaire.

6. Documenter les écarts, les corrections et la configuration utilisée.

Boucles d’itération

Le cycle n’est pas strictement linéaire. Une erreur de simulation impose de modifier le code ou le test. Une utilisation excessive des ressources peut nécessiter une nouvelle architecture. Une violation temporelle peut conduire à ajouter des registres de pipeline, réduire la profondeur logique ou modifier les contraintes. Un problème sur la carte peut révéler une spécification incomplète.

Problème observé

Étape de retour probable

Action typique

Sortie logique incorrecteDescription ou spécificationCorriger l’équation, le processus ou le cas de test
Unité introuvableAnalyse/élaborationCorriger la hiérarchie, la bibliothèque ou l’ordre de compilation
Trop de ressourcesArchitecturePartager certaines ressources ou réduire la largeur des données
Fréquence non atteinteRTL ou contraintesAjouter du pipeline, réduire le chemin critique, corriger les contraintes
Carte sans réactionProgrammation ou contraintes de brochesVérifier le fichier, le composant, l’horloge et les E/S
Comportement instableInterface matérielleSynchroniser les entrées et traiter le rebond

 

Travaux pratiques — Premier environnement VHDL

Ce travail pratique conduit l’étudiant depuis l’installation ou l’ouverture d’un environnement de développement jusqu’à la simulation complète d’une porte logique. Deux types de chaînes peuvent être utilisés : un environnement fourni par un constructeur de FPGA, ou une chaîne libre composée d’un analyseur-simulateur et d’un visualiseur de chronogrammes.

Objectifs du TP

  • Identifier les principales zones de l’environnement de développement.
  • Créer un projet et choisir l’unité de niveau supérieur.
  • Écrire une entité et une architecture VHDL simples.
  • Analyser et élaborer le projet.
  • Créer un banc de test et générer des stimuli.
  • Lancer une simulation et interpréter un chronogramme.
  • Diagnostiquer des erreurs courantes de compilation.

Matériel et logiciels possibles

Option

Éléments

Usage

Environnement constructeurVivado, Quartus Prime ou environnement équivalentProjet FPGA complet, synthèse et programmation
Chaîne libreGHDL et GTKWaveAnalyse VHDL, simulation et chronogrammes
Environnement en ligneÉditeur et simulateur HDL dans un navigateurDécouverte rapide sans installation locale
Éditeur de texteVisual Studio Code ou éditeur équivalentÉcriture du code avec coloration syntaxique

 

Organisation des fichiers

Créer un dossier dédié au TP. Utiliser des noms simples, sans espaces ni caractères accentués pour les fichiers et unités VHDL. Conserver le composant et le banc de test dans des fichiers distincts.

 

TP 2.1 — Installation et découverte de l’environnement

Étape 1 — Vérifier l’installation

  • Ouvrir l’environnement choisi et identifier sa version.
  • Vérifier que le simulateur VHDL est disponible.
  • Dans un environnement constructeur, vérifier que la famille de FPGA visée est installée.
  • Dans une chaîne en ligne de commande, vérifier que les exécutables sont accessibles.
ZONE DE CODE — Terminal — Vérification d’une chaîne GHDL

ghdl --version

gtkwave --version

La commande exacte peut varier selon le système d’exploitation et la manière dont les logiciels ont été installés.

 

 

Étape 2 — Repérer les fonctions principales

Zone ou commande

Rôle

Explorateur du projetAfficher les fichiers sources et la hiérarchie
ÉditeurÉcrire et corriger le code VHDL
Console ou messagesAfficher les erreurs, avertissements et informations
Lancement de simulationAnalyser, élaborer et exécuter le modèle
Fenêtre de chronogrammesObserver les signaux dans le temps
Outils de synthèseProduire une représentation matérielle et des rapports

 

Questions de découverte

1. Où apparaît la liste des fichiers VHDL du projet ?

2. Comment sélectionner l’entité de niveau supérieur ?

3. Où sont affichées les erreurs de compilation ?

4. Comment ajouter un signal à la fenêtre de chronogrammes ?

5. Quelle commande permet de relancer la simulation après une modification ?

TP 2.2 — Création d’un premier projet

Étape 1 — Créer la structure

1. Créer un nouveau projet nommé tp_porte_et.

2. Choisir VHDL comme langage principal lorsque l’outil demande une préférence.

3. Créer un fichier nommé porte_et.vhd.

4. Définir porte_et comme entité de niveau supérieur pour la conception.

5. Créer ensuite un fichier séparé nommé tb_porte_et.vhd pour la simulation.

Étape 2 — Saisir le composant

ZONE DE CODE — VHDL — Fichier porte_et.vhd

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

 

entity porte_et is

    port (

        a : in  std_logic;

        b : in  std_logic;

        y : out std_logic

    );

end entity porte_et;

 

architecture rtl of porte_et is

begin

    y <= a and b;

end architecture rtl;

Le nom du fichier n’est pas imposé par le langage, mais utiliser le nom de l’entité facilite l’organisation du projet.

 

 

Lecture guidée du code

Élément

Signification

library IEEERend visible la bibliothèque normalisée IEEE
use IEEE.STD_LOGIC_1164.ALLImporte les déclarations du type std_logic et des opérateurs logiques associés
entity porte_etDéfinit l’interface du composant
a, b : inDéclare deux entrées logiques
y : outDéclare une sortie logique
architecture rtlCommence la description interne
y <= a and bDécrit l’équation logique de la porte ET

 

TP 2.3 — Analyse et compilation

Procédure dans un environnement graphique

1. Enregistrer le fichier.

2. Lancer l’analyse ou la compilation du fichier VHDL.

3. Lire tous les messages et corriger d’abord la première erreur réelle.

4. Vérifier que l’entité porte_et apparaît dans la hiérarchie.

5. Lancer l’élaboration si l’outil sépare cette étape de l’analyse.

Procédure possible avec GHDL

ZONE DE CODE — Terminal — Analyse et élaboration

ghdl -a --std=08 porte_et.vhd

ghdl -e --std=08 porte_et

L’option --std=08 demande l’utilisation de la norme VHDL-2008.

 

 

Exercice de diagnostic

Introduire volontairement une erreur à la fois, lancer l’analyse, noter le message puis corriger le fichier. Les erreurs proposées permettent d’apprendre à lire la console sans modifier plusieurs éléments simultanément.

1. Supprimer le point-virgule après la déclaration du port y.

2. Écrire std_logc au lieu de std_logic.

3. Remplacer le nom b dans l’équation par un nom non déclaré.

4. Supprimer la clause use IEEE.STD_LOGIC_1164.ALL.

TP 2.4 — Création du banc de test

Le banc de test ne possède pas de ports externes. Il déclare des signaux internes, instancie le composant à tester et applique successivement toutes les combinaisons des deux entrées.

ZONE DE CODE — VHDL — Fichier tb_porte_et.vhd — déclarations et instance

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

 

entity tb_porte_et is

end entity tb_porte_et;

 

architecture simulation of tb_porte_et is

    signal a : std_logic := '0';

    signal b : std_logic := '0';

    signal y : std_logic;

begin

    DUT : entity work.porte_et

        port map (

            a => a,

            b => b,

            y => y

        );

Cette première zone définit le banc de test, les signaux internes et l’instance du composant testé.

 

 

ZONE DE CODE — VHDL — Fichier tb_porte_et.vhd — processus de stimuli

    STIMULI : process

    begin

        a <= '0'; b <= '0';

        wait for 10 ns;

 

        a <= '0'; b <= '1';

        wait for 10 ns;

 

        a <= '1'; b <= '0';

        wait for 10 ns;

 

        a <= '1'; b <= '1';

        wait for 10 ns;

 

        wait;

    end process STIMULI;

end architecture simulation;

Les instructions wait for sont destinées au banc de test. Elles espacent les stimuli dans le temps et ne décrivent pas ici un circuit à synthétiser.

 

 

Analyse du banc de test

  • L’entité du banc de test est vide car le modèle n’échange pas de signaux avec l’extérieur.
  • Les signaux a, b et y relient le générateur de stimuli au composant testé.
  • DUT est une instance de l’entité porte_et.
  • Le processus STIMULI applique les quatre combinaisons binaires possibles.
  • L’instruction wait finale bloque le processus afin d’éviter de recommencer les stimuli.

Version avec vérification automatique

ZONE DE CODE — VHDL — Ajout d’assertions

STIMULI : process

begin

    a <= '0'; b <= '0'; wait for 10 ns;

    assert y = '0'

        report "Erreur pour a=0, b=0"

        severity error;

 

    a <= '0'; b <= '1'; wait for 10 ns;

    assert y = '0'

        report "Erreur pour a=0, b=1"

        severity error;

 

    a <= '1'; b <= '0'; wait for 10 ns;

    assert y = '0'

        report "Erreur pour a=1, b=0"

        severity error;

 

    a <= '1'; b <= '1'; wait for 10 ns;

    assert y = '1'

        report "Erreur pour a=1, b=1"

        severity error;

 

    report "Fin du test : toutes les combinaisons ont ete appliquees"

        severity note;

    wait;

end process STIMULI;

Les messages sont volontairement écrits sans accents dans le code afin de maximiser la compatibilité entre outils et consoles.

 

 

TP 2.5 — Lancement de la simulation

Dans un environnement graphique

1. Ajouter le banc de test au groupe de sources de simulation.

2. Définir tb_porte_et comme unité de niveau supérieur pour la simulation.

3. Lancer l’analyse, l’élaboration puis la simulation comportementale.

4. Ajouter a, b et y dans la fenêtre de chronogrammes.

5. Afficher une durée d’au moins 40 ns.

6. Vérifier les quatre intervalles et comparer y à la table de vérité de la porte ET.

Avec GHDL et GTKWave

ZONE DE CODE — Terminal — Compilation, simulation et fichier de traces

ghdl -a --std=08 porte_et.vhd

ghdl -a --std=08 tb_porte_et.vhd

ghdl -e --std=08 tb_porte_et

ghdl -r --std=08 tb_porte_et --wave=porte_et.ghw --stop-time=50ns

gtkwave porte_et.ghw

Le fichier de traces porte_et.ghw contient l’évolution des signaux et peut être ouvert dans GTKWave.

 

 

Résultat attendu

Intervalle de simulation

a

b

y attendu

0 ns à 10 ns000
10 ns à 20 ns010
20 ns à 30 ns100
30 ns à 40 ns111

 

Le signal y doit être à 1 uniquement pendant le dernier intervalle. Les changements peuvent apparaître au même instant que les entrées dans une simulation fonctionnelle idéale. L’affichage exact des événements dépend du zoom et de la manière dont le simulateur représente les cycles delta.

TP 2.6 — Exploitation et extensions

Extension A — Porte OU

1. Dupliquer le composant sous le nom porte_ou.

2. Remplacer l’opérateur and par or.

3. Adapter le banc de test et les valeurs attendues.

4. Vérifier que la sortie vaut 1 dès qu’au moins une entrée vaut 1.

Extension B — Porte XOR

1. Créer une entité porte_xor possédant la même interface.

2. Utiliser l’opérateur xor.

3. Écrire des assertions pour les quatre combinaisons.

4. Expliquer dans le compte rendu la différence entre OR et XOR.

Extension C — Regrouper plusieurs fonctions

ZONE DE CODE — VHDL — Petit bloc logique à trois sorties

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

 

entity bloc_logique is

    port (

        a     : in     std_logic;

        b     : in     std_logic;

        y_and : out std_logic;

        y_or  : out std_logic;

        y_xor : out std_logic

    );

end entity bloc_logique;

 

architecture rtl of bloc_logique is

begin

    y_and <= a and b;

    y_or  <= a or b;

    y_xor <= a xor b;

end architecture rtl;

Les trois sorties sont calculées en parallèle par trois fonctions logiques distinctes.

 

 

Dépannage du TP

Symptôme

Cause probable

Correction

porte_et introuvableFichier non analysé ou mauvaise bibliothèqueAnalyser porte_et.vhd avant le banc de test
std_logic inconnuPaquetage non importéVérifier les clauses library et use
Aucun signal visibleSignaux non ajoutés ou mauvaise unité simuléeChoisir tb_porte_et et ajouter les signaux
Simulation s’arrête immédiatementAbsence de stimuli ou durée trop courteVérifier le processus et la durée de simulation
y reste indéfiniComposant non connecté ou architecture incorrecteVérifier le port map et l’affectation de y
Assertions en erreurValeur attendue incorrecte ou défaut du composantComparer avec la table de vérité
Commande inconnueOutil non installé ou chemin non configuréVérifier l’installation et la variable PATH

 

Compte rendu demandé

1. Indiquer l’environnement et la méthode de simulation utilisés.

2. Présenter l’arborescence du projet et le rôle de chaque fichier.

3. Fournir le code du composant et du banc de test.

4. Insérer une capture lisible du chronogramme avec les quatre combinaisons.

5. Expliquer la différence entre l’entité, l’architecture et le banc de test.

6. Préciser pourquoi les affectations concurrentes ne sont pas exécutées comme des instructions logicielles successives.

7. Présenter les éventuelles erreurs rencontrées et les corrections appliquées.

Grille d’évaluation indicative

Critère

Points

Projet correctement organisé2
Composant VHDL valide3
Banc de test complet4
Simulation et chronogramme corrects4
Assertions ou vérification argumentée3
Analyse et qualité du compte rendu4

 

Synthèse du chapitre

  • Un HDL décrit un circuit, ses connexions, son comportement et son évolution temporelle.
  • Une description peut être structurelle, comportementale ou orientée flot de données.
  • La simulation vérifie le modèle ; la synthèse transforme les constructions compatibles en matériel.
  • VHDL est fortement typé et sépare l’entité de l’architecture.
  • Verilog utilise une syntaxe plus compacte ; SystemVerilog enrichit la conception et la vérification.
  • Un programme logiciel exécute des instructions sur un processeur, tandis qu’un HDL peut créer plusieurs ressources actives simultanément.
  • Chaque opération HDL possède un coût possible en ressources, en délai, en latence et en consommation.
  • Le cycle FPGA va de la spécification à la validation matérielle en passant par la simulation, la synthèse, le placement-routage et l’analyse temporelle.

À retenir

Pour lire du VHDL correctement, il faut toujours se demander : quel matériel cette description représente-t-elle, quand ce matériel agit-il, quelles données mémorise-t-il et comment pourra-t-on vérifier son comportement ?

 

Autoévaluation

1. Définir un HDL en une phrase et donner deux usages principaux.

2. Expliquer la différence entre une description structurelle et une description comportementale.

3. Pourquoi une construction simulable peut-elle être non synthétisable ?

4. Citer deux caractéristiques de VHDL et deux caractéristiques de SystemVerilog.

5. Expliquer pourquoi l’ordre de deux affectations concurrentes indépendantes n’impose pas leur ordre d’exécution.

6. À quel composant matériel une condition combinatoire est-elle souvent associée ?

7. Quel est le rôle de l’élaboration ?

8. Quelle différence existe entre la simulation fonctionnelle et l’analyse temporelle ?

9. Pourquoi faut-il lire les avertissements du rapport de synthèse ?

10. Citer trois défauts susceptibles d’apparaître uniquement lors de la validation sur la carte.

Éléments de réponse

  • Un HDL est un langage formel qui modélise la structure et le comportement d’un circuit pour la simulation et la synthèse.
  • Le structurel assemble explicitement des blocs ; le comportemental exprime principalement la fonction attendue.
  • Le simulateur peut représenter des actions sans équivalent matériel portable, comme certains retards explicites ou accès à des fichiers.
  • VHDL est fortement typé et sépare interface et architecture ; SystemVerilog ajoute des blocs RTL explicites, assertions et mécanismes avancés de vérification.
  • Les affectations concurrentes représentent des ressources physiques coexistantes.
  • Une condition combinatoire produit généralement des comparateurs et multiplexeurs.
  • L’élaboration construit la hiérarchie complète du modèle et résout les instances et paramètres.
  • La simulation fonctionnelle valide la logique ; l’analyse temporelle vérifie les délais et contraintes de l’implémentation.
  • Les avertissements peuvent révéler des latches, des signaux supprimés, des largeurs incohérentes ou des horloges non prévues.
  • La carte peut révéler des erreurs de broches, de polarité, d’horloge, de synchronisation ou de rebond des boutons.

Glossaire

Architecture : partie d’une unité VHDL qui décrit le fonctionnement interne d’une entité.

ASIC : circuit intégré conçu pour une application spécifique et fabriqué avec une structure fixe.

Banc de test : modèle VHDL destiné à stimuler un composant et à vérifier ses sorties.

Concurrence : fonctionnement simultané de plusieurs blocs matériels ou instructions concurrentes.

DUT : composant ou système soumis au test dans une simulation.

Élaboration : construction de la hiérarchie complète d’instances avant simulation ou synthèse.

Entité : unité VHDL qui définit le nom, les paramètres et l’interface d’un composant.

FPGA : circuit logique reconfigurable dont les ressources sont organisées après fabrication.

HDL : langage de description matérielle.

Netlist : liste de composants matériels et de leurs connexions.

RTL : niveau de description centré sur les registres et les transferts de données entre eux.

Simulation : évaluation logicielle du comportement d’un modèle HDL.

Synthèse : transformation d’une description HDL en architecture matérielle.

Testbench : terme anglais couramment utilisé pour désigner un banc de test.

VHDL : langage HDL fortement typé utilisé pour la modélisation, la simulation et la synthèse de circuits numériques.

Conclusion

Les langages de description matérielle rendent possible la conception de systèmes numériques complexes à partir de modèles textuels structurés. Leur maîtrise nécessite un changement de perspective : le concepteur ne rédige pas seulement une succession d’actions, il définit une architecture composée de ressources capables d’agir simultanément. La suite du cours approfondira la structure d’une description VHDL, les types de données, les opérateurs et les styles de description nécessaires à la réalisation de circuits combinatoires et séquentiels complets.