C est un moyen de transmettre une information à un bloc :

Documents pareils
Le langage VHDL. Eduardo Sanchez EPFL

T. BLOTIN Lycée Paul-Eluard SAINT-DENIS

Présentation du PL/SQL

Génie Logiciel avec Ada. 4 février 2013

Manipulations du laboratoire

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Arbres binaires de recherche

SIN-FPGA DESCRIPTION PAR SCHEMA

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Cours Informatique Master STEP

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

//////////////////////////////////////////////////////////////////// Administration bases de données

PROGRAMMATION EVENEMENTIELLE sur EXCEL

Préparer un état de l art

La plate-forme DIMA. Master 1 IMA COLI23 - Université de La Rochelle

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

ACTIVITÉ DE PROGRAMMATION

Projet Active Object

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Conception Systèmes numériques VHDL et synthèse automatique des circuits

La programmation des PIC en C. Les fonctions, les interruptions.

Compilation (INF 564)

Architecture des ordinateurs

Conception Systèmes numériques VHDL et synthèse automatique des circuits

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Algorithmique et programmation : les bases (VBA) Corrigé

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Programmer en JAVA. par Tama

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Cours Base de données relationnelles. M. Boughanem, IUP STRI

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Recherche dans un tableau

Les diagrammes de modélisation

Modèle conceptuel : diagramme entité-association

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

WINDOWS SHAREPOINT SERVICES 2007

Conception de circuits numériques et architecture des ordinateurs

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Programmation par composants (1/3) Programmation par composants (2/3)

EBS 204 E C B S. Publication : Novembre 96

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Chapitre VI- La validation de la composition.

Annexe : La Programmation Informatique

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

VIII- Circuits séquentiels. Mémoires

Diagramme de classes

Architecture Orientée Service, JSON et API REST

Plan de formation : Certification OCA Oracle 11g. Les administrateurs de base de données (DBA) Oracle gèrent les systèmes informatiques

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

KL5121. Pour activer des sorties en fonction de la position d'un codeur

Windows Front-End Installation Guide HOPEX V1R1 FR

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

1. Structure d'un programme FORTRAN 95

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

LE MODELE CONCEPTUEL DE DONNEES

SYSTÈME DE GESTION DE FICHIERS

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

La GEIDE. Dans une solution GEIDE, il est possible d'associer au sein même d'un dossier:

Organigramme / Algorigramme Dossier élève 1 SI

Plan du cours. Historique du langage Nouveautés de Java 7

Résolution de systèmes linéaires par des méthodes directes

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

LABO 5 ET 6 TRAITEMENT DE SIGNAL SOUS SIMULINK

Programmation d'agents intelligents Vers une refonte des fils de raisonnement. Stage de fin d'études Master IAD 2006

Business Intelligence avec SQL Server 2012

La réplication sous SQL Server 2005

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

DSL. Domain Specific Language. À l'aide des technologies Eclipse Modeling. Goulwen Le Fur Le 23 novembre 2012

Initiation à la Programmation en Logique avec SISCtus Prolog

Compte Rendu d intégration d application

Méthodes d évolution de modèle produit dans les systèmes du type PLM

Gestion mémoire et Représentation intermédiaire

4. Groupement d objets

COMMUNAUTE ECONOMIQUE ET MONETAIRE DE L AFRIQUE CENTRALE LA COMMISSION

Pourquoi l apprentissage?

COMMENT FAIRE? Comment bien se servir de WinHIIP? Expérimenter grâce aux guides imprimés!

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

IV- Comment fonctionne un ordinateur?

CORBA. (Common Request Broker Architecture)

Système binaire. Algèbre booléenne

Définitions. Numéro à préciser. (Durée : )

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Cours d algorithmique pour la classe de 2nde

Qualité du logiciel: Méthodes de test

Les BRMS Business Rules Management System. Groupe GENITECH

Application 1- VBA : Test de comportements d'investissements

Installation FollowMe Q server

La boucle for La boucle while L utilisation du if else. while (condition) { instruction(s) }

Transcription:

1

