C'est trop fastoche !

L'électronique numérique

L'électronique numérique est une branche de l'électronique dans laquelle les informations sont représentées et traitées sous forme de valeurs discrètes. La représentation la plus courante utilise deux états, notés 0 et 1, qui correspondent physiquement à des niveaux électriques définis par le circuit.

Cette manière de représenter l'information permet de manipuler des nombres, des textes, des images, des sons, des mesures et des instructions sous une forme adaptée au traitement électronique. Une information complexe est transformée en une succession de valeurs binaires que les circuits peuvent stocker, déplacer, comparer et modifier.

Du signal électrique à l'information numérique

Dans un circuit électronique réel, un 0 et un 1 ne sont pas des valeurs abstraites. Ils sont représentés par des niveaux de tension ou, dans certaines technologies, par des niveaux de courant ou des états électriques particuliers.

Un circuit numérique définit des plages dans lesquelles une tension est reconnue comme un état logique. Cette distinction permet au système de tolérer de petites perturbations sans modifier immédiatement l'information.

Une information provenant du monde réel est souvent analogique. Un microphone produit par exemple une tension qui varie continuellement avec le son. Pour être traitée numériquement, cette information doit être échantillonnée puis représentée par des valeurs numériques.

À l'inverse, lorsqu'un système numérique doit commander un phénomène physique, les données numériques peuvent être reconverties en un signal électrique adapté au dispositif commandé.

La représentation de l'information

La plus petite unité d'information numérique est le bit. Il peut prendre deux états : 0 ou 1.

En regroupant plusieurs bits, le nombre de valeurs représentables augmente rapidement. Huit bits forment un octet et permettent de représenter 256 valeurs différentes. Avec 16 bits, 65 536 valeurs peuvent être représentées, et avec 32 bits, plus de quatre milliards de combinaisons sont possibles.

Ces combinaisons peuvent représenter des nombres, mais aussi des caractères, des couleurs, des adresses mémoire, des instructions ou toute autre information définie par le système.

Le traitement logique

Les circuits numériques manipulent les bits grâce à des opérations logiques. Ces opérations permettent de déterminer une nouvelle valeur à partir d'une ou plusieurs valeurs d'entrée.

Une condition peut ainsi être vérifiée, plusieurs informations peuvent être combinées, une valeur peut être inversée ou plusieurs possibilités peuvent être sélectionnées.

Les opérations élémentaires sont ensuite associées pour réaliser des fonctions beaucoup plus complexes. Un circuit capable d'effectuer une addition, de comparer deux nombres ou de sélectionner une donnée est finalement constitué d'un très grand nombre d'opérations logiques organisées entre elles.

La logique et les circuits

La théorie logique fournit les règles permettant de décrire le comportement d'un circuit numérique. Elle permet de passer d'une expression représentant une condition à une organisation concrète de composants électroniques.

Les relations entre les entrées et les sorties peuvent être décrites mathématiquement, représentées sous forme de tableaux ou directement traduites en circuits électroniques.

Cette séparation entre la fonction recherchée et sa réalisation physique facilite considérablement la conception de systèmes numériques complexes.

Les circuits combinatoires

Dans un circuit combinatoire, la sortie dépend des valeurs présentes sur les entrées au moment considéré.

Une modification d'une entrée se propage donc à travers le circuit et finit par modifier les sorties correspondantes. Le circuit ne conserve pas l'état précédent de ses entrées.

Les circuits réalisant des additions, des comparaisons, des sélections ou des conversions de codes appartiennent notamment à cette catégorie.

La mémoire et les circuits séquentiels

Un système numérique doit souvent conserver une information afin de poursuivre une opération. Il utilise alors des circuits séquentiels, capables de conserver un état.

Le résultat produit par un circuit séquentiel dépend donc non seulement des entrées actuelles, mais également de l'état dans lequel se trouvait précédemment le circuit.

Cette propriété permet de construire des compteurs, des registres, des mémoires, des séquences de commande et des systèmes capables d'exécuter des opérations dans un ordre déterminé.

Le temps dans les systèmes numériques

Les circuits numériques complexes doivent coordonner leurs opérations. Une horloge fournit souvent une référence temporelle commune à de nombreux blocs.

Elle produit un signal périodique dont les transitions servent de repères pour enregistrer des données ou déclencher certaines opérations. La fréquence de cette horloge indique le nombre de cycles effectués chaque seconde.

Tous les circuits numériques ne fonctionnent cependant pas obligatoirement avec une horloge. Certains circuits réagissent directement aux changements de leurs entrées et d'autres utilisent des mécanismes de synchronisation particuliers.

