Flot de conception VLSI/FPGA Synopsys - ModelSim SE

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

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

Le langage VHDL. Eduardo Sanchez EPFL

SIN-FPGA DESCRIPTION PAR SCHEMA

Manipulations du laboratoire

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

SAUVEGARDER SES DONNEES PERSONNELLES

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

Tutorial Cadence Virtuoso

Notice ARES Version 5.20 Française

Dispositions relatives à l'installation :

Saisissez le login et le mot de passe (attention aux minuscules et majuscules) qui vous ont

Assistance à distance sous Windows

TAGREROUT Seyf Allah TMRIM

Microsoft Application Center Test

Les différentes méthodes pour se connecter

Mise en route et support Envision 10 SQL server (Avril 2015) A l'intention de l'administrateur SQL Server et de l administrateur Envision

DOCUMENTATION VISUALISATION UNIT

MEGA ITSM Accelerator. Guide de Démarrage

et de la feuille de styles.

Eclipse atelier Java

HP Data Protector Express Software - Tutoriel 3. Réalisation de votre première sauvegarde et restauration de disque

AFTEC SIO 2. Christophe BOUTHIER Page 1

1. Cliquez sur dans le coin supérieur gauche de l'écran 2. Sélectionnez la Langue de l'interface désirée 3. Cliquez sur

TD/TP 1 Introduction au SDK d Android

BIRT (Business Intelligence and Reporting Tools)

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

Configuration de GFI MailArchiver


Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

Notice d'utilisation Site Internet administrable à distance

OpenOffice Base Gestionnaire de Base de Données

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

Les tablettes et l'extranet Intermixt Mode d'emploi

FreeNAS Shere. Par THOREZ Nicolas

Installation des caméras IP

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Service Déposant: Procédure d installation. Page 1. Service déposant. Procédure d installation Version 2.3

Table des matières. 1 À propos de ce manuel Icônes utilisées dans ce manuel Public visé Commentaires...

Installation et configuration du logiciel BauBit

Déploiement de SAS Foundation

Utilisation de l outil lié à MBKSTR 9

Cyberclasse L'interface web pas à pas

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

Quelques outils pour le logiciel «Tux Paint»

EndNote : outil de gestion bibliographique

MEDIAplus elearning. version 6.6

Formation. Module WEB 4.1. Support de cours

Installation et prise en main

Guide d'installation sous Windows

Utiliser le logiciel CALIBRE pour gérer vos documents et les convertir au format epub

EQUISIS E-BANKING A. "E-BANKING" VIREMENTS NATIONAUX PARAMETRAGE. Comptes centralisateurs financiers

MANUEL D INSTALLATION LOGICIEL TELEVITALE. Agréé SESAM VITALE 1.40

Intégration de Cisco CallManager IVR et Active Directory

Windows 8 Installation et configuration

Galaxy est une plateforme de traitements (bio)informatiques accessible depuis l'url : (en précisant votre login et mot de passe LDAP «genotoul»).

Installation du transfert de fichier sécurisé sur le serveur orphanet

GUIDE D INSTALLATION RAPIDE DEXH264

Comptabilité - USR. Logiciel : Comptabilité USR - Version 2,16 Documentation réalisée par JJ Gorge Trésorier Tir à l'arc le 04/04/ / 15

Oracle Developer Suite 10g. Guide de l installation. Vista & Seven

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

8 Mars Guide du Wiki Confluence

Comment faire des étiquettes

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Prise en main du logiciel. Smart BOARD Notebook 10

Base élèves : des étiquettes avec OpenOffice 2.0

Manuel d installation Version Evolution réseau Ciel Compta Ciel Gestion commerciale Ciel Associations

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

1 Démarrer L écran Isis La boite à outils Mode principal Mode gadget Mode graphique...

NOTICE D' UTILISATION CAMWORKS FRAISAGE. Luc Vallée Lycée Blaise Pascal Segré

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture IBM BladeCenter

italc supervision de salle

Business Sharepoint Contenu

Prise en main du logiciel Smart BOARD

Travaux pratiques avec RapidMiner

lundi 3 août 2009 Choose your language What is Document Connection for Mac? Communautés Numériques L informatique à la portée du Grand Public

Date : juin 2009 AIDE SUR LES CERTIFICATS. Comment sauvegarder et installer son certificat

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

MEGA ITSM Accelerator. Guide de démarrage

Administration du site (Back Office)

Quick Start Installation de MDweb version 2.3

CREER UN PETIT SITE WEB EN COMPOSANT DES PAGES HTML