C est un moyen de transmettre une information à un bloc : Vu de l extérieur du bloc, la généricité == paramètre(s) Vu de l intérieur du bloc, paramètres == constantes 2 La généricité peut être vue comme un moyen d'extraire les invariants d'un composant. Tout ce qui peut être amené à évoluer doit être envisagé en tant que "paramètre". Les invariants d'un composant sont codés dans l'architecture. Exemple : pour un registre, les invariants sont - le chargement du registre lors du front montant de l'horloge - la mise en basse impédance lors de la mise à 1 de la sélection du composant Pour ce même registre, les paramètres sont : - la taille des données manipulées - le temps de chargement du registre - le temps de mise en basse impédance - etc

Intérêts de la généricité : description de composants généraux permettre la réutilisation des composants :? enrichissement progressif de la bibliothèque de travail? description de la bibliothèque par des modèles génériques assure une plus grande rapidité de développement Bibliothèque Bibliothèque Bibliothèque Bibliothèque Conception 1 Conception 2 Conception 3 Conception N 3 Il est important de bien comprendre que plus les composants que vous décrirez seront générique, plus vous serez capable de les réutiliser lors de prochaines conceptions. La description de composants génériques vous permet d'enrichir au fur et à mesure, votre bibliothèque de travail. Cet enrichissement progressif vous conduira finalement à disposer de plus en plus de briques de base qu'il vous suffira ensuite de "piocher" dans la bibliothèque pour concevoir vos prochains systèmes. Les premières conceptions vous demanderons du temps pour vous constituer une bibliothèque de travail, mais les conceptions suivantes seront d'autant plus rapide.

Généralement, c est l entité qui est générique : l utilisation de générique dans la spécification d'entité Mais l'architecture doit aussi être générique : l utilisation des attributs :? de tableaux? de types? de signaux entity. is generic ( ;. ;. ); port ( ; ;...); end.. ; others, range, left, event, etc, etc 4 Pour qu'un "composant" soit générique, il faut que sa spécification d'entité fasse apparaître une liste de "paramètres", mais il faut que l'architecture supporte cette généricité. La spécification d'entité doit être enrichie de generic. L'architecture s'appuie très souvent sur l'utilisation d'attributs pour rendre les descriptions correctes quelque soit les valeurs des paramètres generic.

Généricité des entités : un registre dont le nombre de bascules est générique D Load Enable 8, 16, 32??? Registre NbBits 8, 16, 32??? Q Clock 5 Dans de nombreux systèmes électroniques, on est amené à mettre en place des composants ayant les mêmes caractéristiques fonctionnelles, mais travaillant sur des données de tailles différentes. Ici nous nous intéressons au registre que nous souhaitons décrire une fois pour toute sans nous soucier de la taille des données (8, 16, 32, bits). Le premier travail consiste à faire la déclaration de l'entité...

Description de l'entité entity registre is generic (NbBits : INTEGER := 8); port (D : in std_logic_vector (NbBits-1 downto 0); Load : in std_logic ; Enable : in std_logic ; Clock : in std_logic ; Q : out std_logic_vector (NbBits-1 downto 0) ); end registre ; 6 Remarquons ici que le generic est spécifié avec une valeur par défaut. Cette indication permettra, dans le cas ou une instance de cette entité ne préciserait pas la valeur du generic, de s'assurer que l'instance soit créée. Remarquons de plus que le generic est ensuite utilisé comme un paramètre dans la déclaration des ports d'entrées sorties (à ce niveau le generic est vue comme une constante).

Utilisation d'une entité générique :? soit le système suivant : des registres sont connectés à des bus dont les tailles sont différentes Bus de données (16 bits) Reg i Bus d'adresse (32 bits) Reg j Système 7 L'instanciation d'entité generic doit spécifier les valeurs de chacun des "paramètres" generic. Imaginons que nous ayons à décrire une système à processeur dans lequel il existe deux bus : un premier pour transporter les adresses et une second pour transporter les données. Chacun de ces bus ayant des tailles différentes, il faut pouvoir disposer d'un mécanisme permettant d'instancier 2 entités avec des valeurs de paramètres différentes.