Les fonctions numériques

En combinant les opérations élémentaires, il devient possible de construire des fonctions numériques de plus en plus élaborées.

Un système peut par exemple effectuer des calculs arithmétiques, stocker temporairement une donnée, compter des événements, comparer des valeurs, choisir une source parmi plusieurs ou commander une succession d'opérations.

Ces fonctions constituent les briques à partir desquelles sont construits les circuits numériques complexes. Leur organisation détermine l'architecture générale du système.

Les différentes architectures

La manière dont les fonctions numériques sont regroupées et reliées définit l'architecture du circuit.

Un circuit simple peut être conçu pour réaliser une fonction fixe. Un système plus complexe peut comporter plusieurs unités de calcul, des blocs de mémoire, des circuits de contrôle et des interfaces permettant d'échanger des données avec l'extérieur.

L'architecture dépend de la fonction recherchée, de la quantité de données à traiter, de la vitesse nécessaire, de la consommation électrique et de la possibilité ou non de modifier le comportement du circuit après sa fabrication.

La conception des circuits numériques

La conception commence généralement par la définition de la fonction que doit réaliser le système. Les ingénieurs décrivent ensuite les opérations nécessaires et organisent les différents blocs logiques.

Pour les circuits simples, cette organisation peut être représentée directement sous forme de schéma. Pour les systèmes comportant des milliers ou des millions de fonctions, des méthodes de conception spécialisées deviennent indispensables.

Des outils informatiques permettent de simuler le fonctionnement du circuit avant sa fabrication. Ils vérifient les relations logiques, les temps de propagation et le comportement dans différentes conditions.

La description matérielle

Lorsque les circuits deviennent très complexes, leur fonctionnement peut être décrit à l'aide de langages de description matérielle. Ces langages permettent de représenter le comportement et la structure d'un système numérique sous une forme exploitable par les outils de conception.

Le concepteur peut ainsi décrire une opération, un registre, une machine à états ou l'organisation de plusieurs blocs sans dessiner individuellement chaque porte logique.

Les outils de synthèse transforment ensuite cette description en une réalisation matérielle constituée de fonctions logiques et de connexions adaptées à la technologie utilisée.

La réalisation physique

Une fois la conception validée, le circuit peut être transformé en une réalisation physique. Dans un circuit intégré, les fonctions logiques sont finalement construites à partir de transistors et de leurs interconnexions sur une puce de silicium.

Dans d'autres systèmes, les fonctions numériques peuvent être réalisées à l'aide de plusieurs composants reliés sur une carte électronique.

Le même raisonnement logique peut donc conduire à des réalisations physiques très différentes selon les contraintes de coût, de volume, de puissance, de vitesse et de quantité produite.

Les avantages du traitement numérique

La représentation binaire permet de reproduire et de transmettre une information avec une grande fiabilité. Tant que les niveaux électriques restent suffisamment éloignés des seuils de décision, de petites perturbations ne modifient pas la valeur logique reconnue.

Les données numériques peuvent également être copiées sans perte liée à la copie elle-même, stockées dans de grandes quantités de mémoire et traitées par des circuits programmables ou spécialisés.

Cette robustesse explique le développement de l'électronique numérique dans les systèmes informatiques, les télécommunications, l'automobile, l'industrie, les appareils multimédias et les équipements scientifiques.

De la logique élémentaire aux systèmes numériques

L'électronique numérique forme ainsi une chaîne de conception progressive. Les informations sont d'abord représentées sous forme binaire, puis manipulées par des règles logiques. Ces règles permettent de construire des fonctions combinatoires et séquentielles, qui sont ensuite regroupées en architectures de plus en plus complexes.

La conception moderne permet finalement de transformer une description logique en un ensemble physique de millions ou de milliards de transistors capables de traiter automatiquement des informations à très grande vitesse.

La pratique et les langages de description (VHDL/Verilog)

Après avoir étudié les portes logiques, les circuits combinatoires et séquentiels ainsi que les différentes architectures, il est possible de décrire un circuit numérique directement sous forme de code.

Pour cela, on utilise des langages de description matérielle, appelés HDL (Hardware Description Language).

Les deux langages historiques les plus utilisés sont le VHDL et le Verilog. Ils permettent de décrire le fonctionnement et l'organisation d'un circuit numérique avant de le réaliser avec des composants électroniques.

Un langage matériel n'est pas un langage de programmation classique

Un langage comme Python, Java ou C décrit principalement une suite d'instructions exécutées par un processeur.

Un langage de description matérielle décrit au contraire une structure électronique et les relations entre ses différents signaux.

