T. BLOTIN Lycée Paul-Eluard SAINT-DENIS
|
|
|
- Henri Archambault
- il y a 10 ans
- Total affichages :
Transcription
1 T. BLOTIN Lycée Paul-Eluard SAINT-DENIS
2 SOMMAIRE I. Le VHDL pour qui, pourquoi, quand, comment? A. Le VHDL! B. Pourquoi un langage de description? C. Les limites actuelles II. Structure d une description VHDL. A. Entité et architecture B. Package, package body et configuration C. Description comportementale et structurelle... 7 III. Les instructions concurrentes et séquentielles A. La nécessité d'utiliser des instructions concurrentes... 9 B. Les instructions séquentielles B. 1. Les process B. 2. Les boucles et instructions if, then, else, elsif, for, case B. 3. Les vecteurs de signaux B. 4. La déclaration GENERIC IV. Les fonctions et procédures A. Rôle, principe et fonctionnement B. Déclaration des fonctions et procédures au sein de package V. Les types prédéfinis ou non, surcharge des opérateurs, fonction de résolution A. Les types prédéfinis et les opérateurs associés B. Définition de types et surcharges des opérateurs C. Fonction de résolution d'un type D. Le package IEEE standard logic VI. Les attributs A. Présentation des attributs, leurs rôles B. Définition d'un attribut VII. Synthèse d'une description VHDL A. Fonctions combinatoires B. Fonctions séquentielles C. Synthèse d'un diagramme d'états T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS
3 I. Le VHDL pour qui, pourquoi, quand, comment? A. Le VHDL! VHDL VHSIC Hardware Description Language Développé dans les années 80 aux États-Unis, le langage de description VHDL est ensuite devenu une norme IEEE numéro 1076 en Révisée en 1993 pour supprimer quelques ambiguïtés et améliorer la portabilité du langage, cette norme est vite devenue un standard en matière d'outils de description de fonctions logiques. A ce jour, on utilise le langage VHDL pour : concevoir des ASIC, programmer des composants programmables du type PLD, CPLD et FPGA, concevoir des modèles de simulations numériques ou des bancs de tests. B. Pourquoi un langage de description? L'électronicien a toujours utilisé des outils de description pour représenter des structures logiques ou analogiques. Le schéma structurel que l'on utilise depuis si longtemps et si souvent n'est en fait qu'un outil de description graphique. Aujourd'hui, l'électronique numérique est de plus en plus présente et tend bien souvent à remplacer les structures analogiques utilisées jusqu'à présent. Ainsi, l'ampleur des fonctions numériques à réaliser nous impose l'utilisation d'un autre outil de description. Il est en effet plus aisé de décrire un compteur ou un additionneur 64 bits en utilisant l'outil de description VHDL plutôt qu'un schéma. Le deuxième point fort du VHDL est d'être un langage de description de haut niveau. D'autres types de langage de description, comme l'abel par exemple, ne possèdent pas cette appellation. En fait, un langage est dit de haut niveau lorsqu'il fait le plus possible abstraction de l'objet auquel ou pour lequel il est écrit. Dans le cas du langage VHDL, il n'est jamais fait référence au composant ou à la structure pour lesquels on l'utilise. Ainsi, il apparaît deux notions très importantes : portabilité des descriptions VHDL, c'est-à-dire, possibilité de cibler une description VHDL dans le composant ou la structure que l'on souhaite en utilisant l'outil que l'on veut (en T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 1
4 supposant, bien sûr, que la description en question puisse s'intégrer dans le composant choisi et que l'outil utilisé possède une entrée VHDL) ; conception de haut niveau, c'est-à-dire qui ne suit plus la démarche descendante habituelle (du cahier des charges jusqu'à la réalisation et le calcul des structures finales) mais qui se limite à une description comportementale directement issue des spécifications techniques du produit que l'on souhaite obtenir. C. Les limites actuelles La norme qui définit la syntaxe et les possibilités offertes par le langage de description VHDL est très ouverte. Il est donc possible de créer une description VHDL de systèmes numériques non réalisable, tout au moins, dans l'état actuel des choses. Il est par exemple possible de spécifier les temps de propagations et de transitions des signaux d'une fonction logique, c'està-dire créer une description VHDL du système que l'on souhaite obtenir en imposant des temps précis de propagation et de transition. Or les outils actuels de synthèses logiques sont incapables de réaliser une fonction avec de telles contraintes. Seuls des modèles théoriques de simulations peuvent être créés en utilisant toutes les possibilités du langage. La situation peut donc se résumer de la façon suivante : Création de modèles de simulations : Création d'un circuit intégré : NORME IEEE VHDL La totalité de la norme peut être utilisée pour réaliser des modèles de simulations. NORME IEEE VHDL Seule une partie de la norme peut être utilisée pour réaliser des circuits. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 2
5 II. Structure d une description VHDL A. Entité et architecture En VHDL, une structure logique est décrite à l'aide d'une entité et d'une architecture de la façon suivante : Entrées STRUCTURE LOGIQUE Sorties ENTITY Nom de l'entité IS Description des entrées et des sorties de la structure en explicitant pour chacune d'entre elles le nom, la direction (IN, OUT et INOUT) et le type. END Nom de l'entity ; ARCHITECTURE Nom de l'architecture OF Nom de l'entité IS Zone de déclaration. BEGIN Description de la structure logique. END nom de l'architecture ; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 3
6 Prenons l exemple d un additionneur 1 bit. Début de l'entité. Nom de l'entité. A B Additionneur Som Ret entity additionneur is port (A, B : in bit; Som, Ret : out bit); end additionneur ; Fin de l'entité. Déclaration des signaux d'entrées et de sorties : port (nom : direction type) nom = A, B, Som et Ret direction = in ou out type = bit Début de l'architecture. Nom de l'architecture. A B = 1 & Som Ret architecture arch_addi of additionneur is Som <= A xor B; Ret <= A and B; end arch_addi; Nom de l'entité associée. L'entité donne les informations concernant les signaux d'entrées et de sorties de la structure ainsi que leurs noms et leurs types. L'architecture décrit le comportement de l'entité. Fin de l'architecture. Description du comportement de l'architecture. Il est possible de créer plusieurs architectures pour une même entité. Chacune de ces architectures décrira l'entité de façon différente. ENTITE ADDITIONNEUR ARCHITECTURE ARCH_ADD1 ARCHITECTURE ARCH_ADD2 ARCHITECTURE ARCH_ADD3 T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 4
7 B. Description comportementale et structurelle Il existe deux façons distinctes de décrire une structure. L'une dite comportementale et l'autre structurelle. Description comportementale Dans ce type de description, le comportement de la structure est directement inscrit dans l'architecture à l'aide d'instructions séquentielles ou sous forme de flow de données. Description comportementale à l'aide d'instructions séquentielles : A B = 1 & Som Ret architecture Arch_comp1 of entité_x is process (A, B) if (A = '0' and B = '0') then Som <= '0'; Ret <= '0'; if (A = '0' and B = '1') then Som <= '1'; Ret <= '0'; if (A = '1' and B = '0') then Som <= '1'; Ret <= '0'; if (A = '1' and B = '1') then Som <= '1'; Ret <= '1'; end if; end process; end arch_comp1; Description comportementale sous forme de flow de données : A B = 1 & Som Ret architecture Arch_comportementale of entité_x is Som <= A xor B; Ret <= A and B; end arch_comportementale; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 5
8 Description structurelle E1 E2 Dans ce type de description, on relie entre eux des composants préalablement décrits en VHDL. = 1 S entite XOU is port (E1, E2 : in bit; S1 : out bit); S1 <= E1 XOR E2; end A_XOU; end XOU; E1 architecture A_XOU of XOU is E2 & S entite ET is port (E2, E3 : in bit; S2 : out bit); end ET; architecture A_ET of ET is S2 <= E3 AND E4; end A_ET; A B E1 XOU S1 E2 Som E3 E4 ET S2 Ret Déclaration du composant XOU. Déclaration du composant ET. Spécification de l'entité et de l'architecture utiliser pour les composants ET et XOU. Câblage des composants XOU et ET appelé U1 et U2. Entité add is port (A, B : in bit; Som, Ret : out bit); end add; architecture Arch_structurelle of add is component XOU port (E1, E2 : in bit; S : out bit); end component; component ET port (E1, E2 : in bit; S : out bit); end component; for U1 : XOU use entity work.xou(a_xou); for U2 : ET use entity work.et(a_et); U1 : XOU port map (A, B, Som); U2 : ET port map (A, B, Ret); end arch_structurelle; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 6
9 C. Configuration, package et package body Admettons que plusieurs architectures aient été créées pour l'entité A utilisée au sein de l'architecture arch_princ de l'entité princ. Lors de la synthèse ou de la simulation de l'entité princ, il va être nécessaire de spécifier quelles sont les architectures à utiliser. Cette spécification peut être faite grâce à l'utilisation d'une configuration. ENTITE princ Architecture de type structurelle nommée arch_princ utilisant l'entités A pour le composant nommé U1. ENTITE A Architecture arch_a1 Architecture arch_a2 Architecture arch_a3 Configuration conf_princ of Princ is for arch_princ for U1 : A use entity work.a(arch_a2) end for; end for; end conf_princ; Se lit pour le composant appelé U1 de l'architecture arch_princ de l'entité nommée princ, utiliser l'architecture arch_a2 de l'entité A. La configuration permet, comme son nom l'indique, de configurer l'entité à laquelle elle est associée. On peut, par exemple, spécifier les architectures à utiliser pour tous les composants déclarés au sein d'une description. Pour qu'une description soit portable, c'est-à-dire synthétisable ou simulable sur des outils différents et pour des composants cibles différents, il est préférable de n'avoir qu'une seule architecture par entité. Les configurations deviennent alors inutiles. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 7
10 Dans le langage VHDL, il est possible de créer des package et package boy dont les rôles sont de permettre le regroupement de données, variables, fonctions, procédures, etc., que l'on souhaite pouvoir utiliser ou appeler à partir d'architectures. Il est ainsi possible de se créer une sorte de bibliothèque d'objets (constantes, variables particulières, fonctions ou procédures spécifiques, etc.) que l'on pourra appeler à partir de plusieurs descriptions. Cette possibilité est particulièrement intéressante lorsque l'on utilise, au sein d'un projet contenant plusieurs entités, des ressources (constantes, variables particulières, fonctions...) identiques. Imaginons, par exemple, qu'un projet contenant deux entités A et B aux architectures respectives arch_a et arch_b utilise la constante de temps tps_propa = 27ns. L'utilisation d'un package nommé pack_proj et d'un package body nommé pack_bod donnerait : Package pack_proj is constant tps_propa : time; end pack_proj; package body pack_bod of pack_proj is constant tps_propa : time := 27ns; end pack_bod; Déclaration d'une constante de type time. Initialisation de cette constante à une valeur de 27 ns. ENTITE A Architecture arch_a Use work.pack_proj.all entity A is...; end A; architecture arch_a of A is...; S <= E after tps_propa;...; end arch_a; PACKAGE pack_proj ENTITE B Use work.pack_proj.all entity A is...; end A; PACKAGE BODY pack_bod Architecture arch_b Indique que le signal S va se voir affecter la valeur du signal E après un retard de 27ns=tps_propa. architecture arch_a of A is...; S <= E after tps_propa;...; end arch_a; La ligne de commande use work.pack_proj.all qui se trouve en tête des déclarations des entités a pour but de prévenir l'analyseur ou le synthétiseur que l'on va utiliser des éléments du package pack_proj, en l'occurrence la constante de type time tps_propa initialisée à 27ns. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 8
11 III. Les instructions concurrentes et séquentielles A. La nécessité d'utiliser des instructions concurrentes Lorsque l'on étudie une structure logique, il apparaît à l évidence que les signaux qui la constituent évoluent de façon indépendante et parallèle. Prenons l'exemple simple suivant : A B 1 & S 1 S 2 architecture ET_OU of ET_OU is S2 <= A and B; S1 <= A or B; end ET_OU; Dans cet exemple, les signaux S 1 et S 2 évoluent de façon indépendante et parallèle. Il est donc impossible de décrire leur évolution de façon séquentielle. Il faut avoir recours à des instructions de types concurrents qui s'exécutent en parallèle indépendamment de leur ordre d'écriture. Ainsi, à l'exécution de la description ci-dessus, c'est-à-dire lors de la simulation, les signaux S1 et S2 seront réactualisés en continu, en fonction des valeurs de A et de B et de façon parallèle. On parle alors d instructions concurrentes. Mais alors que se passe-t-il si la structure présente des rebouclages avec ses sorties comme la bascule RS, par exemple? En fait, le simulateur regarde en permanence si le changement de valeur prévu d'un signal ne va pas entraîner celui d'un ou plusieurs autres signaux et réagit en conséquence. Dans le cas de la bascule RS, A 1 Q B 1 /Q si le changement d'état de l'entrée A entraîne celui de la sortie Q, alors le simulateur va calculer l'état futur de la sortie /Q et, si cela est nécessaire, calculer à nouveau l'état de Q, puis celui de /Q, etc., jusqu'à arriver à une situation stable. On peut résumer le fonctionnement du simulateur de la façon suivante : A chaque changement d'état d'un ou de plusieurs signaux d'entrées, le simulateur calcule l'état des signaux de sorties en tenant compte des rebouclages jusqu'à aboutir à une situation stable. C'est à ce moment, et seulement à ce moment, que les valeurs des signaux de sorties sont réactualisées. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 9
12 Notons que cette règle de fonctionnement laisse entrevoir des possibilités simples de blocage du simulateur. Prenons l'exemple du montage suivant : E & S /S 1 Lors de la simulation de ce montage, tant que E = '0' le simulateur donne S = '1' mais dès que E = '1', le simulateur n'arrive pas à résoudre l'équation "S <= not (E and not (S))". Pour que ce montage puisse être simulé, il faudrait introduire des temps de propagation aux portes logiques. On peut alors rajouter à la règle de fonctionnement précédente que le simulateur stocke en mémoire les évolutions futures des signaux du montage. Dans notre exemple, le signal /S va évoluer après le temps tp de propagation de la porte NON. Le simulateur va donc mémoriser que le signal /S doit évoluer dans tp secondes après l'évolution de S. En prolongeant la simulation, on pourra constater l'évolution du signal /S. On peut alors chercher à savoir ce qui se passe lorsque le signal S évolue plus rapidement que le temps de propagation de la porte. La réponse est simple, il y a en VHDL deux cas de figure : S S S 1 /S Durée < tp t Durée > tp S 1 /S S Décalage de tp t Suppression de cette impulsion Dans le premier cas, on parle de mode transport : toutes les transitions en entrée sont transmises en sortie avec un décalage égal au temps de propagation. Dans le deuxième cas, on parle de mode inertiel : les transitions présentes en entrée et plus courtes que le temps de propagation ne sont pas transmises. Le langage VHDL propose ces deux modes d'affectation. Le mode inertiel est celui par défaut, alors que le mode transport doit être rajouté dans l'instruction d'affectation : /S <= transport S after 10ns; t T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 10
13 On peut dissocier trois types d instructions concurrentes : les instructions d'affectation utilisée au sein des exemples précédents qui correspondent à l'écriture d'une équation booléenne, les instructions conditionnelles du type "affectation When condition else...", les instructions conditionnelles du type "With signal select affectation When condition else...", L'instruction When else Cette instruction permet d'affecter un signal à une expression (expression = signal, équation ou valeur) pour certaines conditions (conditions sur les signaux de type IN ou INOUT). Voici un exemple d'utilisation de ce type d'instruction lors de la description d'un multiplexeur : entity exemple is port (A, B, C : IN bit; Sel : IN bit_vector (1 downto 0); S : OUT bit); end exemple; architecture exemple of exemple is S <= A when (Sel = "00") else B when (Sel = "01") else C when (Sel = "10") else '0'; end exemple; L'instruction With select when Cette instruction est semblable à la précédente avec en plus une précision préalable du signal sur lequel vont se porter les conditions. En reprenant l'exemple précédent, on obtient donc : entity exemple is port (A, B, C : IN bit; Sel : IN bit_vector (1 downto 0); S : OUT bit); end exemple; architecture exemple of exemple is With Sel select S <= A when "00", B when "01", C when "10", '0' when others; end exemple; Ici il s'agit de la définition d'un bus de signaux. Cette déclaration est équivalente à S1 : IN bit ; S2 : IN bit; S comporte donc deux éléments identiques à S1 et S2 (voir paragraphe B.3 ci-après). Ici il s'agit de la définition d'un bus de signaux. Cette déclaration est équivalente à S1 : IN bit ; S2 : IN bit; S comporte donc deux éléments identiques à S1 et S2 (voir paragraphe B.3 ci-après). T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 11
14 B. Les instructions séquentielles B. 1. Les process Par opposition aux instructions concurrentes présentées au paragraphe précédent, le langage VHDL propose un jeu très complet d'instructions séquentielles identiques à celles que l'on trouve dans les langages de programmation évolués C++, Pascal, etc. Mais, comme on a pu le constater au paragraphe précédent, ces types d'instructions ne peuvent être utilisés pour décrire les phénomènes (évolution de signaux indépendants) que l'on rencontre dans les montages à base de composants logiques. Pourtant, il aurait été dommage de se passer de la puissance et du confort qu'offre ce type d'instructions. Pour palier l'incompatibilité qui existe entre les instructions séquentielles et le fonctionnement des montages que l'on souhaite décrire, le langage VHDL propose une solution simple qui consiste à créer des ensembles appelés process, regroupant des instructions séquentielles et se comportant, d'un point de vue externe, comme des instructions concurrentes. Voici un exemple d'équivalence entre deux descriptions, l'une à base d'instructions concurrentes et l'autre à base d'instructions séquentielles regroupées au sein d'un process. architecture Arch of Ent is S1 <= A and B; S2 <= A when B = 1 else /A when C = 1 else D; end Arch; architecture Arch of Ent is Process (A, B) if (A = 1 and B = 1 ) then S1 <= 1 ; else S1 <= 0 ; end if; end process; Process (B, C) if (B = 0 ) then S2 <= A; elsif (C = 1 ) then S2 <= not(a); else S2 <= D; end if; end process; A travers cet exemple, on constate que les deux process end Arch; se comportent comme deux instructions concurrentes. L'exécution d'un process est concurrente même si les instructions qu'il contient sont séquentielles. Notons que la déclaration d'un process débute par le mot clé process, suivi d'une liste de noms de signaux. Cette liste est appelée liste de sensibilité, elle contient le nom des signaux T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 12
15 dont le changement d'état va provoquer l'exécution du process. En d'autres termes, le process dont la déclaration est la suivante : process (A, B) va être exécuté à chaque changement d'état de l'un (ou des deux) signal(aux) A et B. L'exécution d'un process n'a lieu qu'en cas de changement d'état de l'un (ou de plusieurs) signal(aux) compris dans la liste de sensibilité. Au paragraphe précédent, nous avons constaté, grâce à l'exemple de la bascule RS, que l'exécution d'une instruction concurrente pouvait entraîner celle d'une autre instruction de même type, qui elle-même pouvait entraîner, etc. Ce principe s'applique aux process dont l'exécution peut, par conséquent, entraîner celle d'un autre process, qui elle-même peut entraîner, etc. Si l'on reprend l'exemple de la bascule RS décrite à l'aide de deux process, on obtient : Entity RS is port (A, B : in bit; Q, Qb : inout bit); end RS; A 1 Q architecture RS of RS is process (A, Qb) Q <= not (A or Qb); end process; B 1 Qb process (Q, B) Qb <= not (B or Q); end process; end RS; On suppose au départ que A et B = '0' avec Q = '0' et Qb = '1' puis B passe à '1'. L'exécution des deux process de l'architecture RS peut se représenter de la façon suivante : B Exécution du 2 e process suite au changement de B 2 e Process Qb passe de 1 à 0 Exécution du 2 e process suite au changement de Qb 1 ér Process Q passe de 0 à 1 Exécution du 2 e process suite au changement de Q 2 e Process Qb reste à 0 Situation stable affectations des signaux : Q <= 1; Qb <= 0; B. 2. Les boucles et instructions if, then, else, for, case... Les instructions séquentielles du type if, then, else... sont très puissantes et permettent la réalisation de boucles conditionnelles intéressantes. De plus, la syntaxe qui leur est associée ne présente pas de difficultés particulières et permet une écriture des descriptions très lisible. Ainsi, T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 13
16 pour bien utiliser ce type d instructions, il suffit souvent de comprendre leurs significations. Vous trouverez ci-dessous quelques exemples de traductions de boucles ou d ensembles d instructions conditionnelles. INSTRUCTION IF SI condition1 ALORS instructions séquentielles; SINON SI condition2 ALORS instructions séquentielles; SINON SI condition3 ALORS instructions séquentielles; IF condition1 THEN instructions séquentielles; ELSIF condition2 THEN instructions séquentielles; ELSIF condition3 THEN instructions séquentielles; SINON instructions séquentielles; FIN DU SI; ELSE instructions séquentielles; END IF; oui Début de IF condition1 non IF Remarques : Il est possible d imbriquer plusieurs boucles IF les unes dans les autres. IF... THEN IF... THEN ELSIF... THEN END IF; ELSE END IF; Les instructions ELSIF et ELSE ne sont pas obligatoires. ESLSIF Instructions oui séquentielles Condition 2 ELSIF Instructions séquentielles Fin de IF Instructions séquentielles Condition n Instructions séquentielles T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 14 oui non ELSE (option) non
17 BOUCLE FOR FOR paramètre IN intervalle LOOP instructions séquentielles; END LOOP; POUR le paramètre COMPRIS dans l'intervalle EXECUTER instructions séquentielles; FIN DE LA BOUCLE; Boucle FOR oui Condition sur l intervalle conditionnant l'arrêt de la boucle Exemple : FOR i IN 0 to 3 LOOP IF (A = i) THEN S <= B; END IF; END LOOP; non Instructions séquentielles utilisant la valeur du paramètre. Fin boucle FOR Exécuter, pour i = 0, i = 1, i = 2 puis i = 3 les instructions suivantes : SI (A = i) THEN S <= B; END IF; FIN DE LA BOUCLE; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 15
18 INSTRUCTION CASE CASE signal IS WHEN valeur1 => instructions séquentielles; WHEN valeur2 => instructions séquentielles; WHEN valeur3 => instructions séquentielles; WHEN OTHERS => instructions séquentielles; END CASE; CAS possibles de l expression EST LORSQUE signal = valeur1 => instructions séquentielles; LORSQUE signal = valeur2 => instructions séquentielles; LORSQUE signal = valeur3 => instructions séquentielles; LORSQUE signal = AUTRES => instructions séquentielles; FIN DE CAS; oui DÈbut CASE Valeur1 non When valeur1 Remarques : L instruction CASE, souvent appelée switch case, convient parfaitement pour décrire un diagramme d'état, un grafcet ou tout autre formalisme de structures séquentielles (voir paragraphe C du chapitre VII). L'instruction When others n'est pas obligatoire, elle représente une facilité d'écriture. When valeur2 When valeur n Instructions oui séquentielles Valeur 2 Instructions séquentielles Fin CASE Instructions séquentielles Valeur n Instructions séquentielles T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 16 oui non When others (option) non
19 B. 3. Les vecteurs de signaux Au sein des exemples précédents, nous n'avons utilisé que des signaux uniques et jamais de vecteurs ou de bus de signaux. Or le langage de description VHDL permet la déclaration et la manipulation de ce type de signaux. Voici un exemple commenté de description qui utilise des vecteurs ou des bus de signaux : Multiplexeur de vecteurs de signaux : A B S S = A si SEL = 1 et S = B si SEL = 0. SEL 1 Entity MUX is port (SEL : in bit; A : in bit_vector (7 downto 0); B : in bit_vector (7 downto 0); S : out bit_vector (7 downto 0)); end MUX; architecture Arch_MUX of MUX is S <= A when SEL = '1' else S <= B when SEL <= '0'; end Arch_MUX; Déclaration de trois signaux correspondant à des bus (un vecteur de signaux) comportant 8 signaux A(0), A(1),..., A(7) et B(0), B(1),..., B(7) ainsi que S(0), S(1),..., S(7). Pour assigner une valeur à un des éléments d'un bus, on utilise le nom du bus suivi du numéro de l'élément, exemple : B(3) <= '1'; l'élément 3 du bus B prend la valeur '1'. Pour assigner une valeur à l'ensemble du bus, plusieurs méthodes sont possibles, exemples: A <= " "; assigne la valeur aux éléments A(7), A(6),..., A(0). A <= (7 => '1', 6 => '1', 5 downto 4 => '0', 3 => '1', 2 => '0', 1 => '1', 0 => '0'); assigne la valeur aux éléments A(7), A(6),..., A(0). S <= (7 => '1', others => 'z'); assigne la valeur 1ZZZZZZZ au vecteur S. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 17
20 B. 4. La déclaration GENERIC Au sein de la description VHDL d une structure logique, il est possible de rajouter une déclaration de GENERIC correspondant à des paramètres. Ces paramètres pourront, par la suite, être modifiés lors de l'utilisation de la description en temps que composant. Typiquement, on utilise une déclaration de GENERIC pour spécifier des temps de propagation et autres délais de portes logiques. Ces temps seront alors modifiables lors de l'utilisation de ces portes logiques dans une description structurelle. Voici un exemple d'utilisation de déclarations de GENERIC : Entity OU is GENERIC (TP : time := 20 ns); port (E1, E2 : in bit; S1 : out bit); end OU; Entity ET is GENERIC (TP : time := 0 ns); port (E1, E2 : in bit; S1 : out bit); end ET; architecture OU of OU is S1 <= E1 or E2 after TP; end OU; architecture ET of ET is S1 <= E1 and E2 after TP; end ET; Entity ET_OU is port (A, B : in bit; X, Y : out bit); end ET_OU; architecture ET_OU of ET_OU is component OU generic (TP : time); port (E1, E2 : in bit; S1 : out bit); end component; component ET generic (TP : time); port (E1, E2 : in bit; S1 : out bit); end component; for U1 : OU use entity work.ou(ou); for U2 : ET use entity work.et(et); U1 : OU generic map ( TP => 5 ns ) port map (A, B, X); U2 : ET generic map ( TP => 15 ns ) port map (A, B, Y); end ET_OU; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 18
21 IV. Les fonctions et procédures A. Rôle, principe et fonctionnement Le langage VHDL permet l'utilisation et la création de fonctions ou de procédures que l'on peut appeler à partir d'une architecture. Le rôle de ces fonctions ou procédures est de permettre, au sein d'une description, la création d'outils dédiés à certaines tâches pour un type déterminé de signaux (voir chapitre suivant concernant les types de signaux). Cette notion d'objets est typique aux langages évolués de programmation. Dans le montage X suivant, on utilise à quatre reprises la fonction logique NONET à trois entrées. On décide donc de décrire ce montage en créant une description VHDL comportant une fonction nommée NONET. A1 A2 A3 B1 B2 B3 C1 C2 C3 MONTAGE X & & & & S1 S2 S3 S4 création de la fonction NONET Utilisation de la fonction NONET Entity montage_x is port (A1, A2, A3, B1, B2, B3, C1, C2, C3 : IN bit ; S1, S2, S3 : INOUT bit ; S4 : OUT bit) ; end montage_x ; Architecture Arch of montage_x is function NONET (A, B, C : bit) return bit is variable result : bit; result := not (A and B and C); return result; end; S1 <= NONET (A1, A2, A3); S2 <= NONET (B1, B2, B3); S3 <= NONET (B1, B2, B3); S4 <= NONET (S1, S2, S3); end Arch; Déclaration des signaux S1, S2 et S3 avec la direction INOUT car ils sont utilisés au sein de la description È T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 19
22 La syntaxe d une fonction est donc la suivante : FUNCTION nom de la fonction (liste des paramètres de la fonction avec leur type) RETURN type du paramètre de retour IS zone de déclaration des variables; BEGIN...; instructions séquentielles;...; RETURN nom de la variable de retour ou valeur de retour; END; Une fonction reçoit donc des paramètres d'entrées et renvoie un paramètre de sortie. Dans l'exemple précédent, la fonction reçoit trois paramètres A, B et C et retourne un paramètre S. Le mot clé RETURN permet d'associer au paramètre de sortie une valeur. Une fonction peut donc contenir plusieurs RETURN, exemple : FUNCTION bool_vers_bit (X : boolean) RETURN bit IS BEGIN if X then RETURN '1'; else RETURN '0'; end if; END; Cette fonction, qui convertit un signal de type booléen en un signal de type bit, possède deux RETURN. L'un pour renvoyer la valeur '1' et l'autre pour la valeur '0'. Notons qu'il est possible de déclarer une variable interne à la fonction que l'on pourra affecter au paramètre de sortie (voir exemple précédent), ce type d'affectation "signal <= variable" est impossible en dehors des fonctions, procédures ou process. En ce qui concerne l'appel d'une fonction, il peut être fait à partir d'instructions séquentielles ou concurrentes. Dans le cas des instructions concurrentes, la fonction sera toujours vérifiée. En ce qui concerne les procédures, elles diffèrent des fonctions par le fait qu'elles acceptent des paramètres dont la direction peut être IN, INOUT et OUT. Une procédure ne possède donc pas un ensemble de paramètres d'entrées et un paramètre de sortie mais un T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 20
23 ensemble de paramètres d'entrées-sorties et aucun paramètre spécifique de sortie. Prenons l'exemple de la description d'une bascule RS à travers une procédure : Test_de_RS A 1 Q B 1 Qb Entity test_de_rs is port (E1, E2 : IN bit; S1, S2 INOUT bit); end test_de_rs; Architecture test_de_rs of test_de_rs is PROCEDURE RS (signal A, B : IN bit; signal Q, Qb : INOUT bit) IS BEGIN Q <= not (A or Qb); Qb <= not (B or Q); END; RS (E1, E2, S1, S2); end test_de_rs; On constate que les paramètres A, B, Q et Qb de la procédure ont été explicitement décrits. Ainsi, la liste des paramètres contient : le genre de paramètre, variable (valeur par défaut), signal ou constante, le nom des paramètres, dans notre cas, A, B, Q et Qb (ces noms ne sont connus en temps que paramètres qu'à l'intérieur de la procédure), la direction de chaque paramètre, IN, OUT ou INOUT (dans notre cas INOUT pour Q et Qb qui sont utilisés en lecture IN et écriture OUT au sein de la procédure), le type des paramètres (voir chapitre V concernant les types), bit dans notre cas. Remarque : Dans l'exemple ci-dessous, les paramètres de la procédure étaient de genre signal, ce qui impliquait les affectations "<=" propres aux signaux. Dans le cas où les paramètres sont de genre T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 21
24 variable, il faut utiliser les symboles ":=" propres aux variables. Si l on reprend cet exemple, en utilisant des paramètres de genre variable, on obtient une description moins lisible qui est la suivante : architecture test_rs of test_rs is PROCEDURE RS (signal A, B : IN bit; variable Q, Qb : INOUT bit) IS BEGIN Affectation de variable Q := not (A or Qb); ":=" du type signal vers Qb := not (B or Q); variable impossible en END; dehors de procédure ou fonction. process (E1, E2) variable Q1, Q2 : bit; RS (E1, E2, Q1, Q2); if (Q1 = '1') then S1 <= '1'; else S1 <= '0'; end if; if (Q2 = '1') then S2 <= '1'; else S2 <= '0'; end if; end process; end test_rs; Les deux IF permettent de convertir les variables Q1 et Q2 en deux signaux S1 et S2. B. Déclaration des fonctions et procédures au sein de packages Dans les exemples qui précèdent, les fonctions ou procédures ont été insérées dans des architectures. Or, dans ce cas précis, les fonctions ou procédures en question ne sont accessibles que dans l'architecture dans laquelle elles ont été décrites. Pour les rendre accessibles à partir de plusieurs architectures, il est nécessaire de les déclarer au sein de packages et de déclarer en amont de l'architecture vouloir utiliser ce package. En reprenant l'exemple de la création d'une fonction NONET et en insérant cette fonction au sein d'un package, voici ce que l'on obtient : T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 22
25 A1 B1 B2 B3 C3 MONTAGE X & S1 S2 S4 Déclaration de la fonction NONET Création de la fonction NONET Déclaration de la librairie et du membre utilisé Utilisation de la fonction NONET Package pack_nonet is function NONET (A, B, C : bit) return bit; end pack_nonet; Package body pack NONET is function NONET (A, B, C : bit) return bit is variable result : bit; result := not (A and B and C); return result; end; end pack_nonet; Library user; use user.pack_nonet.all; Entity montage_x is port (E1, E2, E3,... : IN bit; S1,... : OUT bit); end montage_x; Architecture Arch of montage_x is... S1 <= NONET (E1, E2, E3);... end Arch; Le nom de cette librairie correspond au nom donné au répertoire utilisateur où sont stocké les fichiers simulables issus de l'analyse des descriptions VHDL. Pour certains outils ce répertoire est par défaut appelé work. On aura alors les lignes suivantes: Library work; use work.pack_nonet.all; Notons que la fonction NONET déclarée dans le package est décrite dans le package body. Cette procédure est obligatoire et valable aussi pour les procédure : Toute fonction ou procédure déclarée au sein d'un package est décrite dans le package body associé à ce package. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 23
26 V. Les types prédéfinis ou non, surcharge des opérateurs, fonction de résolution A. Les types prédéfinis et les opérateurs associés Depuis le début de ce document, nous utilisons des signaux que l'on déclare en utilisant la syntaxe "S : out bit;". Cette déclaration signifie que le nom du signal est S, que sa direction est out (sortie) et qu'il est de type bit. Nous allons, au cours de ce paragraphe, nous intéresser tout particulièrement au type d'un signal. Le type d'un signal définit l'ensemble auquel appartient un signal au même titre que l'on dit du nombre 3 qu'il appartient à l'ensemble des entiers. Le langage VHDL initial propose des types prédéfinis, c'est-à-dire des types pour lesquels l'ensemble est clairement défini. Voici les types prédéfinis proposés par le langage VHDL initial : Nom du type Définition de l'ensemble BIT Deux valeurs possibles 0 ou 1 INTEGER Entiers (nombre positif ou négatif sur 32 bits) REAL Réels BOOLEAN Deux valeurs possibles True ou False CHARACTER Caractères a, b, c..., 1, 2... TIME Nombre réel de temps fs, ps..., min, hr. On peut donc déclarer un signal de la façon suivante : S : out integer; Dans ce cas précis, le signal S est de type entier et peut, par conséquent, prendre l'une des valeurs de l'ensemble des nombres entiers. On peut alors s'interroger sur l'existence d'opérateurs capables de gérer tous ces différents types. En effet, si l'opération A or B semble compréhensible lorsque les signaux A et B sont de types bit, elle devient stupide lorsque les signaux sont de types entiers, sans parler du cas ou les signaux sont de types différents. En fait, le langage VHDL initial propose avec ses types prédéfinis des opérateurs dédiés capables de faire la somme, la soustraction d'entiers ou de réels, etc. Notons que, en l absence de fonctions ou de procédures créées par l'utilisateur (voir chapitre IV), il n'existe pas d'opérateur prédéfini capable de manipuler des signaux de types différents. Le langage VHDL initial propose des types prédéfinis ainsi que des opérateurs associés que l'utilisateur peut utiliser au sein des descriptions. On peut donc écrire : A + B avec A et B de type entiers et "+" une fonction d'addition entre entiers. A + B avec A et B de type réels et "+" une fonction d'addition entre réels. Dans ces deux exemples, les fonctions "+" d'addition ont le même nom mais ne sont pas identiques, car elles concernent des types distincts. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 24
27 En plus des différents types listés dans le tableau précédent, le langage VHDL propose trois types très utiles dont voici la définition. Type énumération Ces types sont utilisés lorsque l'on souhaite créer un nouveau type de signal (voir paragraphe C ci-dessous) ou lorsque l'on souhaite créer un signal ou une variable dont les valeurs possibles sont explicites. Prenons l'exemple d'un signal dont les valeurs sont significatives des instructions lues dans une ROM programme. Pour clarifier la description, il est possible de définir un type (voir paragraphe suivant concernant la définition d'un type) de signal dont les valeurs possibles portent les noms des instructions. TYPE Signal_instruction IS (MOVE, ADD, JNE,..., BRS, RTS) ; SIGNAL Instruction : Signal_instruction ; Dans cet exemple, la première ligne correspond à la définition d'un type de nom Signal_instruction et la deuxième à la création d'un signal nommé Instruction et de type Signal_instruction. Type tableau Le langage VHDL autorise la définition de tableau de valeurs de type quelconque. L'instruction suivante correspond à la définition d'un type nommé Tableau_d'entiers : TYPE Tableau_d'entiers IS ARRAY (7 downto 0) OF integer ; L'instruction suivante va créer un signal de nom Tableau et de type Tableau_d'entiers : SIGNAL Tableau : Tableau_d'entiers ; Le signal Tableau comportera donc 8 éléments de type entier que l'on pourra manipuler individuellement ou tous en même temps (voir chapitre III, paragraphe B.3). Pour créer un tableau à plusieurs lignes, la syntaxe suivante est possible : TYPE Tableau_8xbit IS ARRAY (7 downto 0) OF bit ; TYPE Tableau_4x8xbit IS ARRAY (3 downto 0) OF Tableau_8xbit ; ou encore : TYPE Tableau_4x8xbit IS ARRAY (3 downto 0, 7 downto 0) OF bit ; Type enregistrement Il est possible, en VHDL comme dans la plupart des langages évolués, de créer un type constitué de plusieurs éléments différents. Les éléments ainsi juxtaposés pourront, par la suite, être accessibles grâce à l'utilisation du "." comme pour les adresses électroniques. TYPE Bus_micro IS RECORD Nbr_bit_adresse : integer ; Nbr_bit_donnee : integer ; Vitesse : time ; END RECORD ; Bus_micro.Nbr_bit_adresse <= 24 ; Bus_micro.Nbr_bit_donnee <= 16 ; Bus_micro.vitesse <= 10us ; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 25
28 B. Définition de types et surcharge des opérateurs Les types prédéfinis proposés par le langage VHDL initial sont vite devenus insuffisants dans la plupart des cas. Il suffit, pour s'en convaincre, d'essayer de décrire à l'aide de signaux de type bit la porte trois états ci-dessous : A S SEL Avec un signal S de type bit pouvant prendre deux valeurs '0' et '1', la description de cette structure est impossible. Il faut utiliser un type qui permette au signal S de prendre la valeur 'Z' haute impédance. En fait, on pourrait citer des exemples plus complexes et montrer qu'il est nécessaire de créer des types qui puissent proposer un grand nombre de valeurs. L'objectif final étant de pouvoir décrire avec le plus de vraisemblance toutes les structures logiques possibles. C'est dans cette optique que les types std_logic et std_ulogic conformes au standard IEEE 1164 ont été créés. Ces types proposent les valeurs suivantes : 'U' = Non initialisé, X ' = inconnu forçage fort, 0 = forçage fort, 1 = forçage fort, Z ' = haute impédance, W = inconnu forçage faible, L = forçage faible, H = forçage faible, et - = quelconque. La notion de forçage correspondant à la prise en compte d'éléments de rappel à la masse ou à l'alimentation (résistance de pull-up ou pull-down par exemple). Ainsi, on va désormais pouvoir déclarer des signaux en spécifiant type = std_logic ou std_ulogic, on obtiendra par exemple : E1 : std_logic; ou E2 : std_ulogic; Mais on peut alors se poser la question suivante : que va-t-il se passer si l'on écrit "E1 and E2"? L'opérateur prédéfini and que l'on utilisait dans les exemples précédents avec des signaux de type bit est-il capable de résoudre l'opération E1 and E2? La réponse est non, il va falloir créer de nouveaux opérateurs and, or, xor, etc. adaptés aux types std_logic et std_ulogic. Mais ces nouveaux opérateurs porteront les mêmes noms que les T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 26
29 opérateurs prédéfinis du langage VHDL initial. Heureusement, le langage VHDL prévoit ce cas de figure et se comporte de la façon suivante : L'analyseur (ou le compilateur) VHDL va utiliser l'opérateur qui supporte les types utilisés dans l'expression. Par exemple, devant l expression "E1 or E2" avec E1 et E2 de type bit l analyseur VHDL va utiliser l'opérateur prédéfini or alors que devant l'expression "E1 or E2" avec E1 et E2 de type std_logic l'analyseur VHDL va utiliser l'opérateur or prévu pour le type std_logic. Tout ceci sous-entend qu'il est possible de créer des types et des opérateurs associés à ces types. Voici l'exemple d'une création de type et d'opérateur associés : package pack_test is type my_logic is ('X', 'Z', '0', '1'); function "AND" (v1, v2: my_logic) return my_logic; end pack_test; package body pack_test is type my_table is array (my_logic'left to my_logic'right, my_logic'left to my_logic'right) of my_logic; function "AND" (v1, v2: my_logic) return my_logic is constant and_t: my_table := -- 'X' 'Z' '0' '1' (('X','X','0','X'), -- 'X' ('X','X','0','X'), -- 'Z' ('0','0','0','0'), -- '0' ('X','X','0','1'));-- '1' return and_t (v1, v2); end; end pack_test; library user; use user.pack_test.all; entity test_my_logic is port (A, B : in my_logic; S : out my_logic); end test_my_logic; architecture arch_test of test_my_logic is S <= A AND B; end arch_test; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 27
30 L instruction "TYPE nom IS (valeurs possibles)" permet de définir un type. On constate donc, dans cet exemple, qu'un type nommé my_logic a été créé. Ce type propose quatre valeurs possibles : "X, Z, 0 et 1". Notons que la déclaration de ce type a été faite au sein d'un package pour pouvoir la rendre accessible par plusieurs entités. En effet, il suffit de rajouter en amont de l'entité les lignes "library user;" et "use user.pack_test.all;" pour que l'analyseur comprenne que vous souhaitez utiliser des éléments compris dans le package spécifié. L'instruction "fonction "AND" (v1, v2: my_logic) return my_logic;" permet de créer un nouvel opérateur and que l'analyseur utilisera lorsqu'il rencontrera une instruction "E1 and E2" avec E1 et E2 du type my_logic. Dans un tel cas de figure, on parle de surcharge d'opérateur. Dans cet exemple, l'opérateur and est surchargé. Le nom de la fonction est compris entre guillemets lorsqu'il s'agit d'une surcharge. C. Fonction de résolution d'un type Dans l'exemple ci-dessous, on constate que le signal S possède plusieurs sources. La description VHDL d'une telle structure ne pose pas de difficultés particulières. A 1 S B 1 Or, pour qu'une telle description puisse être simulée il faut que le simulateur sache résoudre les différents cas possibles d'état du signal S. On peut par exemple se demander quelle est la valeur de S si la sortie de l'une des portes logiques est à '0' alors que l'autre est à '1'. Pour permettre au simulateur de résoudre une affectation multiple d'un signal, le langage VHDL permet à un type d'être résolu, c'est-à-dire d'énumérer au sein de la description tous les cas possibles d'associations et les résultats qui en découlent. En reprenant l'exemple du paragraphe précédent on obtient : package pack_test is type my_logic is ('X', 'Z', '0', '1'); type my_logic_vector is array (integer range<>) of my_logic; function res (inputs: my_logic_vector) return my_logic; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 28
31 subtype my_rlogic is res my_logic; function "and" (v1, v2: my_logic) return my_logic; end pack_test; package body pack_test is type my_table is array (my_logic left to my_logic right, my_logic left to my_logic right) of my_logic; function res (inputs: my_logic_vector) return my_logic is constant merge: my_table := -- X Z 0 1 (( X, X, X, X ), -- X ( X, Z, 0, 1 ), -- Z ( X, 0, 0, X ), -- 0 ( X, 1, X, 1 ));-- 1 variable result : my_logic := Z ; for i in inputs range loop result := merge (result, inputs (i)); end loop; return result; end; function "and" (v1, v2: my_logic) return my_logic is constant and_t: my_table := -- X Z 0 1 (( X, X, 0, X ), -- X ( X, X, 0, X ), -- Z ( 0, 0, 0, 0 ), -- 0 ( X, X, 0, 1 ));-- 1 return and_t (v1, v2); end; end pack_test; Dans cet exemple, la fonction "res" permet de donner au simulateur le résultat d'une multiaffectation d'un signal. Concrètement, dans l'exemple de la structure ci-dessous, la fonction "res" va utiliser le tableau "merge" à deux reprises pour déterminer la valeur du signal S. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 29
32 library user; use user.pack_test.all; entity test_my_logic is port (A, B : in my_rlogic; S : out my_rlogic); end test_my_logic; architecture arch_test of test_my_logic is S <= A OR B; S <= B; end arch_test; result = Z result = X Variable "result" de la fonction res initialisée à "Z". Cette variable représente le résultat de la fonction. X Z X X 0 A = 'X' B = '0' result devient result = X result devient result = X 1 1 'X' '0' S =? Utilisation du tableau merge X Z 0 1 (( X, X, X, X ), --X ( X, Z, 0, 1 ), --Z ( X, 0, 0, X ), --0 ( X, 1, X, 1 )); --1 Utilisation du tableau merge X Z 0 1 (( X, X, X, X ), --X ( X, Z, 0, 1 ), --Z ( X, 0, 0, X ), --0 ( X, 1, X, 1 )); --1 result = X S <= X T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 30
33 Tout se passe comme si l'affectation multiple du signal S était décomposée en deux affectations. La première de ces décompositions n'ayant pour but que de prévoir le cas d'une affectation unique. En effet, dans le cas d'une affectation unique, on obtient la situation suivante : Architecture Arch of Ent is S <= A and B; end Arch; A = 'X', 'Z', '0' ou '1' B = 'X', 'Z', '0' ou '1' & S = 'X', 'Z', '0' ou '1' Result = 'Z' S = 'X', 'Z', '0' ou '1' Utilisation du tableau merge X Z 0 1 (('X','X','X','X'), --X ('X','Z','0','1'), --Z ('X','0','0','X'), --0 ('X','1','X','1')); --1 Valeurs possibles du signal S. S <= result T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 31
34 D. Le package "IEEE standard logic 1164" Lors de l'évolution du langage VHDL vers le standard IEEE 1164, un package a été ajouté au langage VHDL initial. Ce package est constitué d'un ensemble de fonctions et de déclarations de types que l'on peut utiliser et appeler au sein de descriptions. Il propose, entre autres, des fonctions de conversion de types, des fonctions de surcharge d'opérateurs, la fonction de résolution du type std_logic, etc. Les types std_logic, std_ulogic, std_logic_vector et std_ulogic_vector utilisés à ce jour par les concepteurs sont créés dans ce package standard IEEE nommé "std_logic_1164". Pour utiliser ces types, il faut donc déclarer la librairie "library IEEE;" et le package "use IEEE.std_logic_1164.all;" en amont de l'entité de la description VHDL. En étudiant ce package IEEE et son package body, on constate que la lettre "u", qui différencie les noms de types std_logic et std_logic_vector des noms de types std_ulogic et std_ulogic_vector, signifie "unresolved" pour rappeler que ces types ne sont pas résolus. Il est donc impossible d'avoir, par exemple, un signal de type std_ulogic avec une affectation multiple (plusieurs sources). En fait, le type std_logic est un sous-type résolu du type std_ulogic comme le type my_rlogic est un sous-type résolu du type my_logic dans l'exemple du paragraphe précédent. En ce qui concerne les fonctions proposées au sein du package IEEE standard logic 1164, on retrouve, comme cela a été mentionné ci-dessus : toutes les fonctions de surchages and, nand, or, nor, xor, et not adaptées au types std_logic, std_ulogic, std_logic_vector et std_ulogic_vector, un ensemble de fonctions de conversion de types : bit ou bit_vector std_logic, std_ulogic, std_logic_vector et std_ulogic_vecto, std_logic, std_ulogic, std_logic_vector et std_ulogic_vecto logique 3 états X, 0 et 1, logique 3 états X, 0 et 1 std_logic, std_ulogic, std_logic_vector et std_ulogic_vecto, std_logic, std_ulogic, std_logic_vector et std_ulogic_vecto logique 4 états X, 0, 1 et Z, logique 4 états X, 0, 1 et Z std_logic, std_ulogic, std_logic_vector et std_ulogic_vecto, std_logic, std_ulogic, std_logic_vector et std_ulogic_vecto logique 4 états U, X, 0 et 1, logique 4 états U, X, 0 et 1 std_logic, std_ulogic, std_logic_vector et std_ulogic_vecto, détection de fronts montants sur un signal ou un vecteur de type std_logic ou std_ulogic, En réalité, la plupart des outils de synthèses logiques ou de simulations logiques proposent des packages d'aide à la conception dans lesquels se trouvent des fonctions de conversion ou tout simplement des fonctions ou procédures du type utilitaire (additionneur, soustracteur, incrémenteur...). T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 32
35 VI. Les attributs A. Présentation des attributs, leurs rôles Le langage VHDL propose un outil appelé attribut que l'on peut, en quelque sorte, assimiler à des fonctions. Placé auprès d'un signal, l'attribut " 'event " va, par exemple, retourner une information vraie ou fausse (donc de type booléen) sur le fait que le signal en question ait subi ou non un événement (un changement de valeur). Le fonctionnement de cet attribut ressemble au comportement d'une fonction dont le paramètre de retour serait de type booléen, à ceci près que l'attribut 'event en question possède une notion de mémoire. En effet il détecte un changement d'état qui nécessite d'avoir au préalable mémorisé l'état précédent. Il existe en réalité deux sortes d'attributs. Les attributs destinés à retourner des informations concernant le comportement d'un signal (événements, dernière valeur...). Les attributs destinés à retourner des informations concernant les caractéristiques d'un vecteur (longueur, dimension...). Pour ces deux sortes d'attributs, on parle d'attributs prédéfinis, au même titre que l'on parle de types prédéfinis (bit, boolean, etc.). Voici une liste non exhaustive des différents attributs prédéfinis proposés par le langage VHDL. Attributs Définitions - informations de retour 'high Placé près d'un nom de tableau, il retourne la valeur du rang le plus haut (la valeur de retour est de type entier). 'low Placé près d'un nom de tableau, il retourne la valeur du rang le plus bas (la valeur de retour est de type entier). 'left Placé près d'un nom de vecteur ou tableau, il retourne la valeur du rang le plus à gauche (la valeur de retour est de type entier). 'right Placé près d'un nom de vecteur ou tableau, il retourne la valeur du rang le plus à droite (la valeur de retour est de type entier). 'range Placé près d'un signal, il retourne la valeur de l'intervalle spécifié par l'instruction range lors de la déclaration du signal ou du type utilisé. 'reverse_range Placé près d'un signal, il retourne la valeur de l'intervalle inverse spécifié par l'instruction range lors de la déclaration du signal ou du type utilisé. 'length Retourne X'high - X'low + 1 (sous la forme d'un entier). 'event Vrai ou faux si le signal auquel il est associé vient de subir un changement de valeur. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 33
36 Attributs 'active 'last_value 'last_event ou 'last-active 'stable(t) 'quiet 'transaction Définitions - informations de retour Vrai ou faux si le signal auquel il est associé vient d'être affecté. Retourne la valeur précédente du signal auquel il est associé. Retournent des informations de temps concernant la date d'affectation ou de transition des signaux auxquels ils sont affectés Vrai ou faux si le signal auquel il est associé n'est pas modifié pendant la durée T. Vrai ou faux si le signal auquel il est associé n'est pas affecté pendant la durée T. Retourne une information de type bit qui change d'état lorsque le signal auquel il est associé est affecté. Parmi tous ces attributs prédéfinis, les plus couramment utilisés sont certainement les attributs relatifs aux caractéristiques d'un vecteur. Prenons l'exemple d'une fonction nommée FONC que l'on souhaite pouvoir appeler à partir de plusieurs instructions d'une même architecture et qui possède un paramètre de type std_logic_vecteur, la dimension est variable suivant l'instruction appelant. Pour que la dimension du paramètre vecteur s'adapte à l'appel, il faut utiliser les attributs 'left et 'right. library ieee; use ieee.std_logic_1164.all; entity ex_attrib is port (vecteur1 : in std_logic_vector(0 to 7); vecteur2 : in std_logic_vector(0 to 15); Svecteur1 : out std_logic_vector(0 to 7); Svecteur2 : out std_logic_vector(0 to 15)); end ex_attrib; Architecture ex_attrib of ex_attrib is function FONC (vect_a : std_logic_vector) return std_logic_vector is variable vect_result : std_logic_vector (vect_a'left to vect_a'right); for I in vect_a'left to vect_a'right loop if (vect_a(i) = '1') then vect_result(i) := '1'; else vect_result(i) := '0'; end if; end loop; return vect_result; end; Svecteur1 <= FONC (vecteur1); Svecteur2 <= FONC (vecteur2); end ex_attrib; Dans cet exemple, l'utilisation d'attributs lors de la déclaration de la variable vect_result permet d'adapter les dimensions de ce vecteur à 8 ou 16 bits suivant qu'il s'agit de vecteur1 ou de T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 34
37 vecteur2. Ainsi, la fonction s'adapte aux dimensions du vecteur paramètre. Cette méthode est très employée au sein des packages pour généraliser un paramètre vecteur de fonction en un vecteur de dimension quelconque. B. Définition des attributs Au même titre qu'il est possible de définir des types, il est également possible de définir des attributs. La différence réside dans le fait que le simulateur va ignorer ces nouveaux attributs et ne reconnaître que les attributs de type prédéfinis. La définition d'un nouvel attribut ne sert qu'à ajouter des informations à une description. Ces informations seront par la suite utilisées par d'autres outils. Les outils de synthèses logiques se servent souvent de cette procédure de passage d'informations et profitent de cette opportunité pour introduire des paramètres de synthèse et spécifier, entre autres, le type de boîtier ou le type de composant à utiliser pour la synthèse d'une description. Voici l'exemple d'une création d'attribut destiné à préciser le type de boîtier de deux composants. type IC_PACKAGE is (DIL, PLCC, PGA); attribute PTYPE : IC_PACKAGE; attribute PTYPE of U1 : component is PLCC; attribute PTYPE of U2 : component is DIL; Création d'un type nommé IC_PACKAGE pouvant prendre les valeurs DIL, PLCC et PGA. Création d'un attribut de type IC_PACKAGE. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 35
38 VII. Synthèse d'une description VHDL La synthèse d'une description VHDL représente une étape essentielle dans le processus de conception d'un composant programmable ou d'un ASIC. Le résultat de cette synthèse va déterminer l'ampleur ou, tout au moins, les caractéristiques du composant cible. Il est donc important et même crucial, dans la plupart des cas, de savoir orienter une synthèse de façon à en optimiser le résultat. Mais optimiser ne signifie pas forcement diminuer le nombre de portes logiques équivalentes. On peut, par exemple, choisir de diminuer au maximum le nombre de bascules D au détriment du nombre de portes logiques, ou encore privilégier certaines structures plutôt que d'autres, sachant que ces structures optimisent l'intégration dans le composant cible. Ceci étant, il est possible de créer deux descriptions équivalentes à la simulation dont la synthèse ne donnera pas le même résultat. Il y a donc tout un savoir-faire à acquérir pour rédiger une description VHDL de façon à orienter le résultat de la phase de synthèse. Dans les deux paragraphes qui suivent, vous trouverez quelques éléments de réflexion concernant la synthèse de fonctions simples. En appliquant ces notions à des descriptions plus complexes, vous parviendrez certainement à optimiser votre description suivant vos critères. A. Fonctions combinatoires Une fonction combinatoire est une structure pour laquelle chaque combinaison d'entrée fait correspondre en sortie une combinaison déterminée et indépendante des combinaisons d'entrées et de sorties précédentes. On peut donc décrire ces structures à l'aide d'équations booléennes qui seront toujours vérifiées comme le sont les instructions concurrentes. En effet, l'instruction "S <= A and B or C" est toujours vérifiée et correspond à l'équation booléenne S = A.B + C. Mais il est aussi possible de décrire une structure combinatoire en utilisant les instructions séquentielles d'un process. L'équation précédente peut, par exemple, s'écrire : process (A, B, C) if (C = '1') then S <= '1'; elsif (A = '1' and B = '1') then S <= '1'; else S <= '0'; end if; end process; S <= A and B or C L'issue de synthèse de ces deux types de description est identique, fort heureusement. Toutefois, on peut être amené à se poser la question de savoir quel type de description est à utiliser. En T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 36
39 réalité, même si le résultat de la synthèse est identique, il y a une différence fondamentale entre ces deux descriptions. L'une n'est que le reflet des équations logiques de la structure combinatoire à décrire, alors que l'autre se base sur l'expression de son comportement. Pour tenter de résumer les différences existant entre ces deux méthodes de description des fonctions combinatoires, on peut lister les avantages et les inconvénients de chacune d'elles. Description de fonctions combinatoires à l'aide d'instructions concurrentes : Avantages : la description obtenue est lisible et simple, la description obtenue reflète bien la réalité. Inconvénients : décrire une fonction combinatoire en utilisant des instructions concurrentes sous-entend que la taille de sa table de vérité le permet ou que les simplifications de cette dernière ont été faites. Description de fonctions combinatoires à l'aide de process : Avantages : pour des fonctions compliquées dans lesquelles les équations possèdent de nombreux termes, cette méthode est parfois plus simple. Lorsque la description comportementale est plus simple que la description algorithmique, cette méthode est avantageuse ; il n'est pas nécessaire de faire les simplifications de la table de vérité, elles sont faites automatiquement par le synthétiseur lors de la synthèse. Inconvénients : dans certains cas, cette écriture est peu lisible et par conséquent très difficilement modifiable par une personne extérieure. Il n'y a donc pas de règle générale mais plutôt la nécessité de procéder à une démarche logique d'observation avant la description pour choisir la méthode de description adéquate. B. Fonctions séquentielles La synthèse d'une fonction logique séquentielle est beaucoup plus complexe que celle d'une fonction combinatoire. Les possibilités de description offertes par le langage VHDL sont vastes et bien souvent irréalisables dans l'état actuel des technologies. Prenons l'exemple des attributs, ils sont puissants, efficaces, mais posent, pour certains, de gros problèmes aux outils de synthèse qui ne savent pas comment réaliser des structures capables de représenter le fonctionnement de ces attributs. L'attribut 'quiet(t), qui retourne une information de type booléen qui est vraie lorsque le signal auquel il est associé n'a pas été affecté depuis le temps T, ne T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 37
40 représente aucune structure électronique simple. Les synthétiseurs actuels refusent donc cet attribut faute de savoir quoi en faire. Par contre, il existe des attributs qui sont très utilisés et qui représentent même un véritable standard. La description d'un front est très simple à réaliser si l'on utilise l'attribut 'event associé à une condition de niveau pour la détection d'un front montant ou descendant. L'exemple ci-dessous qui correspond à la description d'une bascule D ne posera donc aucun problème de synthèse. Library ieee; use ieee.std_logic_1164.all; entity bascule_d is port (D, clk, clr : in std_logic; Q, Qb : out std_logic); end bascule_d; architecture bascule_d of bascule_d is BEGIN process (clk, clr) if (clr = '1') then Entrée CLR active à '1' Q <= '0'; Qb <= '1'; elsif (clk'event and clk = '1') then Q <= D; Qb <= D; Détection d'un front montant end if; end process; end bascule_d; Bascule_D D Q CLK Qb CLR Dans le process précédent, on aurait tout aussi bien pu utiliser l'instruction "wait" qui permet de figer l'exécution d'un process jusqu'à l'arrivée d'une condition ou d'un événement sur un signal, il aurait alors fallu écrire : process wait until CLK'event and CLK='1'; Q <= D; end process; Dans cette instruction, event est redondant avec l instruction wait, mais certains outils de synthèse impose cette syntaxe. Quoi qu'il en soit, cette instruction déclenche l'exécution du process à chaque front montant du signal clk. T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 38
41 Ainsi, il existe certaines descriptions typiques que le synthétiseur va reconnaître et traduire directement, comme l'attribut 'event de l'exemple précédent. Ceci étant, on peut se poser la question suivante : comment doit-on rédiger la description VHDL d'une fonction séquentielle pour que la synthèse soit optimale et utilise le moins de composants possible? Or, là aussi, il n'existe pas de règle de rédaction miracle qui permette de garantir une synthèse optimale. Toutefois, on sait que toute fonction logique séquentielle (synchrone) peut être réalisée grâce à une structure du type machines de MOORE ou de MEALY (appelées aussi séquenceur ou machine à états). La synthèse d'une description de fonctions logiques séquentielles donnera donc une de ces structures (ou une extension de ces structures). Systèmes séquentiels "MACHINE DE MOORE" ENTREES Ensemble combinatoire 1 Registre de séquencement Ensemble combinatoire 2 SORTIES CLK Systèmes séquentiels "MACHINE DE MEALY" ENTREES Ensemble combinatoire 1 Registre de séquencement Ensemble combinatoire 2 SORTIES CLK On peut choisir deux types de description : comportementale, se limitant à décrire le comportement de la structure à l'aide d'instructions IF, THEN, ELSE, CASE, WHEN..., structurelle ou semi-structurelle, décrivant chacune des parties constituant les machines de MOORE ou de MEALY. Dans le premier cas, la description est indépendante du choix de la structure finale. En d'autres termes, la description n'impose pas une structure cible, le synthétiseur est donc libre de la choisir T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 39
42 avec ses propres critères. Mais le résultat de ce choix ne correspond pas forcément à une synthèse optimale de la description. Pour des cas simples, ce type de description est souvent suffisant. Dans le deuxième cas, le choix de la structure cible est implicite ou partiel. Tout ce passe comme si on imposait une structure cible au synthétiseur. Dans ces conditions, le résultat de la synthèse est conforme à la description, et de ce fait optimal si le choix de la structure cible l'est. Notons qu'il est souvent intéressant d'utiliser ce genre de description lorsque l'on souhaite imposer des critères de synthèse du type : utiliser un minimum de bascules, privilégier la rapidité du montage, garantir certaines contraintes de temps, etc. C. Synthèse d'un diagramme d'état Il existe plusieurs formalismes capables de décrire l'évolution et le comportement d'un système séquentiel. Parmi eux se trouve le diagramme d'états, qui présente l'avantage d'être directement traduisible en langage VHDL. Citons l'exemple de la structure ci-dessous dont le rôle est de transformer deux signaux issus d'un capteur incrémental reliés à un moteur, en deux nouveaux signaux INC et H permettant le comptage et la détection de sens du moteur. Axe de rotation du moteur Capteur incrémental V1 V2 DISCRIMINATEUR INC H CLR CLK T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 40
43 Les chronogrammes correspondant à cette structure sont les suivants : Sens de rotation horaire Sens de rotation anti-horaire RAZ CLK(t) V1(t) t V2(t) t H(t) t INC(t) t CLR(t) t ETATS t t INCR DECR T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 41
44 Le diagramme d'état correspondant à ce système possède donc huit états nommés sur le chronogramme,,,, INCR et DECR et se représente ainsi : INCR DECR La description correspondant à ce diagramme d'états est la suivante : library ieee; use ieee.std_logic_1164.all; ENTITY fs31_comp IS PORT (V1, V2, clk, clr : in std_logic; INC, H : OUT std_logic); END fs31_comp; ARCHITECTURE fs31_comp OF fs31_comp IS type etats is (etat1, etat2, etat3, etat4, incr, decr); signal etat : etats; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 42
45 BEGIN process (clk) if (clr= 1 ) then etat <= etat1; elsif (clk event and clk= 1 ) then case etat is when etat1 => if (V1= 1 and V2= 0 ) then etat <= incr; elsif (V1= 0 and V2= 1 ) then etat <= decr; else etat <= etat1; end if; when etat2 => if (V1= 1 and V2= 1 ) then etat <= incr; elsif (V1= 0 and V2= 0 ) then etat <= decr; else etat <= etat2; end if; when etat3 => if (V1= 0 and V2= 1 ) then etat <= incr; elsif (V1= 1 and V2= 0 ) then etat <= decr; else etat <= etat3; end if; when etat4 => if (V1= 0 and V2= 0 ) then etat <= incr; elsif (V1= 1 and V2= 1 ) then etat <= decr; else etat <= etat4; end if; when incr => if (V1= 0 and V2= 0 ) then etat <= etat1; elsif (V1= 1 and V2= 0 ) then etat <= etat2; elsif (V1= 1 and V2= 1 ) then etat <= etat3; else etat <= etat4; end if; when decr => if (V1= 0 and V2= 0 ) then etat <= etat1; elsif (V1= 1 and V2= 0 ) then etat <= etat2; elsif (V1= 1 and V2= 1 ) then etat <= etat3; else etat <= etat4; end if; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 43
46 end case; end if; end process; H <= 0 WHEN ((ETAT = ETAT1) or (ETAT = ETAT2) or (ETAT = ETAT3) or (ETAT = ETAT4)) ELSE 1 ; INC <= 1 WHEN ((ETAT = ETAT1) or (ETAT = ETAT2) or (ETAT = ETAT3) or (ETAT = ETAT4)) ELSE 0 WHEN (ETAT = DECR) ELSE 1 ; END fs31_comp; T. BLOTIN LYCEE PAUL ELUARD SAINT-DENIS 44
Le langage VHDL. Eduardo Sanchez EPFL
Le langage VHDL Eduardo Sanchez EPFL Livres conseillés: John F. Wakerly Digital design (4th edition) Prentice Hall, 2005 Peter J. Ashenden The designer's guide to VHDL (3rd edition) Morgan Kaufmann, 2008
QUESTION 1 {2 points}
ELE4301 Systèmes logiques II Page 1 de 8 QUESTION 1 {2 points} En se servant de paramètres électriques donnés dans le Tableau 1 ci-dessous, on désire déterminer la fréquence d opération du compteur présenté
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface
Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml
OCL Object Constraint Language Le langage de contraintes d'uml Plan 1. Introduction 2. Les principaux concepts d'ocl Object Constraint Language 1 Object Constraint Language 2 Exemple: une application bancaire
Manipulations du laboratoire
Manipulations du laboratoire 1 Matériel Les manipulations de ce laboratoire sont réalisées sur une carte électronique comprenant un compteur 4-bit asynchrone (74LS93) avec possibilité de déclenchement
Architecture des ordinateurs TD1 - Portes logiques et premiers circuits
Architecture des ordinateurs TD1 - Portes logiques et premiers circuits 1 Rappel : un peu de logique Exercice 1.1 Remplir la table de vérité suivante : a b a + b ab a + b ab a b 0 0 0 1 1 0 1 1 Exercice
Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère
L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la
LES TYPES DE DONNÉES DU LANGAGE PASCAL
LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.
Cours Informatique Master STEP
Cours Informatique Master STEP Bases de la programmation: Compilateurs/logiciels Algorithmique et structure d'un programme Programmation en langage structuré (Fortran 90) Variables, expressions, instructions
IFT1215 Introduction aux systèmes informatiques
Introduction aux circuits logiques de base IFT25 Architecture en couches Niveau 5 Niveau 4 Niveau 3 Niveau 2 Niveau Niveau Couche des langages d application Traduction (compilateur) Couche du langage d
Génie Logiciel avec Ada. 4 février 2013
Génie Logiciel 4 février 2013 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires I. Principes II. Notions propres à la POO I. Principes Chapitre
UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.
UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases
Diagramme de classes
Diagramme de classes Un diagramme de classes décrit les classes et leurs relations (associations, généralisation/spécialisation, ). classe association méthodes attributs héritage Diagramme de classes :
Programmation Objet - Cours II
Programmation Objet - Cours II - Exercices - Page 1 Programmation Objet - Cours II Exercices Auteur : E.Thirion - Dernière mise à jour : 05/07/2015 Les exercices suivants sont en majorité des projets à
ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.
ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. Sciences et Technologies de l Industrie et du Développement Durable Formation des enseignants parcours : ET24 Modèle de
I. Introduction aux fonctions : les fonctions standards
Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons
Recherche dans un tableau
Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6
Conception de circuits numériques et architecture des ordinateurs
Conception de circuits numériques et architecture des ordinateurs Frédéric Pétrot Année universitaire 2014-2015 Structure du cours C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Codage des nombres en base 2, logique
Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot
Chapitre 5 Arithmétique binaire L es codes sont manipulés au quotidien sans qu on s en rende compte, et leur compréhension est quasi instinctive. Le seul fait de lire fait appel au codage alphabétique,
Chapitre 1 : Introduction aux bases de données
Chapitre 1 : Introduction aux bases de données Les Bases de Données occupent aujourd'hui une place de plus en plus importante dans les systèmes informatiques. Les Systèmes de Gestion de Bases de Données
L'instruction if permet d'exécuter des instructions différentes selon qu'une condition est vraie ou fausse. Sa forme de base est la suivante:
420-183 Programmation 1 8. Les structures conditionnelles Dans l'écriture de tout programme informatique, une des premières nécessités que nous rencontrons est de pouvoir faire des choix. Dans une application
RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/2011. 1.1 Présentation. 1.2 Ressources
Master Maths Finances 2010/2011 Data Mining janvier 2011 RapidMiner 1 Introduction 1.1 Présentation RapidMiner est un logiciel open source et gratuit dédié au data mining. Il contient de nombreux outils
Initiation à la programmation en Python
I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de
Procédures Stockées WAVESOFT... 12 ws_sp_getidtable... 12. Exemple :... 12. ws_sp_getnextsouche... 12. Exemple :... 12
Table des matières Les Triggers... 2 Syntaxe... 2 Explications... 2 Les évènements déclencheurs des triggers... 3 Les modes de comportements des triggers... 4 Les pseudo tables... 5 Exemple... 6 Les procédures
Système binaire. Algèbre booléenne
Algèbre booléenne Système binaire Système digital qui emploie des signaux à deux valeurs uniques En général, les digits employés sont 0 et 1, qu'on appelle bits (binary digits) Avantages: on peut utiliser
Chapitre 2 Devine mon nombre!
Python 3 : objectif jeux Chapitre 2 Chapitre 2 Devine mon nombre! 2.1. Thèmes abordés dans ce chapitre commentaires modules externes, import variables boucle while condition : if... elif... else la fonction
V- Manipulations de nombres en binaire
1 V- Manipulations de nombres en binaire L ordinateur est constitué de milliards de transistors qui travaillent comme des interrupteurs électriques, soit ouverts soit fermés. Soit la ligne est activée,
SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5
SHERLOCK 7 Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 Cette note montre comment intégrer un script Java dans une investigation Sherlock et les différents aspects de Java script. S T E M M E R I M A G I N
3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes
PLAN CYCLE DE VIE D'UN LOGICIEL EXPRESSION DES BESOINS SPÉCIFICATIONS DU LOGICIEL CONCEPTION DU LOGICIEL LA PROGRAMMATION TESTS ET MISE AU POINT DOCUMENTATION CONCLUSION C.Crochepeyre Génie Logiciel Diapason
Algorithmique & programmation
Algorithmique & programmation Type structuré Article, Enregistrement, Structure Définition de nouveaux types!! On a vu les types simples "! entier, booléen, caractère, chaîne de caractères!! Comment gérer
Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme
Rappel Ralf Treinen Université Paris Diderot UFR Informatique Laboratoire Preuves, Programmes et Systèmes [email protected] 6 mai 2015 Jusqu'à maintenant : un petit langage de programmation
ARDUINO DOSSIER RESSOURCE POUR LA CLASSE
ARDUINO DOSSIER RESSOURCE POUR LA CLASSE Sommaire 1. Présentation 2. Exemple d apprentissage 3. Lexique de termes anglais 4. Reconnaître les composants 5. Rendre Arduino autonome 6. Les signaux d entrée
Algorithmique et programmation : les bases (VBA) Corrigé
PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours VBA, Semaine 1 mai juin 2006 Corrigé Résumé Ce document décrit l écriture dans le langage VBA des éléments vus en algorithmique. Table des matières 1 Pourquoi
basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB www.enseirb.fr/~legal Olivier Augereau Formation UML
basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB www.enseirb.fr/~legal Olivier Augereau Formation UML http://olivier-augereau.com Sommaire Introduction I) Les bases II) Les diagrammes
Algorithme. Table des matières
1 Algorithme Table des matières 1 Codage 2 1.1 Système binaire.............................. 2 1.2 La numérotation de position en base décimale............ 2 1.3 La numérotation de position en base binaire..............
STAGE IREM 0- Premiers pas en Python
Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer
CHAPITRE VI ALEAS. 6.1.Généralités.
CHAPITRE VI ALEAS 6.1.Généralités. Lors de la synthèse des systèmes logique (combinatoires ou séquentiels), nous avons supposé, implicitement, qu une même variable secondaire avait toujours la même valeur
CHAPITRE VIII : Les circuits avec résistances ohmiques
CHAPITRE VIII : Les circuits avec résistances ohmiques VIII. 1 Ce chapitre porte sur les courants et les différences de potentiel dans les circuits. VIII.1 : Les résistances en série et en parallèle On
Travaux pratiques avec RapidMiner
Travaux pratiques avec RapidMiner Master Informatique de Paris 6 Spécialité IAD Parcours EDOW Module Algorithmes pour la Fouille de Données Janvier 2012 Prise en main Généralités RapidMiner est un logiciel
Licence Sciences et Technologies Examen janvier 2010
Université de Provence Introduction à l Informatique Licence Sciences et Technologies Examen janvier 2010 Année 2009-10 Aucun document n est autorisé Les exercices peuvent être traités dans le désordre.
La conversion de données : Convertisseur Analogique Numérique (CAN) Convertisseur Numérique Analogique (CNA)
La conversion de données : Convertisseur Analogique Numérique (CAN) Convertisseur Numérique Analogique (CNA) I. L'intérêt de la conversion de données, problèmes et définitions associés. I.1. Définitions:
Utilisation d objets : String et ArrayList
Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons
Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2
éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........
OCL - Object Constraint Language
OCL - Object Constraint Language Laëtitia Matignon [email protected] Département Informatique - Polytech Lyon Université Claude Bernard Lyon 1 2012-2013 Laëtitia Matignon SIMA - OCL - Object
ITIL V2. La gestion des incidents
ITIL V2 La gestion des incidents Création : novembre 2004 Mise à jour : août 2009 A propos A propos du document Ce document de référence sur le référentiel ITIL a été réalisé en 2004 et la traduction des
Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions
Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental
Université de Bangui. Modélisons en UML
Université de Bangui CRM Modélisons en UML Ce cours a été possible grâce à l initiative d Apollinaire MOLAYE qui m a contacté pour vous faire bénéficier de mes connaissances en nouvelles technologies et
Les portes logiques. Voici les symboles des trois fonctions de base. Portes AND. Portes OR. Porte NOT
Les portes logiques Nous avons jusqu ici utilisé des boutons poussoirs et une lampe pour illustrer le fonctionnement des opérateurs logiques. En électronique digitale, les opérations logiques sont effectuées
INTRODUCTION A JAVA. Fichier en langage machine Exécutable
INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du
MPI Activité.10 : Logique binaire Portes logiques
MPI Activité.10 : Logique binaire Portes logiques I. Introduction De nombreux domaines font appel aux circuits logiques de commutation : non seulement l'informatique, mais aussi les technologies de l'asservissement
Généralités sur le Langage Java et éléments syntaxiques.
Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...
NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE
NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE Une application se construit par étapes 1) CAHIER DES CHARGES + ANALYSE FONCTIONNELLE = organisation fonctionnelle (QUE FAIRE) 2) ANALYSE OPERATIONNELLE
Projet de Veille Technologique
Projet de Veille Technologique Programmation carte à puce - JavaCard Ing. MZOUGHI Ines ([email protected]) Dr. MAHMOUDI Ramzi ([email protected]) TEST Sommaire Programmation JavaCard Les prérequis...
AGRÉGATION «ÉCONOMIE ET GESTION»
AGRÉGATION «ÉCONOMIE ET GESTION» CONCOURS INTERNE SESSION 2002 ÉPREUVE SUR LES TECHNIQUES DE GESTION ET COMPORTANT DES ASPECTS PÉDAGOGIQUES DOMAINE : économie et gestion informatique Durée de préparation
VIII- Circuits séquentiels. Mémoires
1 VIII- Circuits séquentiels. Mémoires Maintenant le temps va intervenir. Nous avions déjà indiqué que la traversée d une porte ne se faisait pas instantanément et qu il fallait en tenir compte, notamment
Premiers Pas en Programmation Objet : les Classes et les Objets
Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.
Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"
TD1 : traduction en Visual BASIC des exemples du cours sur les structures de contrôle de l'exécution page 1 'TRADUCTION EN VBA DES EXEMPLES ALGORITHMIQUES SUR LES STRUCTURES 'DE CONTROLE DE L'EXECUTION
ACTIVITÉ DE PROGRAMMATION
ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,
modélisation solide et dessin technique
CHAPITRE 1 modélisation solide et dessin technique Les sciences graphiques regroupent un ensemble de techniques graphiques utilisées quotidiennement par les ingénieurs pour exprimer des idées, concevoir
Java 7 Les fondamentaux du langage Java
184 Java 7 Les fondamentaux du langage Java 1.1 Les bibliothèques graphiques Le langage Java propose deux bibliothèques dédiées à la conception d'interfaces graphiques. La bibliothèque AWT et la bibliothèque
Le stockage local de données en HTML5
Le stockage local HTML5, pourquoi faire? Dans une optique de réduction des couts de maintenance, de déploiement, beaucoup d'entreprises ont fait le choix de migrer leurs applicatifs (comptables, commerciales,
RÉSOLUTION DE SYSTÈMES À DEUX INCONNUES
RÉSOLUTION DE SYSTÈMES À DEUX INCONNUES Sommaire 1 Méthodes de résolution... 3 1.1. Méthode de Substitution... 3 1.2. Méthode des combinaisons linéaires... 6 La rubrique d'aide qui suit s'attardera aux
DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION
145 NOTION DE PROGRAMMATION 1/ Complétons notre microprocesseur Nous avons, dans les leçons précédentes décrit un microprocesseur théorique, cependant il s inspire du 6800, premier microprocesseur conçu
as Architecture des Systèmes d Information
Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes
Chapitre 1 I:\ Soyez courageux!
Chapitre 1 I:\ Soyez courageux! Pour ne rien vous cacher, le langage d'assembleur (souvent désigné sous le terme "Assembleur", bien que ce soit un abus de langage, puisque "Assembleur" désigne le logiciel
Pourquoi l apprentissage?
Pourquoi l apprentissage? Les SE sont basés sur la possibilité d extraire la connaissance d un expert sous forme de règles. Dépend fortement de la capacité à extraire et formaliser ces connaissances. Apprentissage
SIN-FPGA DESCRIPTION PAR SCHEMA
SIN-FPGA DESCRIPTION PAR SCHEMA Documents ressources: http://www.altera.com/literature/lit-index.html Introduction to Quartus II : intro_to_quartus2.pdf Documentation QUARTUS II : quartusii_handbook.pdf
Date : 18.11.2013 Tangram en carré page
Date : 18.11.2013 Tangram en carré page Titre : Tangram en carré Numéro de la dernière page : 14 Degrés : 1 e 4 e du Collège Durée : 90 minutes Résumé : Le jeu de Tangram (appelé en chinois les sept planches
IV- Comment fonctionne un ordinateur?
1 IV- Comment fonctionne un ordinateur? L ordinateur est une alliance du hardware (le matériel) et du software (les logiciels). Jusqu à présent, nous avons surtout vu l aspect «matériel», avec les interactions
FONCTION COMPTAGE BINAIRE ET DIVISION DE FRÉQUENCE
I/ GÉNÉRALITÉS I.1/ Fonction Un compteur binaire est utilisé : -pour compter un certain nombre d'évènements binaires -pour diviser la fréquence d'un signal logique par 2 m Page 1 FONCTION COMPTAGE BINAIRE
Export vers le format WAV dans ArtemiS SUITE
9/14 dans ArtemiS SUITE Export vers WAV dans le Projet 2 Réglage 2 Type de données et résolution 4 Export des informations d'impulsions tachymétriques 4 Fondu 5 Fichier Résultat 6 Paramètres pour l'export
Contrôle interne et organisation comptable de l'entreprise
Source : "Comptable 2000 : Les textes de base du droit comptable", Les Éditions Raouf Yaïch. Contrôle interne et organisation comptable de l'entreprise Le nouveau système comptable consacre d'importants
1. Structure d'un programme FORTRAN 95
FORTRAN se caractérise par la nécessité de compiler les scripts, c'est à dire transformer du texte en binaire.(transforme un fichier de texte en.f95 en un executable (non lisible par un éditeur) en.exe.)
Algorithmique et Programmation, IMA
Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions
TD n o 8 - Domain Name System (DNS)
IUT Montpellier - Architecture (DU) V. Poupet TD n o 8 - Domain Name System (DNS) Dans ce TD nous allons nous intéresser au fonctionnement du Domain Name System (DNS), puis pour illustrer son fonctionnement,
Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e
P r o b l é m a t i q u e OCL : O b j e c t C o n s t r a i n t L a n g u a g e Le langage de contraintes d UML Les différents diagrammes d UML permettent d exprimer certaines contraintes graphiquement
CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE
CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE 2 ème partie : REQUÊTES Sommaire 1. Les REQUÊTES...2 1.1 Créer une requête simple...2 1.1.1 Requête de création de listage ouvrages...2 1.1.2 Procédure de
Compte-rendu de projet de Système de gestion de base de données
Compte-rendu de projet de Système de gestion de base de données Création et utilisation d'un index de jointure LAMBERT VELLER Sylvain M1 STIC Université de Bourgogne 2010-2011 Reponsable : Mr Thierry Grison
Vers l'ordinateur quantique
Cours A&G Vers l'ordinateur quantique Données innies On a vu dans les chapîtres précédents qu'un automate permet de représenter de manière nie (et même compacte) une innité de données. En eet, un automate
Exercices de dénombrement
Exercices de dénombrement Exercice En turbo Pascal, un entier relatif (type integer) est codé sur 6 bits. Cela signifie que l'on réserve 6 cases mémoires contenant des "0" ou des "" pour écrire un entier.
Éditions QAD On Demand est disponible en trois éditions standard : QAD On Demand is delivered in three standard editions:
QAD On Demand QAD On Demand est une option du déploiement de QAD Enterprise Applications. Grâce à elle, les utilisateurs tirent un profit maximum de QAD Enterprise Applications, partout dans le monde,
MODE D'EMPLOI DE LA CALCULATRICE POUR LES COURTS SÉJOURS DANS L'ESPACE SCHENGEN
MODE D'EMPLOI DE LA CALCULATRICE POUR LES COURTS SÉJOURS DANS L'ESPACE SCHENGEN 1. Introduction Le règlement (UE) n 610/2013 du 26 juin 2013 a modifié la convention d'application de l'accord de Schengen,
Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS
Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS 1. Introduction Nous allons aborder la notion de surcouche procédurale au sein des SGBDS relationnels tels que Oracle (PLSQL)
Annexe : La Programmation Informatique
GLOSSAIRE Table des matières La Programmation...2 Les langages de programmation...2 Java...2 La programmation orientée objet...2 Classe et Objet...3 API et Bibliothèque Logicielle...3 Environnement de
Logique binaire. Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la conception des circuits électroniques.
Logique binaire I. L'algèbre de Boole L'algèbre de Boole est la partie des mathématiques, de la logique et de l'électronique qui s'intéresse aux opérations et aux fonctions sur les variables logiques.
Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN
Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN Table des matières. Introduction....3 Mesures et incertitudes en sciences physiques
Débuter avec EXPRESS. Alain Plantec. 1 Schema 2
Débuter avec EXPRESS Alain Plantec Table des matières 1 Schema 2 2 Entité 2 2.1 Attributs simples................................................ 2 2.2 Attributs collection...............................................
Programmer en JAVA. par Tama ([email protected]( [email protected])
Programmer en JAVA par Tama ([email protected]( [email protected]) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes
TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts
E3FI ESIEE Paris Systèmes et scripts B. Perret TP : Shell Scripts 1 Remarque générale Lorsque vous cherchez des informations sur Internet, n'oubliez pas que langage de shell script que nous avons vu correspond
Chapitre 5 : Les procédures stockées PL/SQL
I. Introduction Une procédure ou une fonction stockée est un bloc PL/SQL nommé pouvant accepter des paramètres et être appelée. Généralement, on utilise une fonction pour calculer une valeur. Les procédures
Chapitre 10. Architectures des systèmes de gestion de bases de données
Chapitre 10 Architectures des systèmes de gestion de bases de données Introduction Les technologies des dernières années ont amené la notion d environnement distribué (dispersions des données). Pour reliér
I- Définitions des signaux.
101011011100 010110101010 101110101101 100101010101 Du compact-disc, au DVD, en passant par l appareil photo numérique, le scanner, et télévision numérique, le numérique a fait une entrée progressive mais
INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février 2014 17:30 à 20:30
Examen intra 20 février 2014 17:30 à 20:30 Nom, prénom : Code permanent : Répondez directement sur le questionnaire. Question #1 5% Quelle influence peut avoir le typage dynamique sur la maintenabilité
Présentation du PL/SQL
I Présentation du PL/ Copyright Oracle Corporation, 1998. All rights reserved. Objectifs du Cours A la fin de ce chapitre, vous saurez : Décrire l intéret du PL/ Décrire l utilisation du PL/ pour le développeur
Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA Pierre BONNET 21 La programmation VBA Historiquement, la programmation sous Excel avait comme fonction d'automatiser une succession d'actions faites dans la feuille à l'aide de la souris.
Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if
Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
Présentation du langage et premières fonctions
1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en
Une version javascript sera disponible directement dans le cours prochainement.
Author : Cédric Vanconingsloo Ce cours est principalement axé sur la compréhension du fonctionnement d'un ordinateur et l'étude du seul langage qu'il connaisse, le binaire. De ce fait, le cours est relativement
1. Introduction...2. 2. Création d'une requête...2
1. Introduction...2 2. Création d'une requête...2 3. Définition des critères de sélection...5 3.1 Opérateurs...5 3.2 Les Fonctions...6 3.3 Plusieurs critères portant sur des champs différents...7 3.4 Requête
