Décrire un circuit numérique avec VHDL

Slides:



Advertisements
Présentations similaires
Du Software au Hardware
Advertisements

« 1.5. Les fonctions logiques »
Signal numérique sur 10 bits Signal analogique sur 4 V
Architecture des Ordinateurs
Cours Systèmes logiques
Ing Mohamed MASMOUDI Cours VHDL Ing Mohamed MASMOUDI
Exercices sur la conception de processeurs
Cours #9 Conception et réalisation de processeurs à usage général
Logique Combinatoire Fonction OUI Fonction NON Fonction ET Fonction OU
Cours VHDL Chap 3: sémantique VHDL
Cours #6 Conception d’unités de contrôle
Le VHDL De nos jours, les circuits numériques de haute performance sont habituellement créés à partir de descriptions en langages de haut niveau. Nous.
Cours #12: Exercices de révision
Programmation logique Logique des prédicats du premier ordre
Cours #8 Flot de conception d’un circuit numérique
Cours #4 Éléments à mémoire et circuits séquentiels synchrones de base
Etude globale de système.
Introduction Objectifs du cours Évaluation Références
Plan 1-Introduction. 2-Standard VHDL-AMS. Modélisations:
Cours #7 Vérification d’un modèle VHDL
Cours #5 Conception de chemins des données
COMPOSANTS PROGRAMMABLES
Modélisation VHDL d’un chemin des données
Logique programmable Réseaux et circuits PLA, PAL, GAL et CPLD
Décodeurs et encodeurs : sujets de ce thème
CORDIC Sujets de ce thème
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Représentation et opérations.
Le VHDL : SOMMAIRE I Introduction II Éléments généraux du langage
Circuits intégrés numériques Quelques bases
Banc d’essai pour un circuit combinatoire
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Synthèse d’un circuit.
Modélisation VHDL du chemin des données d’un processeur à usage général Sujets de ce thème
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois La technique du pipeline.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Analyse de machines.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Implémentation d’un.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Description d’un circuit.
Synthèse et implémentation de circuits arithmétiques sur FPGA
Processeurs et chemins des données
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Entrées et sorties par.
Le temps de propagation des signaux dans un circuit
Logique programmable Mémoires mortes: PROM, EPROM, EEPROM
Advanced Boolean Equation Language
INF8505: processeurs embarqués configurables Département de génie informatique et génie logiciel Langages de description architecturale.
MICROLOR Le savoir partagé
Méthodologie de conception Outils de conception
Tests de boîte noire.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Vérification de circuits.
Chemin critique et fréquence maximale d’horloge
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Le problème du déphasage.
Créer des packages.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Arithmétique entière.
Concepts intermédiaires de VHDL
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Modélisation VHDL de.
Synthèse et implémentation d’un circuit combinatoire
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Simulation d’un modèle.
Rappel - analyse et synthèse de fonctions combinatoires
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Banc d’essai pour un.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Objets des catégories.
Introduction au VHDL - R.WEBER - Polytech'Orleans
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Analyse détaillée du.
Réseaux pré-diffusés programmables par l’utilisateur: FPGA
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Tests exhaustifs.
Implémentation de la division sur FPGA
VHDL pour circuits séquentiels
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Flot de conception de.
Le VHDL Programmation des CPLD et FPGA avec Quartus II ENSET d'Oran / IUFM Aix Marseille - mai
Introduction Module 1.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Rappel - analyse et.
Description d’un circuit combinatoire en VHDL
Chapitre 01: Structure d'un module VHDL
Transcription de la présentation:

Décrire un circuit numérique avec VHDL Références: notes de cours, chap. 2, 4 et 10

(notes, section 10.1) Variables booléennes À la base des systèmes numériques on retrouve la logique booléenne. Dans un système numérique, tous les signaux sont effectivement des variables booléennes. Une variable booléenne peut prendre une seule de deux valeurs: vrai ou faux. On peut interpréter ces deux valeurs de différentes façons selon le contexte. valeur logique équivalent numérique ex. : lampe ex : tension ex : alarme vrai 1 allumée élevée activée faux éteinte basse désactivée