Le code HDL peut ainsi être utilisé pour décrire :

  • des portes logiques ;
  • des circuits combinatoires ;
  • des bascules ;
  • des registres ;
  • des compteurs ;
  • des machines à états ;
  • des unités de calcul ;
  • des architectures numériques complètes.

Le but n'est donc pas simplement d'indiquer à un processeur quelles instructions exécuter. Le code décrit ce que doit réaliser le matériel électronique.

La description du matériel

Un circuit peut être représenté à plusieurs niveaux.

On peut décrire directement les portes utilisées, mais également décrire le comportement attendu du circuit sans détailler chaque porte.

Cette possibilité permet de travailler à différents niveaux d'abstraction.

Le niveau logique

Au niveau le plus proche des portes logiques, on décrit explicitement les opérations réalisées par le circuit.

Une fonction AND peut par exemple être décrite comme :

S = A AND B

La description correspond directement au comportement d'une porte ET.

De la même manière, on peut décrire des fonctions OR, NOT, XOR ou des combinaisons de plusieurs portes.

Le niveau comportemental

À un niveau d'abstraction plus élevé, on décrit ce que le circuit doit faire plutôt que les portes exactes utilisées pour le réaliser.

On peut par exemple décrire un additionneur en indiquant que sa sortie doit être égale à la somme de ses entrées.

Le logiciel de conception déterminera ensuite une structure logique permettant de réaliser cette fonction.

La description structurelle

Une description structurelle représente explicitement les différents blocs qui composent un circuit et les connexions entre eux.

On peut par exemple associer plusieurs additionneurs élémentaires pour construire un additionneur de plusieurs bits.

La description représente alors l'architecture interne du système :

Bloc A → Bloc B → Bloc C

Cette méthode est particulièrement utile lorsqu'un système est constitué de nombreux blocs réutilisables.

VHDL

Le VHDL signifie VHSIC Hardware Description Language. Il a été conçu pour décrire des systèmes électroniques numériques complexes.

VHDL possède une syntaxe fortement structurée et typée. Il permet de décrire aussi bien la structure d'un circuit que son comportement.

Un circuit simple peut par exemple être décrit avec une entité qui définit ses entrées et ses sorties :

entity porte_et is
    port (
        A : in  std_logic;
        B : in  std_logic;
        S : out std_logic
    );
end porte_et;

L'entité décrit l'interface du circuit : les signaux qu'il reçoit et ceux qu'il fournit.

L'architecture VHDL

Le fonctionnement ou la structure interne du circuit est ensuite décrit dans une architecture.

architecture comportement of porte_et is
begin
    S <= A and B;
end comportement;

L'expression indique que la sortie S prend la valeur du résultat logique de A AND B.

Le circuit décrit correspond donc à une porte ET.

Les signaux en VHDL

Les signaux représentent les connexions entre les différentes parties du circuit.

Ils peuvent transporter des valeurs logiques, des nombres ou d'autres types de données.

Dans un circuit matériel, un signal correspond conceptuellement à une information électrique circulant entre différents éléments.

Les processus VHDL

VHDL permet également de regrouper une description dans un processus.

Les processus sont particulièrement utiles pour décrire des circuits séquentiels ou des comportements dépendant de certains signaux.

Un registre commandé par une horloge peut par exemple être décrit ainsi :

process(clk)
begin
    if rising_edge(clk) then
        Q <= D;
    end if;
end process;

Cette description indique que la valeur de D est mémorisée dans Q lors du front montant de l'horloge.

Verilog

Le Verilog est un autre langage majeur de description matérielle.

Sa syntaxe est plus proche de celle des langages de programmation classiques comme le C, mais son fonctionnement reste fondamentalement orienté vers la description de matériel électronique.

Une porte ET peut par exemple être décrite ainsi :

module porte_et (
    input  A,
    input  B,
    output S
);

assign S = A & B;

endmodule

Le mot module définit le bloc matériel. Les ports correspondent aux entrées et sorties du circuit.

Les descriptions combinatoires en Verilog

Une fonction combinatoire peut être décrite avec une affectation continue.

assign S = (A & B) | C;

La sortie S dépend directement des entrées A, B et C.

Aucune mémoire n'est nécessaire pour réaliser cette fonction.

Les descriptions séquentielles en Verilog

Un circuit séquentiel synchronisé par une horloge peut être décrit avec un bloc déclenché par un front d'horloge.

always @(posedge clk) begin
    Q <= D;
end

La valeur de D est mémorisée dans Q lors du front montant de clk.

SystemVerilog

Le SystemVerilog est une évolution de Verilog qui ajoute notamment des fonctionnalités facilitant la description, la vérification et la conception de systèmes numériques complexes.