Création d un formulaire de contact Procédure

Quelques outils pour le logiciel «Tuxpaint»

sommaire Archives... Archiver votre messagerie... Les notes... Les règles de messagerie... Les calendriers partagés Les listes de diffusions...

Tapez le titre de la page «BASTIA ville méditerranéenne», puis allez deux fois à la ligne à l aide de la touche Entrée.

TP réseau Android. Bidouilles Tomcat. a) Installer tomcat : il suffit de dézipper l'archive apache-tomcat windowsx64.zip.

L'émulateur multi-système

GUIDE D UTILISATION CRÉER SON SITE WEB - PROJET RESCOL

Documentation Liste des changements apportés

FAQ pour tablette Windows 8 (NS-15MS0832 et NS-15MS0832B) Avril 2015

supérieure Vous ne connaissez pas le numéro de version de votre application?

Seafile, pour simplifier l'accès à ses fichiers, les partager et les synchroniser

Augmenter la portée de votre WiFi avec un répéteur

Tutoriel Adobe Acrobat Pro (version 9.0.0) Créer les fichiers PDF de la thèse. Service Commun de la Documentation Service des thèses

POVERELLO KASONGO Lucien SIO 2, SISR SITUATION PROFESSIONNELLE OCS INVENTORY NG ET GLPI

Transcription:

Flot de conception VLSI/FPGA Synopsys - ModelSim SE Tutorial (version avril 2012) Olivier Sentieys, Hélène Dubois ENSSAT - Université de Rennes 1 sentieys@enssat.fr, dubois@enssat.fr 1- Introduction Sommaire 2- Installation des logiciels Design Compiler et ModelSim SE 2.1- Mise en place de l'environnement 2.2- Paramètrage des fichiers de configuration du logiciel 3- Présentation des éléments principaux de Design Compiler 3.1- Organisation des différents fichiers utilisés par le logiciel 3.2- Utilisation de la souris 4- Synthèse logique avec Synopsys Design Compiler 4.1- Lancement de la synthèse logique 4.2- Synthèse d'un compteur/décompteur 4 bits 4.2.1- Etude du fichier VHDL source 4.2.2- Chargement et compilation d'un fichier VHDL dans Design Vision 4.2.3- Elaboration d'un modèle VHDL 4.2.4- Sauvegarde d'un résultat de synthèse 4.2.5- Optimisation d'un circuit 4.2.6- Mise en oeuvre des contraintes 4.2.7- Caractéristiques du circuit 4.2.8- Script dc_shell de compilation d'un fichier VHDL 5- Simulation logique avec ModelSim SE de Mentor Graphics 5.1- Introduction 5.2- Création des fichiers 5.3- Analyse des fichiers 5.4- Lancement de la simulation RT-level 5.5- Lancement de la simulation gate-level 1

1. Introduction Ce tutorial a pour objectif l'apprentissage des logiciels Design Compiler (Synopsys) et ModelSim SE (Mentor Graphics) dédiés à la conception et à la simulation d'asic et de FPGA. La version HTML de ce document ainsi que des fichiers d aide au projet ou au tutorial sont accessibles à l'url : http://cairn.enssat.fr/enseignements/cao/cao.php Le logiciel Design Compiler de Synopsys permet la synthèse logique grâce aux outils design_vision (en mode graphique) et dc_shell (en mode ligne). Le logiciel ModelSim SE permet la simulation temporelle au niveau RT (transfert de registre) ou au niveau porte, à partir des langages VHDL ou Verilog. Ces deux outils sont la référence au niveau de l utilisation industrielle. Le tutorial va nous permettre, dans un premier temps, d'appréhender ces logiciels en présentant ses principales composantes. Ensuite, nous nous appuierons sur un exemple concret : un compteur/décompteur 4 bits. 2. Installation de Design Compiler 2.1. Mise en place de l'environnement Vous devez vous placer en mode «tcsh» Créez un répertoire $HOME/synopsys et placez vous dedans Copiez l'archive tutorial.tar accessible à l'url citée plus haut : o par la commande wget http://cairn.enssat.fr/enseignements/cao/tutorialsynopsys/tutorial.tar. o ou en lançant firefox afin de récupérer le fichier tutorial.tar Ensuite, l archive être dans $HOME/synopsys décompactée par la commande o tar xfv tutorial.tar Placez vous ensuite dans le répertoire tutorial qui vient d être créé et effectuez la commande suivante : o source environ.csh Modifiez votre fichier.cshrc en y ajoutant la commande : source $HOME/synopsys/tutorial/environ.csh De cette façon, lors de votre prochaine connexion, synopsys et modelsim seront automatiquement configurés. Remarque : Synopsys gère les fichiers de manière non structurée. Il place dans le répertoire de lancement tous les fichiers de la bibliothèque associée à ce répertoire. 2.2- Paramétrage des fichiers de configuration du logiciel IMPORTANT : placez vous toujours dans le répertoire $HOME/synopsys/tutorial avant de lancer les outils de Synopsys. Si vous souhaitez travailler dans un autre répertoire, il faudra y copier les fichiers de configurations décrits ci dessous. La mise en oeuvre des logiciels de Synopsys impose la mise en place de fichiers de configuration (.synopsys_dc.setup et.synopsys_vss.setup) dans le répertoire où vous travaillez (i.e. $HOME/synopsys/tutorial) ou dans votre $HOME. Pour faciliter l'utilisation d'une bibliothèque fondeur (appelée Design Kit), des scripts ont été écrits. Dans votre fichier.synopsys_dc.setup la bibliothèque hcmos9gp et configurée. Il s agit de celle qui est utilisée pour faire la synthèse et la simulation des composants. Elle correspond à une technologie CMOS 130 nanomètres de STMicroelectronics. 2