Description de l'architecture du système architecture structure of Systeme is -- declaration des composants -- declaration des signaux signal BusData : std_logic_vector(15 downto 0); signal BusAddress : std_logic_vector(31 downto 0); signal SLoadi, SLoadj, SClock, SEnablei, SEnablej : std_logic; begin Regi : Registre generic map (16) port map (BusData, SLoadi, SEnablei, SClock, BusData); Regj : Registre generic map (32) port map (BusAddress, SLoadj, SEnablej, SClock, BusAddress); end structure; 8 Remarquons dans ce listing les instances des 2 registres. Les paramètres generic sont spécifiés par un mapping. Le composant Regi est bien un composant ayant pour "modèle" l'entité Regitre et la taille des données manipulées est égale à 16 bits. Il faut évidemment s'assurer que les signaux connectés à ce composant ont des tailles cohérentes par rapport à la valeur du generic : BusData est bien un Std_Logic_Vector de taille 16. Le composant Regj est bien un composant ayant pour "modèle" l'entité Regitre et la taille des données manipulées est égale à 32 bits. Il faut évidemment s'assurer que les signaux connectés à ce composant ont des tailles cohérentes par rapport à la valeur du generic : BusAddress bien un Std_Logic_Vector de taille 32.

Autre exemple : un ET à N entrées Entrees { ET Sortie entity Et_N is generic ( N : Natural ) port ( Entrees : in std_logic_vector ( 1 to N ) ; sortie : out std_logic ); end Et_N ; architecture comportement of Et_N is begin process variable V : std_logic := 1 ; begin for i in 1 to N loop V := V and Entrees (i) ; end loop ; Sortie <= V after 10 ns ; end process ; end comportement; 9 Ici on s'intéresse à la spécification d'une entité ET logique ayant un nombre d'entrées variable. La difficulté réside dans le fait que, pour une spécification d'entité, il faut nommer explicitement tous les ports d'entrées sorties. Or dans ce cas il n'est pas possible de nommer tous ces ports puisque l'on en connaît pas le nombre (cela dépendra des instances). La solution pour décrire cette entité consiste alors à placer toutes les entrées de l'entité ET logique dans un tableau dont la taille est liée au generic. Notons que l'écriture de l'architecture s'appuie sur le generic N afin de s'adapter à chaque instance de l'entité. Ainsi, l' instance de l'entité ET dont la valeur du generic sera fixée à 3 verra son process effectuer 3 fois la boucle for.

Autre exemple : additionneur structurelle générique : x(0) y(0) x(1) y(1) x(n-1) y(n-1) Cin C(0) ADD ADD C(1) ADD C(2) C(N-1) ADD ADD ADD C(N) Cout s(0) s(1) s(n-1)? construit à partir d un additionneur 1 bits? assemblage des N additionneurs 1 bits afin de réaliser l additionneur complet? la valeur de N est inconnue avant l instanciation du composant 10 Lorsque l'on effectue la description d'une architecture d'une entité, on peut souhaiter réaliser cette description de façon structurelle, c'est à dire au travers d'un schéma. Si l'entité que l'on souhaite spécifier est generic, cela peut poser quelques difficultés. Prenons l'exemple d'un additionneur que l'on souhaite rendre generic par rapport à la taille des données manipulées et qui soit décrit à partir d'une schéma de full_adder. Dans ce cas, on est placé devant une difficulté qui est lié au fait que lors de l'écriture du code de l'entité, on ne connaît pas le nombre de full_adder à mettre en place (ce nombre dépend des instances, mais pas de l'entité elle même).

