L'électronique numérique : La pratique et les langages de description (VHDL/Verilog) - Quiz
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é.