3. Présentation des principaux éléments de Design Compiler 3.1. Organisation des différents fichiers utilisés par le logiciel Extension des fichiers sources o les fichiers.v sont des fichiers source en langage Verilog o les fichiers.vhd sont des fichiers source en langage VHDL Extension des fichiers de synthèse et de script o les fichiers.sdf sont des fichiers contenant les contraintes imposées au design ou les temps extraits après simulation o les fichiers.tcl sont des fichiers script Extension des fichiers de rapport de compilation et de login o les fichiers.rpt (ou.out) sont des fichiers dans lesquels on trouve les informations sur le design à différents moments de la synthèse logique o les fichiers.log sont des fichiers contenant toutes les commandes et alias de l'application o les fichiers.db sont répertoriés dans la base de données du logiciel. C'est également l'extension par défaut de Synopsys o les fichiers.syn sont des fichiers intermédiaires générés durant l'analyse d'un circuit o les fichiers.sim,.mra et.o sont des fichiers intermédiaires générés par synopsys et utilisés lors de la phase de simulation o les fichiers.lis sont des fichiers contenant le code source ainsi que les warnings et les erreurs générés durant l'analyse Remarque : Synopsys n'utilise comme fichiers d'entrées de ses différents outils que des fichiers de type VHDL (ou Verilog). Il n'existe pas de méthode graphique pour générer des composants complexes à partir de composants simples. Les fichiers issus de la synthèse logique (netlist) sont également de type VHDL. 4. Synthèse logique Ce tutorial s'appuie sur l'exemple d'un compteur/décompteur 4 bits dont nous allons réaliser l'analyse complète en détaillant toutes les étapes de la synthèse logique. 4.1. Lancement de la synthèse logique Il existe deux manières d'utiliser l'outil de synthèse : la première consiste en l'emploi d'une interface en mode ligne. Pour cela on utilise la commande dc_shell qui lance l'environnement (apparition du prompt dc_shell dans le terminal); la deuxième consiste en l'emploi d'une interface en mode graphique. La commande design_vision permet de lancer l'environnement. La fenêtre Design Vision apparaît alors à l'écran. Pour les premières utilisations, il est conseillé d'utiliser l'interface graphique qui est nettement plus conviviale que l'interface en mode ligne. Toutes les commandes de dc_shell peuvent être lues au fur et à mesure de leur exécution dans la fenêtre Console en bas de l écran. Il est également possible d'écrire des commandes de Design Compiler (dc_shell) dans la ligne «command line» sous la fenêtre Console. Dans la suite de ce tutorial, nous utiliserons l'interface en mode graphique, design_vision. Nous présenterons toutefois quelques commandes de Design Compiler importantes. 3