Il est aujourd'hui largement utilisé dans les environnements modernes de conception électronique.

Il permet notamment d'utiliser des constructions plus adaptées aux circuits combinatoires et séquentiels ainsi que des outils avancés de vérification.

VHDL et Verilog

VHDL Verilog
Origine Conçu pour la description de matériel Conçu pour la simulation et la description de matériel
Syntaxe Très structurée et fortement typée Plus concise et proche du C
Description structurelle Très développée Oui
Description comportementale Oui Oui
Circuits séquentiels Oui Oui
Simulation Oui Oui

Les deux langages permettent de décrire des circuits numériques complexes. Le choix dépend notamment des habitudes, des outils utilisés et du domaine d'application.

La synthèse logique

Écrire du code HDL ne signifie pas encore que le circuit existe physiquement. Il faut transformer cette description en une structure logique réalisable.

Cette opération est appelée synthèse logique.

Le logiciel de synthèse analyse le code et détermine une architecture matérielle équivalente utilisant les ressources disponibles.

Une description comme :

S = A AND B

peut être transformée en une structure comportant une porte ET ou une ressource logique équivalente dans le composant cible.

Du code au circuit

La réalisation d'un circuit à partir d'un HDL suit généralement plusieurs étapes :

  • écriture de la description matérielle ;
  • simulation du fonctionnement ;
  • synthèse de la description ;
  • optimisation de la logique ;
  • adaptation aux ressources du composant ;
  • placement et routage lorsque cela est nécessaire ;
  • génération du fichier permettant de configurer ou programmer le composant.

La simulation

Avant de fabriquer ou programmer le circuit, il est possible de vérifier son fonctionnement avec un simulateur.

Le simulateur applique différentes valeurs aux entrées et calcule les sorties obtenues au cours du temps.

Pour un circuit séquentiel, il permet notamment d'observer les changements d'état provoqués par l'horloge.

Le banc de test

Pour tester automatiquement un circuit, on utilise un testbench, ou banc de test.

Le testbench fournit des valeurs d'entrée au circuit et vérifie les sorties obtenues.

Il peut également générer une horloge, appliquer différentes séquences de signaux et vérifier automatiquement que les résultats correspondent au comportement attendu.

La simulation temporelle

Une simulation peut prendre en compte uniquement le fonctionnement logique ou également les délais de propagation du circuit.

Dans un circuit réel, une modification d'entrée ne provoque pas une modification instantanée de la sortie. Le signal met un certain temps à traverser les différents composants.

La simulation temporelle permet donc d'étudier plus précisément le comportement du circuit dans le temps.

La synthèse vers un FPGA

Un FPGA contient de nombreux blocs logiques, éléments de mémoire et connexions programmables.

Après synthèse, le logiciel adapte la description HDL aux ressources disponibles dans le FPGA.

Une étape appelée placement et routage détermine ensuite où les différentes fonctions seront implantées et comment elles seront reliées à l'intérieur du composant.

Un fichier de configuration est finalement généré pour programmer le FPGA.

La synthèse vers un circuit intégré

Pour un circuit intégré destiné à être fabriqué, la description HDL peut également servir de point de départ à une chaîne de conception beaucoup plus complexe.

La synthèse produit une représentation logique qui sera ensuite transformée en une organisation physique des cellules et des interconnexions du circuit.

Le résultat final peut être un circuit intégré conçu spécifiquement pour une application.

Ce qui est synthétisable

Toutes les constructions d'un langage HDL ne correspondent pas nécessairement à un circuit matériel pouvant être synthétisé.

Certaines instructions sont destinées uniquement à la simulation et au test.

Une description destinée à la synthèse doit respecter les constructions compatibles avec le matériel que le composant cible peut réellement réaliser.

Décrire du matériel en parallèle

L'une des différences fondamentales entre un HDL et un langage de programmation classique est que plusieurs parties d'une description matérielle peuvent fonctionner simultanément.

Si deux blocs logiques indépendants sont décrits dans un même circuit, ils peuvent fonctionner en parallèle dans le matériel.

Par exemple, deux opérations peuvent être effectuées simultanément :

S1 = A AND B
S2 = C OR D

Les deux fonctions logiques peuvent être réalisées en même temps par deux ensembles de circuits distincts.

Les signaux et les variables

Les HDL disposent de mécanismes permettant de représenter les informations qui circulent dans le circuit.

En VHDL, les signaux représentent notamment les connexions entre les différentes parties du matériel.

Les variables peuvent être utilisées dans certains processus pour effectuer des calculs intermédiaires.