Fonctions booléennes, symboles et tables de vérité (notes, section 10.2) Fonctions booléennes, symboles et tables de vérité Il y a trois fonctions booléennes de base l’inversion le ET logique; et, le OU logique. Plusieurs fonctions peuvent être dérivées de ces trois fonctions de base, comme le NON-OU, le NON-ET, le OU-exclusif et l’équivalence.

Différentes portes logiques (notes, section 10.6) Différentes portes logiques

Un exemple de design Un comité composé de quatre personnes a besoin d’un mécanisme de vote secret pour les amendements sur la constitution du comité. Un amendement est approuvé si au moins 3 personnes votent pour. Concevoir un circuit logique qui accepte 4 entrées représentant les votes. La sortie du circuit doit indiquer si l’amendement est accepté.

Donner la table de vérité, l’équation et le circuit logique # vote1 (A) vote2 (B) vote3 (C) vote4 (D) amendement approuvé (F) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Équivalence entre les trois représentations

Langages de description matérielle (notes, section 2.1) Langages de description matérielle Pour décrire un circuit logique, les schémas sont peu adéquats. Les schémas sont limités aux circuits les plus simples. Il est difficile de dessiner un circuit complexe avec un schéma de portes logiques. Il est encore plus difficile de le modifier. Un simple changement dans une équation booléenne du circuit peut se répercuter par une grande quantité de connexions à corriger. Il est difficile, voire impossible, d’utiliser des variables en guise de paramètres d’un circuit représenté par un schéma. Les langages de description matérielle (Hardware Description Language – HDL) ont vu le jour au début des années 1980 lorsque la complexité des circuits à concevoir a rendu impossible l’utilisation exclusive de schémas. Les avantages des HDL par rapport aux schémas sont : les HDL permettent de décrire des systèmes complexes complets; les HDL favorisent la décomposition en modules paramétrables; les HDL facilitent l’établissement de spécifications et d’interfaces clairement définies; les HDL normalisent l’échange d’informations.

Langages de description matérielle (notes, section 2.1) Langages de description matérielle Les HDL peuvent servir à trois choses : la modélisation de circuits (surtout numériques); la description de circuits en vue de leur synthèse (i.e. leur réalisation matérielle); et, la documentation de circuits. Les deux HDL de loin les plus populaires sont Verilog et VHDL. Verilog ressemble un peu à C, et VHDL ressemble à ADA. Les deux langages sont relativement faciles à apprendre, mais difficiles à maîtriser. VHDL est plus vaste, bien que plusieurs des particularités pour lesquelles Verilog n’a pas d’équivalent soient rarement utilisées. Quand on connaît l’un des deux langages, il est relativement aisé de passer à l’autre. Un troisième langage, SystemC, est populaire pour la modélisation à plus haut niveau.

(notes, section 2.1) VHDL L’acronyme VHDL signifie Very High Speed Integrated Circuit (VHSIC) Hardware Description Language (HDL). VHDL est un langage de programmation complet. Le langage a été développé pour le compte du gouvernement américain pour documenter la conception d’ASIC. Il est fortement inspiré du langage ADA. Rapidement, des simulateurs de VHDL sont apparus, puis des synthétiseurs capables de traduire un programme VHDL en une liste d’interconnexions entre des portes logiques (netlist) pouvant être réalisée sur un ASIC. Le langage VHDL est normalisé par l’IEEE. La première norme remonte à 1987. Des mises à jour ont eu lieu en 1993, 2000, 2002 et 2008. La norme plus récente est présentement mal supportée par les outils de conception.

Circuit combinatoire en VHDL (notes, section 2.2) Circuit combinatoire en VHDL Entité: interface avec le monde extérieur Architecture: partie déclarative et corps Principe de la concurrence library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity add3bits is port ( Cin : in std_logic; X : in std_logic; Y : in std_logic; Cout : out std_logic; S : out std_logic ); end add3bits; architecture flotDeDonnees of add3bits is signal T1 : std_logic; signal T2 : std_logic; signal T3 : std_logic; begin S <= T1 xor Cin; Cout <= T3 or T2; T1 <= X xor Y; T2 <= X and Y; T3 <= Cin and T1; end flotDeDonnees;