4.2. Synthèse d'un compteur/décompteur 4 bits 4.2.1. Etude du fichier VHDL source Le fichier VHDL de départ est : compteur.vhd library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity compteur is generic (size : integer := 16 ); port ( reset : in Std_Logic; clk : in Std_Logic; up : in Std_Logic; load : in Std_Logic; value : in integer range 0 to size-1; output: out integer range 0 to size-1) ; end compteur; architecture comportementale of compteur is signal count : integer range 0 to size-1; synchrone : process (reset,clk) if reset='1' then count<=0; elsif clk'event and clk='1' then if load='1' then count<=val; elsif up='1' then count <= count + 1; else count <= count - 1; end if ; end if ; end process ; output <= count; end comportementale; Tout fichier VHDL (possédant l'extension.vhd) doit posséder au moins les lignes suivantes devant chaque entity library IEEE; use IEEE.STD_LOGIC_1164.ALL; Le type STD_LOGIC_VECTOR n'est pas compatible avec les opérations addition et soustraction. Il faut utiliser le type INTEGER RANGE 0 to N ou les types SIGNED/UNSIGNED. 4.2.2. Chargement et compilation d'un fichier VHDL dans Design Vision. Lancez synopsys par la commande : design_vision La fenêtre de l outil comme dans la figure suivante doit s ouvrir. On peut alors analyser le fichier.vhd à l'aide du menu File (File -> Analyze). Sélectionnez le fichier (grace à ADD) en vérifiant que le modèle VHDL est bien choisi ainsi que la bibliothèque WORK et lancez l analyse (OK). La syntaxe du fichier est ainsi vérifiée et des fichiers au format intermédiaires sont stockés dans le répertoire de travail./lib. On y trouve des fichiers pour la simulation (extension.sim) et des fichiers pour la synthèse (extension.syn). 4

4.2.3. Elaboration d'un modèle VHDL L'élaboration correspond à une synthèse indépendante de la technologie utilisée (elle est non optimisée), il s agit de la vue RTL. On utilise dans le menu File, le chemin (File -> Elaborate). Choisissez le circuit à synthétiser dans la bibliothèque de travail WORK, précisez la valeur du générique size, puis lancez l'élaboration (OK). Le schéma correspondant peut être alors visualisé par la commande Schematic/NewDesign Schematic view. Remarque : il est probable que vous n ayez pas les mêmes résultats en termes de schéma que sur les figures suivantes. Ceci est normal car le schéma dépend de la version d outil utilisé et de la version de bibliothèque ASIC utilisée. 5

Exemple du compteur non optimisé 4.2.4 Autre méthode : utilisation de la commande Read On peut également utiliser la commande read pour faire ces deux étapes de analyze et elaborate. Dans ce cas, on n a pas à donner la valeur de size et le nom du design n est pas modifié (compteur). 4.2.4. Contrainte sur la fréquence d horloge Avant de faire la synthèse du circuit, il est nécessaire de lui indiquer une fréquence d horloge. Celle-ci servira comme contrainte pour la synthèse (voir section 4.2.6 pour plus de détail). Pour cela, le plus simple est d exécuter la commande suivante dans la fenêtre de commande en bas de l outil : create_clock -period 10.0 clk Ici une période de 10ns est donnée à l horloge nommée clk. 4.2.5. Compilation et optimisation d'un circuit Pour se rendre compte de l'importance de l'étape d'optimisation il est nécessaire d'observer les résultats de compilation avant optimisation (cf 4.2.3- compteur non optimisé). On applique maintenant l'étape d'optimisation pour la technologie ciblée (Design -> Compile Design) toujours dans la fenêtre Design Vision. Ouvrez ensuite le nouveau schéma. 6

On observe le résultat suivant qui montre que le design est maintenant une connexion de portes de la bibliothèque hcmos9gp. IMPORTANT : la documentation pdf décrivant la bibliothèque de cellules est accessible à : /usr/local/designkit/hcmos9gp_902/core9gpll_snps_avt_4.1/doc/databook_1.2v/core9gpll _1.2V_databook.pdf Il est maintenant nécessaire de sauvegarder le résultat de synthèse en vue d'une simulation de niveau porte ultérieure. Pour cela : Exécutez les commandes suivantes dans la ligne de commande design_vision>. change_names -hierarchy -rule vhdl permet de préparer la netlist pour une sauvegarde en VHDL. write_sdf compteur_gate.sdf permet de sauvegarder les paramètres temporels de simulation au format sdf V2.1. Sauvegardez votre compteur optimisé (File -> Save) compteur_gate.db. Sauvegardez votre compteur optimisé (File -> Save As). Choisissez le format VHDL, sélectionnez "Save All Design in Hierarchy" et appelez votre fichier compteur_gate.vhd. 4.2.6. Mise en oeuvre de contraintes Les contraintes sont des déclarations explicites qui définissent les objectifs à atteindre pour le circuit considéré. Le logiciel SYNOPSYS propose des contraintes de temps, de surface et d énergie. Par défaut, l outil minimisera la surface en respectant une éventuelle contrainte de temps. Lors de la phase d'optimisation, Design Vision (ou Design Compiler) utilise deux modèles de contraintes: les contraintes implicites, qui sont imposées par la bibliothèque technologique; 7

les contraintes d'optimisation (ou contraintes explicites) imposées par l'utilisateur. Remarque Design Compiler essaie de faire converger les deux modèles de contraintes. Toutefois, en cas de non adéquation, ce sont les contraintes implicites qui sont prioritairement retenues. Il existe trois façons différentes de spécifier des contraintes: écriture de ligne de commande dans dc_shell> ou appel d un script par la commande source. C est le moyen le plus efficace et donc celui à privilégier. Quelques exemples de contraintes sont donnés ci dessous. # Create user defined variables designer = "Olivier Sentieys" company = "ENSSAT" # Time Budget create_clock -period 10.0 -waveform {0 5} [get_ports clk] set_dont_touch_network clk set_clock_uncertainty -setup 0.2 [get_ports clk] set_input_delay -max 1.0 -clock clk [get_ports "up load value"] set_output_delay -max 0.5 -clock clk [get_ports output] # Area Constraint set_max_area 5000 # Operating Environment set_wire_load_model -name area_18kto24k set_driving_cell -library CORE9GPLL -lib_cell FD2QNLL -pin QN [get_ports "up load value"] set_load [load_of CORE9GPLL/FD2QNLL/D] [get_ports output] report_constraints sélection des menus de contraintes dans la fenêtre Design Vision; o (Attributes -> Optimization Constraints -> Design Constraint) pour spécifier les contraintes en terme de Surface (Area), de Puissance (Power) ou encore de Sortance (Fanout) o (Attributes -> Optimization Constraints -> Timing Constraint) pour spécifier les contraintes en terme de Temps de traversée entre une entrée et une sortie et de fréquence d'horloge écriture de fichiers source.vhd contenant des contraintes (cf.exemple de code ci dessous). Exemple de l'entity du fichier compteur.vhd avec contraintes library IEEE; use IEEE.STD_LOGIC_1164.ALL; library SYNOPSYS; use SYNOPSYS.ATTRIBUTES.ALL; entity compteur is port ( reset : in Std_Logic; clk : in Std_Logic; up : in Std_Logic; load : in Std_Logic; val : in integer range 0 to 15; sortie : out integer range 0 to 15) ; attribute MAX_AREA of compteur : entity is 70.0; attribute MAX_DELAY of sortie : signal is 2.0; end compteur; 4.2.7. Caractéristiques du circuit Pour obtenir les caractéristiques du circuit synthétisé dans Design Vision : (Design-> Report). Ces rapports peuvent être vus à l écran ou sauvés dans des fichiers texte. 8

Par sélection, vous obtenez les paramètres de surface (Area), de consommation (Power), etc. Les commandes équivalentes sont report_area ou report_power. Pour obtenir les rapports dans des fichiers, exécutez par exemple la commande o report_area > rep_area_compteur.txt Ceci sera bien pratique pour avoir vos résultats à insérer dans vos rapports. Pour obtenir le chemin critique et donc la fréquence maximale de fonctionnement il faut utiliser le menu Timing et plusieurs possibilités s offrent à vous : o Timing->Report Timing Path permet d obtenir le chemin critique. Point Incr Path ----------------------------------------------------------- clock clk (rise edge) 0.00 0.00 clock network delay (ideal) 0.00 0.00 count_reg[0]/cp (FD2QLL) 0.00 0.00 r count_reg[0]/q (FD2QLL) 0.14 0.14 f U36/Z (IVLLX05) 0.16 0.30 r U25/Z (AO2LL) 0.18 0.48 f U34/Z (AO20NLL) 0.19 0.67 f U32/Z (AO8ALL) 0.07 0.74 r U31/Z (AO6NLL) 0.12 0.86 r count_reg[2]/d (FD2QLL) 0.00 0.86 r data arrival time 0.86 clock clk (rise edge) 10.00 10.00 clock network delay (ideal) 0.00 10.00 count_reg[2]/cp (FD2QLL) 0.00 10.00 r library setup time -0.19 9.81 data required time 9.81 ----------------------------------------------------------- data required time 9.81 data arrival time -0.86 ----------------------------------------------------------- slack (MET) 8.95 Dans cet exemple, le chemin critique est 0.86ns auquel il faut ajouter le temps de setup (ici 0.19ns) pour obtenir la fréquence maximale (ici 952MHz). Comme une horloge de 10ns (100MHz) avait été spécifiée, le slack est donc la marge de temps restante. Le détail donne l accumulation des temps de propagation à travers les différentes portes (par exemple IVLLX05 est un inverseur dont le temps de propagation est de 0.16ns). Les «r» et «f» sont soit rising soit falling au niveau des temps de propagation des portes. En cliquant sur les nœuds en bleu, vous pouvez les afficher dans le schéma porte. o o Timing-> Timing Analysis Driver permet d obtenir différents chemins critiques (ici 4). Lorsque vous cliquez sur un des chemins, celui ci doit s afficher dans le schéma porte comme sur la figure suivante. Timing-> Path Slack permet de visualiser un histogramme des différents chemins. 9

4.2.8. Script dc_shell de compilation d'un fichier VHDL Après s'être placé en mode Design Compiler (commande dc_shell dans une fenêtre terminal), il suffit de lancer le script tcl suivant nommé run.tcl (commande source run.tcl dans la fenêtre précédente). Ne pas lancer un Design Vision et un dc_shell en même temps. Il est aussi possible de lancer cette commande dans design_vision. Le fichier run.tcl contient les instructions suivantes: read_vhdl compteur.vhd -- analyse syntaxique du fichier source.vhd -- creation du design a partir d'une entite et d'une architecture VHDL current_design compteur -- compteur represente ici le nom de l'entity link list_designs list_libs check_design -- verification de la validite logique du design -- (en cas d'erreurs presence de warning) create_clock -period 10.0 -waveform {0 5} [get_ports clk] -- contrainte sur la période d horloge -- (à mettre pour obtenir le chemin critique) compile_ultra -- optimisation du design report_constraint -all report_timing report_area report_power change_name -hierarchy -rule vhdl write_sdf compteur_gate.sdf write -hierarchy -format vhdl -output compteur_gate.vhd -- sauvegarde de la netlist niveau porte en VHDL Vous pourrez modifier ce script pour compiler vos design pendant le projet ; le gain de temps est réellement appréciable par rapport à l utilisation de l environnement graphique design_vision. 10