La distinction est importante car elle correspond à des mécanismes différents dans la description et la simulation du matériel.

Les types de données

Les langages HDL permettent de représenter différents types d'informations numériques.

On peut notamment manipuler :

  • des bits ;
  • des vecteurs de bits ;
  • des nombres entiers ;
  • des nombres non signés ou signés ;
  • des constantes ;
  • des états logiques.

Un vecteur de huit bits peut par exemple représenter :

10101100

Il peut être utilisé pour transporter une donnée, une adresse ou un résultat de calcul.

Les valeurs logiques réelles

Dans un système numérique réel, un signal ne se limite pas toujours à un simple 0 ou 1.

Les modèles utilisés en simulation peuvent également représenter des situations telles qu'un signal inconnu, non initialisé ou plusieurs circuits essayant de commander simultanément une même ligne.

Cette représentation plus détaillée permet de détecter certaines erreurs avant la réalisation physique du circuit.

La conception hiérarchique

Les projets HDL complexes sont généralement organisés de manière hiérarchique.

Un circuit principal peut utiliser plusieurs sous-modules, eux-mêmes constitués d'autres modules.

Système
↓ Sous-systèmes
↓ Modules
↓ Blocs logiques

Cette organisation permet de réutiliser des blocs déjà conçus et de séparer un projet complexe en parties plus faciles à concevoir et à tester.

La réutilisation des composants

Un module HDL correctement conçu peut être utilisé plusieurs fois dans un même projet ou dans différents projets.

Un même additionneur, registre, compteur ou contrôleur peut ainsi être intégré dans plusieurs architectures.

La réutilisation réduit le temps de conception et permet de s'appuyer sur des blocs déjà vérifiés.

Les bibliothèques de composants

Les projets numériques peuvent regrouper des modules réutilisables dans des bibliothèques.

Une bibliothèque peut contenir des fonctions logiques, des composants arithmétiques, des interfaces, des contrôleurs ou des modèles destinés à la simulation.

Les bibliothèques permettent ainsi de construire de nouvelles architectures à partir de composants déjà disponibles.

La conception avec un FPGA

Un FPGA constitue l'un des moyens les plus accessibles de mettre en pratique les langages HDL.

Le concepteur écrit une description VHDL ou Verilog, la simule, puis la synthétise pour le FPGA.

Le composant est ensuite configuré pour réaliser l'architecture décrite.

Une même carte FPGA peut donc réaliser successivement des circuits numériques très différents sans modifier physiquement les connexions internes du composant.

Les entrées et sorties physiques

Lorsqu'un HDL est utilisé sur un composant réel, les signaux internes doivent être reliés aux broches physiques du composant.

Une entrée peut par exemple être reliée à un bouton ou à un capteur, tandis qu'une sortie peut commander une LED, un afficheur ou un autre circuit.

Le projet doit donc associer les signaux logiques du code aux ressources physiques de la carte ou du composant.

La fréquence maximale

Un circuit numérique ne peut pas fonctionner à une fréquence infiniment élevée.

Les portes et les connexions introduisent des délais de propagation. Dans un circuit synchrone, le résultat d'une opération doit être disponible suffisamment tôt avant le prochain front d'horloge.

La fréquence maximale dépend donc notamment de la longueur des chemins logiques et des caractéristiques des composants utilisés.

L'optimisation

La synthèse cherche généralement à produire un circuit respectant plusieurs contraintes.

  • performance : obtenir une fréquence de fonctionnement suffisante ;
  • surface : utiliser un nombre raisonnable de ressources matérielles ;
  • consommation : limiter l'énergie utilisée.

Une architecture peut donc être modifiée afin d'obtenir un meilleur compromis entre ces différentes contraintes.

La vérification

La vérification consiste à s'assurer que le circuit réalisé correspond bien aux spécifications.

Elle peut être effectuée à plusieurs niveaux :

  • vérification logique ;
  • simulation fonctionnelle ;
  • simulation temporelle ;
  • tests sur le composant réel ;
  • vérification des performances.

Plus le circuit est complexe, plus la vérification représente une partie importante du travail de conception.

De l'idée au circuit réel

La conception numérique suit ainsi une chaîne qui relie les notions étudiées précédemment à leur réalisation pratique :

Fonction → Architecture → Description HDL → Simulation → Synthèse → Implantation → Circuit réel

Les langages VHDL et Verilog permettent donc de passer d'une fonction logique décrite par le concepteur à une architecture numérique pouvant être simulée, synthétisée puis réalisée dans un FPGA ou un circuit intégré.

↑ Retour en haut

Jeux