Trois styles de description d’un circuit (notes, section 2.3) Trois styles de description d’un circuit Énoncés concurrents Style de description du circuit Assignations de signaux concurrentes, choisies et conditionnelles Par flot de données Instanciations de composantes Structurale Processus Comportementale

Description par flot de données (notes, section 2.3) Description par flot de données Le modèle d’un circuit numérique par flot de données décrit sa fonction sans nécessairement définir sa structure. En général, cela signifie que les valeurs des signaux et ports du circuit sont établies par des assignation concurrentes de valeurs (concurrent signal assignment). Pour les circuits combinatoires, les assignations concurrentes à des signaux utilisent souvent des opérateurs logiques qui sont des mots clés du langage: and, or, nand, nor, xor, xnor, not. On peut utiliser des parenthèses pour faire respecter la préséance requise dans les expressions.

Description par flot de données (notes, section 2.3) Description par flot de données library ieee; use ieee.std_logic_1164.all; entity combinatoire1 is port ( A : in std_logic; B : in std_logic; C : in std_logic; F : out std_logic ); end combinatoire1; architecture flotDeDonnees1 of combinatoire1 is begin F <= not(A and (B xor not(C))); end flotDeDonnees1; architecture flotDeDonnees2 of combinatoire1 is signal entree : std_logic_vector(2 downto 0); begin entree <= (A, B, C); with entree select F <= '1' when "000", '1' when "001", '1' when "010", '1' when "011", '0' when "100", '1' when "101", '1' when "110", '0' when "111", '0' when others; end flotDeDonnees2; architecture flotDeDonnees3 of combinatoire1 is begin F <= '1' when (A = '0' or B /= C) else '0'; end flotDeDonnees3;

Description structurale (notes, section 2.3) Description structurale Un circuit numérique peut être défini par sa structure, c'est-à-dire par un assemblage de blocs. Une description structurale correspond à une description par schéma, où les instanciations de composantes et leurs interconnexions sont énumérées avec du texte. Une description structurale est appropriée pour relier entre eux différents sous-systèmes d’un système numérique. En général, il est préférable d’utiliser un éditeur de schéma pour décrire un tel circuit, et laisser un outil générer automatiquement le code VHDL structural.

Description structurale (notes, section 2.3) Description structurale library ieee; use ieee.std_logic_1164.all; entity combinatoire1 is port ( A : in std_logic; B : in std_logic; C : in std_logic; F : out std_logic ); end combinatoire1; entity INV is port (I : in std_logic; O : out std_logic); end INV; architecture arch of INV is begin O <= not I; end arch; entity NAND2 is … entity XOR2 is architecture structurale of combinatoire1 is component INV -- inverseur port (I : in std_logic; O : out std_logic); end component; component NAND2 port (I0, I1 : in std_logic; O : out std_logic); component XOR2 port (I0 : in std_logic; I1 : in std_logic; O : out std_logic); signal NET18 : std_logic; signal NET37 : std_logic; begin U1 : NAND2 port map(I0 => NET37, I1 => A, O => F); U2 : XOR2 port map(I0 => NET18, I1 => B, O => NET37); U3 : INV port map(I => C, O => NET18); end architecture structurale;