5. Simulation logique avec ModelSim SE de Mentor Graphics 5.1. Introduction et lancement des outils L'invocation des outils de simulation se fait par la commande vsim. Bien que cela ne soit pas obligatoire, il est conseillé de travailler pas seulement avec des fichiers, mais avec un projet qui contiendra les fichiers mais aussi des configurations liées au projet. File->Change Directory et choisir le répertoire courant ($HOME/synopsys/tutorial) File->New->Project et donner le nom "tutorial" à ce projet dans le répertoire courant Exécuter enfin la commande qui fait le lien avec la bibliothèque de description des composants niveau porte pour Modelsim : vmap CORE9GPLL /usr/local/designkit/hcmos9gp_920/core9gpll_snps_avt_4.1/mentor_modelsim Vous pouvez taper cette commande, ou utiliser le fichier initlib.do qui vous est fourni en tapant la commande do initlib.do. Le simulateur est maintenant configuré. Avant d'effectuer une simulation, il est nécessaire de créer plusieurs fichiers de test qui constituent le testbench. 5.2. Création des fichiers Pour simuler un circuit, il faut plusieurs descriptions VHDL : un fichier de code, un fichier de simulation, un fichier de configuration. Nous utiliserons le même exemple de fichier code : compteur.vhd library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity compteur is port (... ) ; end compteur; architecture comportementale of compteur is... end comportementale; Le fichier de simulation (ou testbench) est un fichier.vhd, il doit toujours être structuré de la même façon. Voici un exemple de fichier de simulation : sim_compteur.vhd library IEEE; use IEEE.STD_LOGIC_1164.ALL; library work; use work.all; ENTITY bench IS END bench; ARCHITECTURE test OF bench IS COMPONENT compteur 11

