Chapitre 3 Conception de composants programmables et langage HDL PDF

Document Details

BrainiestBirch818

Uploaded by BrainiestBirch818

ESIEA

Chiraz Trabelsi

Tags

VHDL programming digital logic design computer engineering programming languages

Summary

Ce document présente un cours sur la conception de composants programmables et le langage HDL, en particulier sur les types VHDL. Il détaille les concepts et les exemples de types spécifiques au langage de programmation électronique VHDL.

Full Transcript

Conception de composants programmables et langage HDL Les types S o u s - Ten i t r eVHDL...

Conception de composants programmables et langage HDL Les types S o u s - Ten i t r eVHDL Chiraz TRABELSI Conception de composants programmables et langage HDL [email protected] 1 4A-S1 Majeure systèmes embarqués et autonomes Les types Quelques exemples de types Conception de composants programmables et langage HDL 2 4A-S1 Majeure systèmes embarqués et autonomes Les types La package STANDARD est un package inclus par défaut (on n’a pas besoin de le déclarer dans les descriptions VHDL) library STD, WORK; Inclus par défaut use STD.STANDARD.all; Il contient principalement les types suivants: BIT CHARACTER Valeurs possibles: ‘0’, ‘1’ Exemple: Exemple: REAL BOOLEAN Des nombres entre -1.0E+38 à 1.0E+38. Valeurs possibles: TRUE, FALSE Dans le Il n'est pas synthétisable. Exemple: package Exemple: STD INTEGER 32 bits, signé: des nombres de -2147483647 à 2147483647 Exemple: NATURAL Non signé: des nombres de 0 à 2147483647 POSITIVE Non signé: des nombres de 1 à 2147483647 Conception de composants programmables et langage HDL 3 4A-S1 Majeure systèmes embarqués et autonomes Les types Des exemples de types Array (tableau/vecteur) BIT_VECTOR Vecteur de bits Exemples: Dans le package STD STRING Chaîne de caractères Exemple: Conception de composants programmables et langage HDL 4 4A-S1 Majeure systèmes embarqués et autonomes Les types Différentes écritures Nombres entiers Exemples: Ecrire un BIT_VECTOR en binaire, octal et hexadécimal Exemples: Conception de composants programmables et langage HDL 5 4A-S1 Majeure systèmes embarqués et autonomes Les types La package std_logic_1164 offrent plus de possibilités de types library ieee; use ieee.std_logic_1164.all; Les types std_logic et std_logic_vector offrent plus de possibilités que les types bit et bit_vector Ces deux types font partie du package standard std_logic_1164 Le type std_logic est une version résolue du type std_ulogic Le type std_ulogic contient 9 valeurs possibles:  Valeur par défaut avant la simulation  Représente un signal dont la valeur ne peut pas être déterminée (conflit entre ‘1’ et ‘0’)  Un signal fort ayant la valeur 0  Un signal fort ayant la valeur 1  Haute impédance (circuit ouvert)  Représente un signal dont la valeur ne peut pas être déterminée (conflit entre ‘L’ et ‘H’)  Un signal à 0 sortant d’un pull-down  Un signal à 1 sortant d’un pull-up  Permet au synthétiseur d’associer 0 ou 1 afin d’optimiser la synthèse Conception de composants programmables et langage HDL 6 4A-S1 Majeure systèmes embarqués et autonomes Les types std_logic et std_logic_vector Le type std_ulogic est un type non résolu Tous les types sont non résolus par défaut Un type non-résolu ne peut pas être utilisé pour un signal qui peut avoir plusieurs sources Le type std_logic est un sous-type de std_ulogic offrant en plus une fonction de résolution Ces signaux doivent être résolus Conception de composants programmables et langage HDL 7 4A-S1 Majeure systèmes embarqués et autonomes Les types std_logic et std_logic_vector Fonction de résolution Le signal BUSS a deux sources: BUSS~0 et BUSS~1 Table de vérité d’un Tristate Les valeurs les plus hautes dans le schéma sont prioritaires Tristate Conception de composants programmables et langage HDL 8 4A-S1 Majeure systèmes embarqués et autonomes Les types std_logic et std_logic_vector ENB1 ENB2 D1 D2 BUSS~1 BUSS~0 BUSS 0 0 - - Z Z Z 0 1 0 0 Z 0 0 0 1 0 1 Z 1 1 0 1 1 0 Z 0 0 0 1 1 1 Z 1 1 1 0 0 0 0 Z 0 1 0 0 1 0 Z 0 1 0 1 0 1 Z 1 1 0 1 1 1 Z 1 1 1 0 0 0 0 0 1 1 0 1 0 1 X 1 1 1 0 1 0 X Fonction de résolution 1 1 1 1 1 1 1 Conception de composants programmables et langage HDL 9 4A-S1 Majeure systèmes embarqués et autonomes Les valeurs initiales Par défaut la valeur initiale d’un signal ou d’une variable est la valeur la plus à gauche de son type Exemples: Un signal de type std_logic aura par défaut la valeur ‘U’ Un signal de type std_logic_vector (0 to 2) aura par défaut la valeur ‘UUU’ Si on définit le type: Le signal aura par défaut la valeur state1 Exemples d’initialisation Attention: Si vous voulez donner une valeur initiale à un signal ou une variable, le meilleur moyen est de passer par un signal reset, car il se peut que l’outil de synthèse ignore l’initialisation. Vous pouvez toujours garder l’initialisation pour la simulation, mais évitez de compter là-dessus quand vous testez votre système sur la carte. Conception de composants programmables et langage HDL 10 4A-S1 Majeure systèmes embarqués et autonomes La comparaison des std_logic et std_logic_vector Pour le type STD_LOGIC ‘U’ < ‘X’ < ‘0’ < ‘1’ < ‘Z’ < ‘W’ < ‘L’ < ‘H’ < ‘-’ Pour le type STD_LOGIC_VECTOR ‘0’ < “00” < “000” < “001” < “100” < “111” < “1111” Attention: évitez de comparer deux std_logic_vector de tailles différentes Conception de composants programmables et langage HDL 11 4A-S1 Majeure systèmes embarqués et autonomes Les opérateurs pour les std_logic et std_logic_vector Opérateurs logiques and nand or nor xor xnor not Pour les std_logic_vector les opérations se fait bit par bit Opérateurs arithmétiques Conception de composants programmables et langage HDL 12 4A-S1 Majeure systèmes embarqués et autonomes Les opérations arithmétiques sur les std_logic_vector Les opérateurs arithmétiques ne sont pas définis dans le package STD_LOGIC_1164 Les opérateurs arithmétiques sont disponibles dans le package numeric_std mais pour des types unsigned, signed, natural et integer  Il faut convertir les std_logic_vector afin de pouvoir faire des opérations arithmétiques Conception de composants programmables et langage HDL 13 4A-S1 Majeure systèmes embarqués et autonomes Conversion de types dans le package numeric_std Conversions de types Fonctions de conversion Les types unsigned et signed sont définis dans le package numeric_std: type UNSIGNED is array ( NATURAL range ) of STD_LOGIC; type SIGNED is array ( NATURAL range ) of STD_LOGIC; Le type std_logic_vector est défini dans le package std_logic_1164: TYPE std_logic_vector IS ARRAY ( NATURAL RANGE ) OF std_logic; Les types std_logic_vector, signed et unsigned sont proches, on peut faire des conversions de type (cast) Le type integer est défini dans le package std: type INTEGER is range -2147483647 to 2147483647; Le type integer est différent, il faut donc passer par une fonction de conversion Conception de composants programmables et langage HDL 14 4A-S1 Majeure systèmes embarqués et autonomes Conversion de types dans le package numeric_std Conversions de types Fonctions de conversion Entre std_logic_vector et signed/unsigned, il suffit d’indiquer le type ciblé. Entre integer et signed/unsigned, il faut utiliser une fonction qui a comme nom To_type_ciblé Si on convertit integer en signed/unsigned, il faut indiquer dans la fonction de conversion la taille ciblée Il n’y a pas de conversion directe entre std_logic_vector et integer Conception de composants programmables et langage HDL 15 4A-S1 Majeure systèmes embarqués et autonomes Exercice 1 Modifier le code suivant afin de pouvoir faire la Conversions de types Fonctions de conversion somme Paramètres possibles pour l’addition UNSIGNED x UNSIGNED UNSIGNED x NATURAL NATURAL x UNSIGNED SIGNED x SIGNED SIGNED x INTEGER INTEGER x SIGNED Conception de composants programmables et langage HDL 16 4A-S1 Majeure systèmes embarqués et autonomes Solution Modifier le code suivant afin de pouvoir faire Conversions de types Fonctions de conversion la somme Paramètres possibles pour l’addition UNSIGNED x UNSIGNED UNSIGNED x NATURAL NATURAL x UNSIGNED SIGNED x SIGNED SIGNED x INTEGER INTEGER x SIGNED Conception de composants programmables et langage HDL 17 4A-S1 Majeure systèmes embarqués et autonomes Exercice 2 Modifier le code suivant afin de pouvoir faire Conversions de types Fonctions de conversion la somme Paramètres possibles pour l’addition UNSIGNED x UNSIGNED UNSIGNED x NATURAL NATURAL x UNSIGNED SIGNED x SIGNED SIGNED x INTEGER INTEGER x SIGNED Conception de composants programmables et langage HDL 18 4A-S1 Majeure systèmes embarqués et autonomes Solution Modifier le code suivant afin de pouvoir faire la somme Conversions de types Fonctions de conversion Possibilité 1 Paramètres possibles pour l’addition UNSIGNED x UNSIGNED UNSIGNED x NATURAL NATURAL x UNSIGNED Possibilité 2 SIGNED x SIGNED SIGNED x INTEGER INTEGER x SIGNED Conception de composants programmables et langage HDL 19 4A-S1 Majeure systèmes embarqués et autonomes Exercice 3 + - * / rem mod < >= = /= UNSIGNED x UNSIGNED = UNSIGNED Donner toutes les possibilités qui permettent UNSIGNED x NATURAL = UNSIGNED l’addition des signaux A, B et C NATURAL x UNSIGNED = UNSIGNED SIGNED x SIGNED = SIGNED SIGNED x INTEGER = SIGNED INTEGER x SIGNED = SIGNED Conversions de types Fonctions de conversion Conception de composants programmables et langage HDL 20 4A-S1 Majeure systèmes embarqués et autonomes Solution + - * / rem mod < >= = /= UNSIGNED x UNSIGNED = UNSIGNED Donner toutes les possibilités qui permettent UNSIGNED x NATURAL = UNSIGNED l’addition des signaux A, B et C NATURAL x UNSIGNED = UNSIGNED SIGNED x SIGNED = SIGNED SIGNED x INTEGER = SIGNED INTEGER x SIGNED = SIGNED Conversions de types Fonctions de conversion Conception de composants programmables et langage HDL 21 4A-S1 Majeure systèmes embarqués et autonomes Exercice 4 Compléter le code suivant: Les indices des vecteurs sont de type integer Conversions de types Fonctions de conversion Conception de composants programmables et langage HDL 22 4A-S1 Majeure systèmes embarqués et autonomes Solution Compléter le code suivant: Les indices des vecteurs sont de type integer Conversions de types Fonctions de conversion Conception de composants programmables et langage HDL 23 4A-S1 Majeure systèmes embarqués et autonomes Les packages std_logic_signed et std_logic_unsigned (déconseillés) library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; Ne pas utiliser en même temps -- use IEEE.STD_LOGIC_SIGNED.all; < >= = /= + - * STD_LOGIC_VECTOR STD_LOGIC_VECTOR STD_ULOGIC INTEGER STD_LOGIC_VECTOR INTEGER CONV_INTEGER[STD_LOGIC_VECTOR] return INTEGER C’est possible de faire une addition sur deux std_logic_vector en passant par les package std_logic_signed et std_logic_unsigned. Ces packages convertissent implicitement les std_logic_vector en signed/unsigned pour faire l’addition puis reconvertissent le résultat en std_logic_vector. Le problème avec ces packages est qu’on peut pas les utiliser en même temps. On ne peut donc pas mélanger les calculs signés et non signés dans le même composant VHDL. L’utilisation de ces deux packages est déconseillée car il ne s’agit pas de packages standard. Conception de composants programmables et langage HDL 24 4A-S1 Majeure systèmes embarqués et autonomes Le package std_logic_arith (déconseillé) Tout comme numeric_std, le package library IEEE; std_logic_arith ne permet pas de faire use IEEE.STD_LOGIC_1164.all; use directement des additions sur des IEEE.STD_LOGIC_ARITH.all; std_logic_vector. Pour faire cette addition, il faut passer par des fonctions de conversion + - différentes de celles de numeric_std. STD_ULOGIC < >= = /= UNSIGNED * UNSIGNED SIGNED UNSIGNED SIGNED INTEGER SIGNED INTEGER CONV_INTEGER[INTEGER/UNSIGNED/SIGNED/STD_ULOGIC] return INTEGER CONV_UNSIGNED[INTEGER/UNSIGNED/SIGNED/STD_ULOGIC, INTEGER] return UNSIGNED CONV_SIGNED[INTEGER/UNSIGNED/SIGNED/STD_ULOGIC, INTEGER] return SIGNED CONV_STD_LOGIC_VECTOR[INTEGER/UNSIGNED/SIGNED/STD_ULOGIC, INTEGER] return STD_LOGIC_VECTOR La conversion unsigned/signed vers std_logic_vector a besoin de fonction. La conversion std_logic vers signed/unsigned passe par un cast (comme dans le package numeric_std). Il est possible aussi de convertir integer en std_logic_vector en utilisant seulement la fonction de conversion. Par contre, ce n’est pas possible de passer directement de std_logic vers integer. Conception de composants programmables et langage HDL 25 4A-S1 Majeure systèmes embarqués et autonomes Définition des nouveaux types Les types peuvent aussi être déclarés dans l’architecture (visible seulement dans cette architecture) Dans un fichier séparé ou dans un processus (visible seulement dans ce processus) U1 I IP OP O Conception de composants programmables et langage HDL 26 4A-S1 Majeure systèmes embarqués et autonomes Les sous-types Définit dans le package STD.STANDARD Sous-types définit par l’utilisateur Sous-type anonyme Ces affectations sont-elles erronées? Conception de composants programmables et langage HDL 27 4A-S1 Majeure systèmes embarqués et autonomes Les sous-types Définit dans le package STD.STANDARD Sous-types définit par l’utilisateur Sous-type anonyme Génère une erreur car -1 est en dehors de l’intervalle indique de 0 à 255 Ne génère pas d’erreur Conception de composants programmables et langage HDL 28 4A-S1 Majeure systèmes embarqués et autonomes Les sous-types 8 bits, non signé 8 bits, signé complément à 2 10 bits, non signé 32 bits, complément à 2 Conception de composants programmables et langage HDL 29 4A-S1 Majeure systèmes embarqués et autonomes Les opérateurs arithmétiques et logiques dans numeric_std Sur les integers, natural, signed et unsigned + (pas des std_logic_vector) - * + - * / rem mod / < >= = /= ** Exposant A^B= A**B UNSIGNED x UNSIGNED rem Reste après A/B UNSIGNED x NATURAL NATURAL x UNSIGNED mod A modulo B SIGNED x SIGNED abs Valeur absolue |A| SIGNED x INTEGER = INTEGER x SIGNED Différent /= < >= Conception de composants programmables et langage HDL 30 4A-S1 Majeure systèmes embarqués et autonomes L’opérateur de concaténation Sur des bits individuels ou des vecteurs de bits: bit, std_logic, bit_vector, std_logic_vector,.. s3 aura « 0110 » comme valeur. Attention: pour que cela fonctionne, le type de s3 doit être de taille 4 (la somme des tailles des deux opérandes). Conception de composants programmables et langage HDL 31 4A-S1 Majeure systèmes embarqués et autonomes Les attributs des types L’attribut ‘RANGE Soient les déclarations suivantes Pas générique Attributs de tableau (à utiliser dès que possible) Générique A’LOW = 0 A’RANGE = 7 downto 0 A’HIGH = 7 A’REVERSE_RANGE = 0 to 7 A’LEFT = 7 A’LENGHT = 8 A’RIGHT = 0 Les attributs low/high et left/right s’il sont Attributs de type (à éviter en synthèse) utilisés avec un signal de type vecteur, ils SHORT’LOW = 0 MODE’LOW = W retournent l’indice maximal/minimal du SHORT’HIGH = 15 MODE’HIGH = Z vecteur, sinon la valeur maximale/minimale SHORT’LEFT = 0 MODE’LEFT = W possible du signal SHORT’RIGHT = 15 MODE’RIGHT = Z Conception de composants programmables et langage HDL 32 4A-S1 Majeure systèmes embarqués et autonomes Les agrégats Permettent d’accéder à plusieurs cases en même temps Soient les déclarations suivantes Exemples d’utilisation des agrégats Conception de composants programmables et langage HDL 33 4A-S1 Majeure systèmes embarqués et autonomes Les expressions qualifiées Des expressions ayant leurs types explicitement spécifiés. Cela est nécessaire dans le cas d’ambiguïté des types. Exemple 1 Illégal! Solution Exemple 2 N = 15 N = -1 Conception de composants programmables et langage HDL 34 4A-S1 Majeure systèmes embarqués et autonomes Les types et sous-types tableau (array) Conception de composants programmables et langage HDL 35 4A-S1 Majeure systèmes embarqués et autonomes Les types et sous-types tableau (array) Type tableau non contraint (exemple du type standard std_logic_vector) Type de l’index Type de l’élément Type tableau contraint Conception de composants programmables et langage HDL 36 4A-S1 Majeure systèmes embarqués et autonomes Utilisation du type array pour la description d’une mémoire Exemple 1: mémoire avec deux ports de données Résultat RTL Conception de composants programmables et langage HDL 37 4A-S1 Majeure systèmes embarqués et autonomes Utilisation du type array pour la description d’une mémoire Exemple 1: mémoire avec deux ports de données Intel Quartus Prime Pro Edition User Guide Résultat RTL Conception de composants programmables et langage HDL 38 4A-S1 Majeure systèmes embarqués et autonomes Utilisation du type array pour la description d’une mémoire Exemple 2: mémoire avec un seul port de données Résultat RTL Dans le cas d’une lecture, l’entrée OE du buffer tri-state est à 1 et il devient passant, le port Data devient une sortie Dans le cas d’une écriture, l’entrée OE du buffer tri- state est à 0 et il devient bloquant, le port Data devient une entrée Conception de composants programmables et langage HDL 39 4A-S1 Majeure systèmes embarqués et autonomes Utilisation du type array pour la description d’une mémoire Exemple 2: mémoire avec un seul port de données Rd=‘1’ and Wr=‘0’ data_out Data RAM Attention: pour pouvoir lire à partir de la mémoire, le tristate d’écriture (celui en bas) doit être désactivé (un seul chemin doit être actif à la fois). Puisque ce tristate est en entrée au module mémoire, on peut le désactiver soit par un autre module, soit lors de la simulation en affectant la valeur (others => ‘Z ’) au signal Data (voir TP3). Conception de composants programmables et langage HDL 40 4A-S1 Majeure systèmes embarqués et autonomes

Use Quizgecko on...
Browser
Browser