Description comportementale (notes, section 2.3) Description comportementale En VHDL, la description comportementale d’un système numérique est faite à l’aide d’énoncés similaires à ceux d’un langage procédural comme C et Java, incluant les structures de condition et de répétition. La possibilité d’utiliser une description comportementale est un outil très puissant aux concepteurs de circuits numériques. En effet, il est alors possible d’abstraire le comportement du circuit à un très haut niveau, et donc de définir un système complexe en peu de temps, de façon concise, paramétrable et facilement modifiable. Cependant, comme une description comportementale peut prendre multiples formes, il faut garder en tête la nature du circuit désiré et l’inventaire de composantes matérielles disponibles pour s’assurer que la description puisse être synthétisée en un circuit de complexité acceptable. Les descriptions comportementales en VHDL se font à l’aide de l’énoncé process à l’intérieur d’une architecture. Un processus décrit une partie du circuit qui s’exécute de façon concurrente à d’autres processus et à des assignations concurrentes de signaux.

Description comportementale – porte ET, ex. 1 (notes, section 2.3) Description comportementale – porte ET, ex. 1 library ieee; use ieee.std_logic_1164.all; entity porteET4 is port ( I : in std_logic_vector(3 downto 0); F : out std_logic ); end porteET4; architecture flotDeDonnees of porteET4 is begin F <= I(3) and I(2) and I(1) and I(0); end flotDeDonnees; architecture comportementale of porteET4 is begin process (I) variable sortie : std_logic; sortie := '1'; for k in 3 downto 0 loop sortie := sortie and I(k); end loop; F <= sortie; end process; end comportementale;