generic (size : integer := 16 ); port ( reset : in Std_Logic; clk : in Std_Logic; up : in Std_Logic; load : in Std_Logic; value : in integer range 0 to size-1; output : out integer range 0 to size-1) ; end COMPONENT; constant Tclk : time := 10 ns; signal clk_cpt : std_logic:= '0'; signal reset_cpt: std_logic:= '1'; signal up_cpt : std_logic:= '1'; signal load_cpt: std_logic:= '0'; signal val_cpt : integer range 0 to 15 := 9; signal out_cpt : integer range 0 to 15; cpt : compteur generic map(16) port map (reset_cpt, clk_cpt, up_cpt, load_cpt, val_cpt,out_cpt); GENERATE_CLOCK : process clk_cpt<= '0'; WAIT FOR Tclk/2; clk_cpt<= '1'; WAIT FOR Tclk/2; end process GENERATE_CLOCK; CPT_SIM : process reset_cpt<= '1'; up_cpt<= '1'; load_cpt<= '0'; WAIT FOR 3*Tclk; reset_cpt<= '0'; WAIT FOR 10*Tclk; load_cpt<= '1'; WAIT FOR 10*Tclk; load_cpt<= '0'; WAIT FOR 30*Tclk; up_cpt<= '0'; WAIT FOR 40*Tclk; wait; end process CPT_SIM; end test; Le fichier de configuration est aussi un.vhd, il est obligatoire mais peut être inclus dans le fichier précédent. Voici un exemple de fichier de configuration : cfg_compteur.vhd library IEEE; use IEEE.STD_LOGIC_1164.ALL; library work; use work.all; configuration compteur_cfg of bench is for test for cpt:compteur 12