On dispose de l entité Add : entity Add is port ( A, B, Cin : in std_logic; S, Cout : out std_logic); end Add ; L entité Additionneur générique s écrit : entity AdditionneurN is generic (N : Natural); port ( X, Y : in std_logic_vector ( N-1 downto 0) ; Cin : in std_logic; S : out std_logic_vector (N-1 downto 0); Cout : out std_logic); end AdditionneurN ; architecture structurelle of AdditionneurN is component Add port ( A, B, Cin : in std_logic; S, Cout : out std_logic); end component; signal C : std_logic_vector(0 to N); begin for I in 0 to N-1 generate Instance : Add port map (X(I), Y(I), C(I), S(I), C(i+1)); end generate; C(0) <= Cin; Cout <= C(N); end structurelle ; 11 Le langage VHDL met à notre disposition une structure permettant de générer automatiquement un schéma à partir d'une boucle. Il s'agit de la boucle generate. Pour que ce type de description puisse être utilisé, il faut que le schéma possède un motif (ou un pattern) qui se répète. Dans ce cas, il suffit alors de décrire une seule fois le motif (motif général) et de lier le nombre d'itérations de la boucle au generic. Il faut en règle générale déclarer des tableaux de signaux et effectuer l'instanciation à partir de l'élément i de ce tableau. Notons enfin que, comme dans tout cas général, il y a des exeptions. En effet, les extrémités de la boucle (correspondant aux extrémités de la chaîne des full_adder), doivent absolument être connectés aux signaux externes que sont Cin et Cout. Ceci explique les deux affectations concurrentes qui sont réalisées hors de la boucle generate.

Généricité par les attributs : architecture comportement of registre is begin process variable etat : std_logic_vector(nbbits -1 downto 0); begin wait on Enable, Clock ; end comportement; if (Clock'event and Clock = '1') then if (Load = '1') then etat := D; } } if (Enable = '1') then Q <= etat after 10 ns; else Q <= "ZZZZZZZZ" after 10 ns; end if; end process; Pas très évolutif (si la taille du registre est autre que 8 bits, la mise en haute impédance ne fonctionne plus) Cette écriture assure un bon fonctionnement quelque soit la taille du registre Q <= (others => 'Z'); after 10 ns; 12 Il faut toujours s'assurer que l'architecture supporte la genericite exprimée dans la spécification d'entité. Ici il est impératif d'utiliser les attributs de façon à être certain que quelque soit la valeur qui sera donnée au generic, le composant aura un fonctionnement correct.

Autre exemple : le démultiplexeur Demux Sortie1 Sortie2 Entree NbBits NbSorties SortieN Selection 13 Enfin, dernier exemple : le cas du demultiplexeur. Ce composant est fonctionnellement immuable, mais 2 choses, au moins, peuvent varier, il s'agit de la taille des données manipulées, mais aussi le nombre de sorties de ce composant. Il est important de s'efforcer de décrire ce composant une fois pour toute de façon à pouvoir le réutiliser "les yeux fermés" en adaptant simplement ces 2 paramètres.

description de l'entité entity Demux is generic (NbBits : Natural := 8; NbCmd : Natural := 3; NbSorties : Naturel := 16); port ( Entree : in std_logic_vector(nbbits -1 downto 0) ; Selection : in std_logic_vector(nbcmd -1 downto 0); Sorties : out array (0 to NbSorties -1) of std_logic_vector(nbbits -1 downto 0) end Demux ; architecture comportement of Demux is begin for i in Sorties'range generate Cette écriture assure une évolution de la taille du démultiplexeur end generate; end Demux; Sorties(i) <= Entree when Selection = i else (others => '0'); Ecriture non évolutive : for i in 0 to 7 generate 14 Dans une première approche, il semblerait que les seuls generic dont nous ayons besoin pour cette entité soient NbBits et NbSorties. Toutefois, il existe une petite difficulté pour spécifier alors la taille du signal de commande de ce démultiplexeur. En effet, la taille de la commande est directement liée au nombre de sorties, il s'agit du logarithme à base 2 de NbSorties. Ne pouvant faire appel à une fonction dans la spécification de l'entité, la seule possibilité qui nous est offerte consiste à mettre en place un generic supplémentaire. Notons que l'architecture du démultiplexeur est réalisée grâce à une boucle generate. Enfin, notons que l'affectation de chaque élément du tableau Sorties est réalisée au travers d'une clause conditionnelle permettant de condenser l'écriture.