Description comportementale – porte ET, ex. 2 (notes, section 2.3) Description comportementale – porte ET, ex. 2 library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity porteET is generic ( W : positive := 8 -- le nombre d'entrées de la porte ET ); port ( I : in std_logic_vector(W - 1 downto 0); F : out std_logic end porteET; architecture comportementale of porteET is begin process (I) variable sortie : std_logic; sortie := '1'; for k in W - 1 downto 0 loop sortie := sortie and I(k); end loop; F <= sortie; end process; end comportementale;

VHDL: quelques détails Espaces, littéraux, commentaires (notes, section 2.5) VHDL: quelques détails Espaces, littéraux, commentaires Il n’y a pas de différence entre les espaces, tabulations et retours de chariot, présents seuls ou en groupe. Le langage n’est pas sensible à la casse. Littéraux: Un littéral composé d’un caractère unique est placé entre apostrophes : ‘a’, ‘5’. Un littéral composé d’une chaîne de caractères est placé entre guillemets : "bonjour", "123ABC". Un littéral numérique peut être spécifié avec sa base, avec le format base#chiffres[.chiffres]#[exposant], où les crochets indiquent des éléments facultatifs. La base doit être entre 2 et 16, inclusivement. Par exemple, les nombres suivants ont tous la même valeur : 10#33# = 10#3.3#E1 = 2#10001# = 16#21# = 7#45#. Un littéral composé de bits peut être exprimé en bases 2, 8 ou 16, avec les spécificateurs de base B, O et X, respectivement : B"11111111", O"377", X"FF". Tout texte placé après deux tirets et jusqu’à la fin d’une ligne est un commentaire, ce qui est semblable au ‘//’ de C. Il n’y a pas de commentaires en bloc (/* … */) en VHDL.

VHDL: quelques détails Objets (notes, section 2.5) VHDL: quelques détails Objets Ici, ‘objet’ n’a pas le même sens que dans un langage orienté objet. Il y a quatre catégories d’objets en VHDL : constant (et generic) : peut contenir une valeur unique qui ne change pas; un objet generic est une constante spéciale permettant d’appliquer un paramètre à une entité lors de son instanciation; variable: peut contenir une valeur temporaire; les objets variable sont utiles pour stocker des valeurs intérimaires dans les calculs; signal (et port) : peut contenir une liste de valeurs dans le temps; un objet signal correspond en général à un fil d’un circuit; un port d’une entité est implicitement un signal pour cette entité; file: un objet dans lequel on peut écrire et lire des valeurs, et qui correspond à un fichier du système d’exploitation. Lors de la déclaration d’un objet, on spécifie sa catégorie, son identificateur et son type. On peut aussi lui assigner une valeur initiale.

VHDL: quelques détails Identificateurs (notes, section 2.5) VHDL: quelques détails Identificateurs Un identificateur de base légal est composé de lettres, chiffres et/ou du soulignement. Le premier caractère doit être une lettre, le dernier ne peut pas être le soulignement, et on ne peut utiliser deux soulignements de suite. Un identificateur ne peut pas être l’un des mots réservés du langage.

VHDL: quelques détails Types prédéfinis (notes, section 2.5) VHDL: quelques détails Types prédéfinis catégorie type ou sous-type source de la définition valeurs scalaires boolean type prédéfini FALSE et TRUE bit ‘0’ et ‘1’ character 256 caractères de la norme ISO 8859- 1, avec des abréviations reconnues et certaines qui sont propres à VHDL Les 128 premiers sont les caractères ASCII. integer plage minimale de –231 + 1 à 231 – 1 natural sous-type prédéfini 0 à 231 – 1 positive 1 à 231 – 1 real typiquement –1.7014111E±308 à 1.7014111E±308 std_logic Package std_logic_1164 ‘U’ : valeur inconnue, pas initialisée ‘X’ : valeur inconnue forcée ‘0’ : 0 forcé ‘1’ : 1 forcé ‘Z’ : haute impédance (pas connecté) ‘W’ : inconnu faible ‘L’ : 0 faible ‘H’ : 1 faible ‘-‘ : peu importe (don’t care) composés bit_vector tableau de bit string tableau de character std_logic_vector tableau de std_logic unsigned numeric_std tableau de std_logic, interprété comme un nombre binaire non signé signed tableau de std_logic, interprété comme un nombre binaire signé en complément à deux

VHDL: quelques détails Opérateurs (notes, section 2.5) VHDL: quelques détails Opérateurs catégorie opérateurs type de l’opérande de gauche type de l’opérande de droite type de l’expression logique and, or, nand, nor, xor, xnor, not bit, boolean relation =, /=, <, <=, >, >= scalaire ou tableau boolean décalage sll (déc. logique gauche), srl (déc. logique droite), sla (déc. arithmétique gauche), sra (déc. arithmétique droit), rol (rotation gauche), ror (rotation droite) tableau de bit ou boolean integer comme l’opérande de gauche arithmétique +, -, *, /, abs (valeur absolue), mod (modulo), rem (reste) type numérique ** (exponentiation) concaténation & tableau ou type énuméré tableau

Flot de conception de circuits numériques (notes, section 4.2) Flot de conception de circuits numériques

Un exemple de design Un comité composé de quatre personnes a besoin d’un mécanisme de vote secret pour les amendements sur la constitution du comité. Un amendement est approuvé si au moins 3 personnes votent pour. Concevoir un circuit logique qui accepte 4 entrées représentant les votes. La sortie du circuit doit indiquer si l’amendement est accepté.

Donner la table de vérité, l’équation et le circuit logique # vote1 (A) vote2 (B) vote3 (C) vote4 (D) amendement approuvé (F) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Équivalence entre les trois représentations

Code VHDL une solution possible library IEEE; use IEEE.STD_LOGIC_1164.all; entity vote is port ( lesvotes: in std_logic_vector(3 downto 0); approbation : out std_logic ); end vote; -- table de vérité réduite architecture flotdonnees1 of vote is begin with lesvotes select approbation <= '1' when "0111", '1' when "1011", '1' when "1101", '1' when "1110", '1' when "1111", '0' when others; end flotdonnees1;

Résumé: VHDL de base Notions à retenir et maîtriser Importance relative 1. Expliquer l’utilité des HDL et les origines de VHDL 5 2. Expliquer le rôle d’une entité et d’une architecture en VHDL. 10 3. Décrire un module en VHDL par une description par flot de données, structurale et comportementale 20 4. Expliquer et utiliser le principe de la concurrence en VHDL. 15 5. Décrire une fonction logique à l’aide d’un processus 6. Décrire un module en VHDL en utilisant correctement la syntaxe de base du langage: commentaires, identificateurs, types prédéfinis, opérateurs 7. Illustrer par un schéma et décrire le flot de conception d’un circuit numérique Total 100