use entity work.compteur(comportementale); end for; end for; end compteur_cfg; Remarque: Les fichiers de configuration et de testbench peuvent être utilisés aussi bien au niveau RTL qu'au niveau porte. Il suffit de modifier le nom de l'architecture dans le fichier cfg_compteur.vhd. En effet la netlist générée par Synopsys lors de la synthèse a pour nom d'architecture SYN_nom_de_votre_archi, donc SYN_comportementale ici au lieu de comportementale configuration compteur_cfg_gate of bench_gate is for test for cpt:compteur use entity work.compteur(syn_comportementale); end for; end for; end compteur_cfg_gate; 5.3. Analyse des fichiers Avant de tester le circuit, il faut l'analyser. Pour cela il nous faut ajouter dans le projet les fichiers VHDL à compiler. File->Add to project->compteur.vhd Répéter l'opération pour les deux autres fichiers vhdl : sim_compteur.vhd et cfg_compteur.vhd Précisez l ordre de compilation des fichiers grâce à la commande Compile->Compile Order Project->Compile All Il est bien sur possible de compiler les fichiers un par un en cas d'erreur. Un éditeur de texte s'ouvre lorsque l'on doubleclique sur les fichiers.vhd. 5.4. Lancement de la simulation Choisissez l'onglet Library, puis, en double-cliquant sur la configuration compteur_cfg, la simulation se charge. Ceci est équivalent à : Simulate->Start Simulation. Choisir ensuite work.compteur_cfg View/Debug Window/All permet de faire apparaître l'ensemble des fenêtres de simulation. Avant de continuer la simulation, une petite explication de cet outil s'impose. L'écran est composé de plusieurs parties: La fenêtre WORK SPACE (à gauche) avec ses onglets, qui permet d accéder aux fichiers, aux entités compilées dans les biblitohèques, etc. Le code vhdl Les fenêtres "Active Process", "Locals", "Objects" et "Dataflow" permettent de sélectionner les signaux à visulaiser. La fenêtre "wave" dessine les chronogrammes Nous allons maintenant continuer la simulation. Dans le fenêtre "Objects", sélectionnez l'ensemble des signaux et «tirez» les dans la fenêtre «Wave» Simulate -> Run->Run 100ns permet de faire avancer la simulation de 100 ns (ou utilisez les icônes) Répéter cette opération tant que nécessaire... Vous devez voir les sorties de votre compteur s incrémenter. 13

Au bout de quelques pas de simulation, vous allez avoir une erreur : d où vient-elle? Est-elle gênante? 5.5. Simulation au niveau porte Maintenant que vous venez de faire la simulation au niveau RTL, il faut faire la simulation au niveau porte avec la netlist compteur_gate.vhd. Pour cela, vous devrez d abord créer un nouveau projet File->New->Project et donner par exemple le nom "sim_gate" à ce projet dans le répertoire courant. Changez également le nom de la bibliothèque de "work" vers par exemple "work_gate". Ajoutez le fichier compteur_gate.vhd le fichier sim_compteur_gate.vhd et le fichier cfg_compteur_gate.vhd dans le projet en cours. Recompilez l'ensemble. La configuration instancie maintenant la netlist au niveau porte et non plus la spécification RTL d'origine contenue dans compteur.vhd. Rappel : il est en outre nécessaire d avoir généré un fichier au format SDF (Standard Delay Format) compteur_gate.sdf sous design_vision (paragraphe 4.2.5). Ce fichier contient les délais des portes et les estimations des délais d'interconnexions. Simulate -> Start Simulation Dans l'onglet Design, chargez la configuration du test compteur_cfg_gate en choisissant ps (pico-second) comme résolution du simulateur. Dans l'onglet SDF, chargez (bouton Add...) le fichier SDF associé au composant à tester (/bench_gate/cpt/). o Browse->compteur_gate.sdf o Apply to Region->bench_gate/cpt (on applique les temps seulement au composant «cpt» de l entité «bench_gate») o Cocher l option reduce errors to warnings Visualisez comme au niveau RTL les signaux d entrée et de sortie du compteur. 14

Sur cette simulation, l erreur précédente au bout de quelques cycles de simulation disparait. Pourquoi? A partir de ce moment, la simulation prend en compte les portes logiques qui constituent la netlist du compteur et les informations de délais fournies par le fichier SDF. Relancez la simulation en étant sur d avoir pris une résolution en ps (onglet design de start simulation). En zoomant sur un front d horloge vous voyez maintenant apparaître des temps de propagation (et des glitchs!) entre l'horloge et les sorties du compteur. 15

IMPORTANT : recompiler et simulez avec une taille de 32 bits pour le compteur afin de mieux vous rendre compte des problèmes contraintes de fréquence d horloge, de chemins critiques, de temps de propagation et de glitchs. 6 Comparaison des différents styles d'écriture en VHDL Quatre façons de décrire un registre à sortie trois-états sont proposées dans le fichier VHDL dffs.vhd. -------------------------------------------------------------------- -- A POSITIVE EDGE-TRIGGERED D FLIP-FLOP WITH ACTIVE LOW ASYNCHRONOUS -- RESET AND ACTIVE HIGH OUTPUT ENABLE -------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.all; entity REG is port ( Q : out STD_LOGIC_VECTOR(3 downto 0); D : in STD_LOGIC_VECTOR(3 downto 0); CLK : in STD_LOGIC; Reset,Oe : in STD_LOGIC ); end REG; -- Premier style d'écriture architecture REG1 of REG is signal Qi : STD_LOGIC_VECTOR(3 downto 0); DF : process(clk) if CLK'event AND CLK = '1' then Qi <= D; end process DF; CB : process(reset,oe,qi) if Reset = '0' AND Oe = '1' then Q <= (others => '0'); elsif Reset = '1' AND Oe = '0' then Q <= (others => 'Z'); elsif Reset = '1' AND Oe = '1' then Q <= Qi; end process CB; end REG1; -- Deuxieme style d'écriture architecture REG2 of REG is signal Qi : STD_LOGIC_VECTOR(3 downto 0); DF : process(clk) if CLK'event AND CLK = '1' then Qi <= D; end process DF; CB : process(reset,oe,qi) if Reset = '0' AND Oe = '1' then Q <= (others => '0'); elsif Reset = '1' AND Oe = '0' then Q <= (others => 'Z'); elsif Reset = '0' AND Oe = '0' then Q <= (others => '0'); else Q <= Qi; end process CB; 16

end REG2; -- Troisieme style d'écriture architecture REG3 of REG is signal Qi : STD_LOGIC_VECTOR(3 downto 0); DF : process(clk, Reset) if Reset = '0' then Qi <= (others => '0'); elsif CLK'event AND CLK = '1' then if Oe = '0' then Q <= (others => 'Z'); else Qi <= D; end process DF; CB : process(reset,oe,qi) if Reset = '0' AND Oe = '1' then Q <= (others => '0'); elsif Reset = '1' AND Oe = '0' then Q <= (others => 'Z'); elsif Reset = '0' AND Oe = '0' then Q <= (others => '0'); else Q <= Qi; end process CB; end REG3; -- Quatrieme style d'écriture architecture REG4 of REG is signal Qi : STD_LOGIC_VECTOR(3 downto 0); DF : process(clk, Reset) if Reset = '0' then Qi <= (others => '0'); elsif CLK'event AND CLK = '1' then Qi <= D; end process DF; CB : process(oe,qi) if Oe = '0' then Q <= (others => 'Z'); else Q <= Qi; end process CB; end REG4; Effectuez la synthèse puis l'optimisation de chaque registre. Pour cela effectuez les commandes read de Design Vision sur le fichier dffs.vhd. Effectuer ensuite sur chaque architecture la compilation. Relevez les différences entre les résultats de synthèse. En déduire quelques règles pour la description des circuits séquentiels et des circuits combinatoires. Utilisez la fenêtre Report pour extraire les paramètres temporels du registre REG4. Il ne vous reste plus qu'à faire vos propres composants dans le cadre de votre projet, en n oubliant pas ce que vous venez de voir dans ce tutorial, ni les dix commandements de la conception de circuits numériques intégrés. Bon projet et bon courage! 17