17
ELE4304 : Principe des Circuits Intégrés à Très Grande Échelle LABORATOIRE 1 Langage VHDL, Simulation et Synthèse Logique 11 septembre 2006 1 INTRODUCTION L’évolution de l’industrie des circuits intégrés durant la dernière décennie a été tellement rapide qu’il est maintenant possible d’intégrer plusieurs systèmes complexes sur une seule puce. Cette évolution vers des niveaux d’intégration de plus en plus élevés est motivée par les besoins de systèmes plus performants, légers, compacts et consommant un minimum de puissance. Dans de telles circonstances, la gestion de la complexité avec les outils d’aide à la conception traditionnels (les outils de bas niveau : masque, schématique…) devient une tâche pénible, coûteuse, voire impossible, quand on considère les contraintes de mise en marché d’un produit. Dans le but de mieux gérer la complexité des circuits intégrés, tout en gardant les coûts du développement dans des limites raisonnables, d’autres outils d’aide à la conception, dits outils de synthèse, ont vu le jour dès le début des années 1990. En effet, le but ultime de ces outils associés avec un langage de conception et de simulation puissant, tel que le langage VHDL, est de générer le dessin des masques d’un circuit à partir de sa description comportementale de haut niveau. Ainsi, le concepteur peut se limiter à la conception, à la modélisation et à la simulation de son produit, sans tenir compte des détails de mise en œuvre au niveau schématique ou du dessin des masques. 1.1 OBJECTIFS SPÉCIFIQUES Apprendre le sous-ensemble du langage VHDL comportemental synthétisable; Apprendre à utiliser l’outil de synthèse Design Analyzer de Synopsys; Apprendre à utiliser le simulateur logique ModelSim de Mentor Graphics. Apprendre à coder avec une philosophie de design reuse. 1.2 DOCUMENTATION REQUISE Vous trouverez l'essentiel des informations requises pour le "VHDL comportemental" compatible avec le simulateur logique ModelSim dans le document du laboratoire Laboratoire 1 Langage VHDL, Simulation et Synthèse Logique 1/17

Langage VHDL, Simulation et Synth se Logique 1 INTRODUCTIONzhangxun.free.fr/dossiers/these/these/bibliographie/libraryscience/... · La documentation disponible sur le site web du

Embed Size (px)

Citation preview

ELE4304 : 

Principe des Circuits Intégrés à Très Grande Échelle

LABORATOIRE 1

Langage VHDL, Simulation et Synthèse Logique

11 septembre 2006

1 INTRODUCTIONL’évolution de l’industrie des circuits intégrés durant la dernière décennie a été tellement rapide qu’il  est  maintenant  possible  d’intégrer  plusieurs   systèmes complexes  sur  une seule puce.  Cette évolution vers des niveaux d’intégration de plus en plus élevés est motivée par les besoins de systèmes plus performants, légers, compacts et consommant un minimum de puissance. Dans de telles circonstances, la gestion de la complexité avec les   outils   d’aide   à   la   conception   traditionnels   (les   outils   de   bas   niveau :   masque, schématique…)   devient   une   tâche   pénible,   coûteuse,   voire   impossible,   quand   on considère les contraintes de mise en marché d’un produit.

Dans le but de mieux gérer la complexité des circuits intégrés, tout en gardant les coûts du développement dans des limites raisonnables, d’autres outils d’aide à la conception, dits outils de synthèse, ont vu le jour dès le début des années 1990. En effet, le but ultime de ces outils associés avec un langage de conception et de simulation puissant, tel que le langage   VHDL,   est   de   générer   le   dessin   des   masques   d’un   circuit   à   partir   de   sa description comportementale de haut niveau.  Ainsi,   le concepteur peut se  limiter à   la conception, à  la modélisation et à  la simulation de son produit, sans tenir compte des détails de mise en œuvre au niveau schématique ou du dessin des masques.

1.1 OBJECTIFS SPÉCIFIQUES• Apprendre le sous­ensemble du langage VHDL comportemental synthétisable;• Apprendre à utiliser l’outil de synthèse Design Analyzer de Synopsys;• Apprendre à utiliser le simulateur logique ModelSim de Mentor Graphics.• Apprendre à coder avec une philosophie de design reuse.

1.2 DOCUMENTATION REQUISEVous trouverez l'essentiel  des  informations requises pour le "VHDL comportemental" compatible   avec   le   simulateur   logique  ModelSim  dans   le   document   du   laboratoire 

Laboratoire 1 Langage VHDL, Simulation et Synthèse Logique 1/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

disponible par chapitres sur le site du cours. Un document de référence plus complet sur ce sujet est aussi mis à votre disposition sur le site du cours (VHDL CookBook). Par le passé, il a été observé que la plus grande difficulté de ce laboratoire est de s’adapter à l’environnement   de   travail   (Unix)   et   aux   outils   de   travail   utilisés   (design_analyzer,  modelsim, …). La documentation disponible sur le site web du cours permet de résoudre ce problème d’adaptation. Il faut cependant se donner la peine de la lire.

2 TRAVAIL DEMANDÉLe présent laboratoire comporte 3 numéros qui vous proposent de réaliser la description VHDL­RTL  (Register  Transfer  Level)   de  différents  modules   ou   fonctions  matériels. Généralement pour chaque numéro vous devrez ;

• Écrire la description VHDL du module matériel proposé;

• Faire la synthèse RTL et l’optimisation avec Design Analyzer de Synopsys;

• Faire   les   simulations   fonctionnelle  et   temporelle   (pré   et  post­synthèse)   avec l’aide   d’un   banc   d’essais,   en   prenant   soin   de   mettre   en   évidence   les comportements critiques;

• Extraire les résultats d’analyse (REPORT) sur les délais et la surface (TIMING, AREA).

Généralement pour chaque numéro vous devez produire et remettre:

1. Les   codes   sources   des   descriptions   VHDL   et   bancs   d’essais   (testbenches) CLAIREMENT IDENTIFIÉS. (Utilisez l’entête proposée par le guide sur le design reuse).

2. Les   schémas   des   circuits   après   synthèses   complètes.   Le   terme  synthèse complète  désigne   le   résultat   obtenu   par   la   synthèse   (ELABORATE)   et l’optimisation (TOOLS­>OPTIMISATION). Ne remettez que le schéma final. Si votre circuit est impossible à capturer sur une seule image, présentez une vue globale et une vue au niveau des portes en faisant un zoom sur une partie du design. Vous trouverez un exemple de schéma à l’Annexe A.

3. Les résultats de simulation fonctionnelle et temporelle (avant et après synthèse) demandés.  Dans   le   cas   de   signaux   de   plus   de   1   bit,   l’affichage   sur   vos chronogrammes   doit   se   faire   en   format  hexadécimal.  Vous   trouverez   des exemples aux annexes C et D.

4. Résultats d’analyses : délais et surfaces. Donnez les fichiers fournis par Design  Analyzer.

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 2/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

5. Réponses aux questions posées s’il y a lieu.

6. Vous   pouvez   ajouter   tout   commentaire   et   discussion   que   vous   jugerez nécessaire.

On   vous   demande   d’organiser   le   rapport   par   numéro   d’exercice.   Toutes   les explications, chronogrammes de simulation, schémas, résultats de  Design Analyzer et réponses aux questions doivent être dans la partie principale du rapport selon l’ordre ci­dessus. Votre code VHDL doit pour sa part être inclu en annexe et référé au besoin. Le rapport doit également inclure une brève introduction et conclusion ainsi que tout commentaire que vous jugerez pertinent.

De plus, il est important, tout au cours du laboratoire, de respecter les règles de codage définies dans le document intitulé « méthodologie sur le design reuse » disponible sur le site du cours. Les règles précédées d’un astérisque (*) doivent être appliquées au premier laboratoire. 

Vous trouverez à la section « Documents utiles » de la page « Références » du site Web du cours le document « Résumé utile pour le premier laboratoire ». Ce dernier vous indiquera les premières étapes à suivre afin de bien débuter votre laboratoire.

2.1 Comparateur de deux mots de N bits (5 pts)

2.1.1 Comparateur 1 bit

Utilisez  une  description  de   type  flux  de  données  (voir  manuel  de   laboratoire)   pour réaliser le comparateur de 1 bit illustré à la figure 1. Celui­ci doit pouvoir se généraliser pour N bits.  Les indices n et n+1 représentent respectivement le résultat du bit courant et le résultat du bit précédent.   Vous aurez à choisir les valeurs à indiquer en entrée pour R=(n+1) et R<(n+1) pour que le circuit se comporte comme un comparateur à 1 seul bit.

• Faites la synthèse complète ainsi que les simulations pré  et post synthèse en prenant soin d’illustrer tous les cas possibles. Utilisez le même banc d’essais pour les deux simulations. L’utilisation du même banc d’essais pour les deux implémentations est un objectif de cet exercice.

• Faites une troisième simulation afin de mettre en relief les délais engendrés par la synthèse. Notez qu’afin de visualiser les délais, il faut faire la simulation en picosecondes (PS).

• À   l’aide de  Design Analyzer  estimez  le  délai  maximal  et   la   surface  utilisée (AREA/TIMING) par le comparateur (voir manuel de laboratoire).

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 3/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

  AB

R = (n+1)R < (n+1)

R = (n)

R < (n)

Figure 1 ­ Schéma logique d’un comparateur

2.1.2 Comparateur de deux mots de N bits

La comparaison de deux mots de N bits se calcule en combinant N modules comme celui réalisé en 2.1.1.  Utilisez la composante réalisée précédemment et une description de type structurelle (voir cahier de laboratoire) pour réaliser une cellule effectuant le calcul de la comparaison de deux mots de N bits. Pour ce faire vous devez utiliser les commandes GENERIC et GENERATE qui vous permettront de générer N comparateurs que vous brancherez correctement pour produire la cellule. Les vecteurs A_in et B_in de largeur N bits sont les seules entrées de la cellule et les bits R_equal_out et R_smaller_out sont les seules sorties de la cellule représentant le résultat de la comparaison. Un banc d’essais devra être réalisé tel qu’illustré à la Figure 2.

Figure 2 ­ Schéma pour le banc d’essais d’un comparateur à N bits

Pour le rapport vous devez produire et remettre : 

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 4/17

  Banc de Test 

A_in         R_equal_out 

B_in            R_smaller_out

                 

Comparateur

à N bits

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

• Les   résultats   d’analyses   de   surface/délais   (TIMING/AREA)   de   la   synthèse complète pour N=4, N=6 et N=8. Pour chaque synthèse, donnez et comparez les résultats.

• Les   résultats   des   simulations   pré   et   post   synthèse   pour   N=6,   en   utilisant uniquement   un   seul   banc   d’essais.   Le   banc   d’essais   doit   prouver   le fonctionnement de votre comparateur pour au moins 6 valeurs. L’affichage en format hexadécimal est demandé.

• Un diagramme temporel de simulation pour N=6 mettant en relief les délais engendrés par la synthèse (il faut faire la simulation en PS).

2.2 Réalisation d’un FIFO (6 pts)

2.2.1 FIFO Buffer

Le FIFO c’est un module qui stocke des mots tels que le premier mot écrit est le premier mot lu. Le Tableau 1 et le Tableau 2 décrivent respectivement les paramètres génériques du module  fifo  et de ses ports. On vous demande de créer un FIFO à l’aide d'un seul processus séquentiel.

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 5/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

Tableau 1. Description des paramètres génériques du multiplexeur : deint_mux

Generic Type  Description

FIFO_DEPTHinteger

Profondeur du FIFO.

FIFO_WORD_WIDTHinteger

Largeur des mots stockés dans le FIFO.

Tableau 2. Description des ports du multiplexeur : deint_mux

Nom du Signal Dir. Taille Description

sys_clk IN 1 bit Horloge active haute du système.

sys_rst_n IN 1 bit Reset asynchrone (actif bas) du système.

push IN 1 bits Envoi d’une opération d’empilement quand push = ‘1’.

pop IN 1 bits Envoi d’une opération de dépilement quand pop = ‘1’.

data_push IN FIFO_WORD_WIDTHdata_push est échantillonné au front montant de clk. Ce vecteur est la donnée à insérer (PUSH) dans le FIFO.

data_pop OUT FIFO_WORD_WIDTH data_pop représente la sortie retirée (POP) du FIFO. 

empty OUT 1 bitempty est actif lorsque le FIFO est vide.  Dès le dépilement du dernier, le signal doit s’activer à ‘1’.

full OUT 1 bitfull est actif lorsque le FIFO est rempli. Dès l’empilement du dernier mot, le signal doit s’activer.

Lorsque le signal push est à ‘1’ et que le FIFO n’est pas plein, alors le mot sera ajouté dans le FIFO. Si c’est la dernière case libre qui a été mise à jour, le signal full sera activé jusqu’au prochain dépilement.

Lorsque le signal pop est à ‘1’ et que le FIFO n’est pas vide, alors le premier mot écrit sera lu et la case correspondante sera libérée. Si c’est la dernière case occupée qui est lue, le signal empty sera activé jusqu’à ce qu’un empilement soit effectué dans le FIFO.

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 6/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

Toutes sorties du  fifo :  data_pop,  full  et  empty, doivent être registrées. Les opérations d’empilement s’effectuent sur 1 cycle d’horloge alors que les dépilements s’effectuent sur 2 cycles d’horloge. Lorsqu’il n’y a pas d’opération POP, la sortie doit être fixée à 0x00000000. 

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 7/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

2.2.2 Réaliser le banc d’essais du FIFO avec lecture dans un fichier

Écrire un banc de test incluant une horloge de période de 100 ns pour vérifier votre FIFO. Celui­ci doit définir les paramètres génériques du FIFO.  Le FIFO doit contenir des mots de 32 bits.  La profondeur du FIFO est fixée à 12 mots avec un paramètre générique.  Le banc d’essais doit faire des écritures au FIFO avec le fichier fourni lab1.dat qui contient 16 mots de 32 bits. Lorsque celui­ci est plein, vous commencerez à faire des lectures en même   temps   que   des   écritures.   Enfin,   lorsqu’il   n’y   a   plus   de   mots   à   écrire,   vous poursuivrez les lectures jusqu'à ce que le FIFO soit vide. Vous devrez écrire les données lues dans un nouveau fichier de sortie. Il vous est également demandé de comparer la sortie réelle à la sortie attendue (contenu du fichier d’entrée fourni) au fur et à mesure que vous effectuez vos lectures des FIFOs. Dans le cas d’une erreur, vous devrez afficher un message d’erreur avec une assertion VHDL. Le banc d’essais est donc auto­vérifiant, un atout important en vérification. Vous avez à  utiliser la librairie  std_logic_textio  de Synopsys pour les commandes d’écriture /   lecture dans un fichier.   Cette librairie est disponible   dans   le   répertoire  « commun »  de   votre   compte.   Vous   devez   copier   le répertoire « textutil »  dans votre répertoire de travail. Vous trouverez en  annexe B  un exemple simple d’écriture et lecture dans un fichier.

Quelques détails

Pour le rapport vous devez produire et remettre :

• L’implémentation matérielle en VHDL du FIFO et  le schéma du circuit après synthèse complète (voir Annexe A).

o Si nécessaire, inclure une vue globale et  vue rapprochée permettant d’identifier les cellules

• Les simulations fonctionnelles et temporelles avant et après synthèse de votre banc d’essais incluant la description faite à la section précédente (voir annexes B et C).  L’affichage doit se faire en hexadécimal.

• Les   résultats   d’analyse   pour   la   surface/délais   (AREA/TIMING)   fournis   par Design Analyzer.

• N’oubliez pas de remettre les codes sources bien identifiés.

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 8/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

2.3  Un mini­bus pour accéder à 2 FIFOs (9 pts) Généralement,   l’accès   à   plusieurs   périphériques   (esclaves)   par   un   module   qu’on nommera le maître est effectué grâce à un bus. Ce dernier est constitué principalement d’un module de contrôle et d’un multiplexeur pour renvoyer les réponses des différentes requêtes de lecture ou d’écriture. Dans cet exercice, nous proposons de développer un mini­bus qui permet d’accéder à deux FIFOs. 

La Figure 3 représente le diagramme bloc de ce mini­bus étendu puisque les esclaves ont été rajoutés dans l’entité du bus.  

clk*rst_n#

addr[2]

data_in[32]

wr_rd[2]

Contrôleur MUX

FIFO_1

FIFO_2

* #

* #* #

data_push_1[32]

data_push_2[32]

push_1 empty_1

data_pop_1[32]

full_1

empty_2

data_pop_2[32]

full_2

data_out[32]

resp

etat

pop_1

push_2

pop_2

Figure 3. Diagramme bloc du mini­bus étendu

Le maître précise l’adresse du FIFO avec lequel il désire effectuer une transaction. Le contrôleur aiguillera la requête vers le bon FIFO. Il se pourrait que le FIFO adressé soit plein si c’est une requête d’écriture ou vide pour une lecture. Selon la requête et le cas d’erreur, le multiplexeur mettra à jour le signal : « resp ». Dans le cas d’une lecture, ce dernier sous­module doit mettre à jour les signaux : « data_out ».

Le Tableau 3 récapitule la description des signaux d’entrée/sortie du mini­bus.

Tableau 3 ­ Entrées et Sorties du mini­bus

Nom du Signal Direction Largeur Description

clk IN 1 bit Horloge active haute du système.

rst_n IN 1 bit Reset asynchrone actif bas du système.

wr_rd IN 2 bits

Ce vecteur sert à indiquer l’opération à effectuer. Le code suivant est utilisé :

00 : Aucune action01 : PUSH data_in dans le FIFO10 : POP une donnée du FIFO vers data_out11 : Aucune action

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 9/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

addr IN 2 bits

Il précise l’adresse du FIFO concerné par la transaction émise:01 : FIFO_110 : FIFO_200 ou 11 : RIEN

data_in IN 32 bits Ce vecteur est la donnée à insérer (PUSH) dans le FIFO.

resp OUT 1 bitIl renvoie le code d’erreur dans le cas où le FIFO concerné par la requête de lecture ou d’écriture est vide ou plein.

data_out OUT 32 bitsIl renvoie la donnée associée à une requête de lecture (POP) précédemment émise.

Dans la suite de cette section, nous allons décrire en détail les fonctionnalités de chaque sous­module du bus.

Contrôleur

Ce contrôleur renferme une machine à états, illustrée par la Figure 4. Il faut préciser que les sorties du contrôleur seront registrées et que la machine à  états devra être de type MEALY. Quelque soit l’état dans lequel le contrôleur se trouve, il doit interrompre tout traitement dès qu’il  voit  que le signal :  « rst_n » est  égal à   ‘0’,  et  se mettre en état : « reset » s’il ne l’est pas déjà. 

Figure 4. Machine à états du contrôleur

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 10/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

Une transition d’un état à un autre est caractérisée par une condition et par l’affection de valeurs aux signaux de sortie. Le Tableau 4 énumère les conditions associées à chaque transition de la machine à états, ainsi que les valeurs affectées aux signaux de sortie du contrôleur.

Tableau 4. Description détaillée des transitions de la machine à états du contrôleurTransition Condition Sorties

État Fifo_1 Fifo_2

T0 rst_n = ‘0’ “000” pop_1 = ‘0’, push_1 = ‘0’data_push_1 = 0x00000000

pop_2 = ‘0’, push_2 = ‘0’data_push_2 = 0x00000000

T1_1 Addr =  “01” ET wr_rd = “01”

“001” pop_1 = ‘0’, push_1 = ‘1’data_push_1 = data_in

pop_2 = ‘0’, push_2 = ‘0’data_push_2 = 0x00000000

T1_2 Aucune “001” pop_1 = ‘0’, push_1 = ‘0’data_push_1 = 0x00000000

pop_2 = ‘0’, push_2 = ‘0’data_push_2 = 0x00000000

T2_1 Addr = “01” ETwr_rd = “10”

“010” pop_1 = ‘1’, push_1 = ‘0’data_push_1 = 0x00000000

pop_2 = ‘0’, push_2 = ‘0’data_push_2 = 0x00000000

T2_2 Aucune “010”pop_1 videotron= ‘0’, push_1 = ‘0’data_push_1  = 0x00000000

pop_2 = ‘0’, push_2 = ‘0’data_push_2  = 0x00000000

T2_3 Aucune “000” pop_1 = ‘0’, push_1 = ‘0’data_push_1 = 0x00000000

pop_2 = ‘0’, push_2 = ‘0’data_push_2  = 0x00000000

T3_1 Addr = “10” ETwr_rd = “01” “011” pop_1 = ‘0’, push_1 = ‘0’

data_push_1 = 0x00000000pop_2 = ‘0’, push_2 = ‘1’data_push_2 = data_in

T3_2 Acune “011” pop_1 = ‘0’, push_1 = ‘0’data_push_1 = 0x00000000

pop_2 = ‘0’, push_2 = ‘0’data_push_2 = 0x00000000

T4_1 Addr = “10” ETwr_rd = “10” “100” pop_1 = ‘0’, push_1 = ‘0’

data_push_1 = 0x00000000pop_2 = ‘1’, push_2 = ‘0’data_push_2 = 0x00000000

T4_2 Aucune “100” pop_1 = ‘0’, push_1 = ‘0’data_push_1 = 0x00000000

pop_2 = ‘0’, push_2 = ‘0’data_push_2 = 0x00000000

T4_3 Aucune “000” pop_1 = ‘0’, push_1 = ‘0’data_push_1 = 0x00000000

pop_2 = ‘0’, push_2 = ‘0’data_push_2 = 0x00000000

T5 rst_n = ‘1’ “000” pop_1 = ‘0’, push_1 = ‘0’data_push_1 = 0x00000000

pop_2 = ‘0’, push_2 = ‘0’data_push_2 = 0x00000000

Il faut préciser que l’implémentation du contrôleur nécessitera 4 processus : un premier pour définir l’état suivant, un second pour registrer cet état, un troisième pour définir les sorties et un dernier qui registrera ces dernières. Vous aurez donc à créer 2 processus combinatoires ainsi que 2 processus séquentiels.

FIFOvideotron

Les développeurs devront réutiliser le design du FIFO générique spécifié à la section 2.2 pour créer les instances des FIFO_1 et FIFO_2. Il faut préciser que la longueur des mots 

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 11/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

« FIFO_WD_WIDTH » sera égale à 32 alors que la profondeur « FIFO_DEPTH » sera égale à 5. 

Multiplexeur

Le   contrôleur   envoie   au   multiplexeur   son   état   de   traitement.   Selon   cet   état,   le multiplexeur mettra à jour les signaux de sortie associés à chaque maître. Le Tableau 5 donne les valeurs des signaux de sortie du multiplexeur selon l’état du contrôleur.

Tableau 5. Valeurs des signaux de sortie du multiplexeur selon l’état donné en entrée

État Valeur Sorties

Reset ‘000’ resp= ‘0’data_out = 0x00000000

Écriture   dans   le FIFO_1 

‘001’ resp = full_1data_out = 0x00000000

Lecture dans le FIFO_1 ‘010’ resp = empty_1data_out = data_pop_1

Écriture   dans   le FIFO_2 

‘011’ resp = full_2data_out = 0x00000000

Lecture dans le FIFO_2 ‘100’ resp = empty_2data_out = data_pop_2

Note : Le signal « état »  qui sert à aiguiller le multiplexeur produira en sortie un bit de réponse (« resp ») valide après la première transition TX_1 du contrôleur. C’est lors de ce cycle qu’on peut évaluer si la requête de lecture/écriture a été acceptée ou non. Dans le cas  d’une   lecture,   il   faudra  un  cycle   supplémentaire   (transition  TX_2)  pour  avoir   la donnée disponible en sortie accompagnée de l’état du bit  « resp » une fois la requête traitée. Le cas d’écriture fournie également la « resp » à la transition TX_2. Il faut donc faire la distinction entre le bit « resp » avant la requête et celui causé par notre requête afin d’utiliser efficacement et correctement les FIFOs.

Travail demandé

Les développeurs devront fournir :

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 12/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

­ Les simulations fonctionnelles et temporelles (pré et post­synthèse). Dans le banc d’essais vous devrez tester les cas suivants : des écritures alternées dans le FIFO_1 et dans le FIFO_2 jusqu’à ce que les FIFOs soient pleins, suivies   de   lectures   successives   sur   les   deux  FIFO   jusqu’à   ce   qu’elles soient vides;

i.e :  on demande de réaliser les écritures en alternant l FIFO de destination à chaque écriture et de réaliser les lectures en vidant la totalité du FIFO 1 pour ensuite vider le FIFO 2.

­ Les délais de traitements du mini­bus ; 

­ Les codes VHDL du testbench et l’entité principale : mini­bus ainsi que ceux de  chaque sous­module  excepté   ceux des  FIFO,  et   le  schéma du circuit après synthèse complète;

­ La réponse a la question;

­ Les résultats d’analyses pour la surface/délais (AREA/TIMING) fournis par Design Analyzer;

2.4 Autres directives2 points pourront être retirés dû à la mauvaise présentation du rapport. Par exemple, un rapport dont les résultats de simulation ne sont pas bien identifiés sera pénalisé.

Le manque de respect des règles de codage « design reuse » peut coûter jusqu’à 2 points.

Vous devez remettre votre rapport le Lundi 2 Octobre 2006 (avant 16h00 au M­5405). Chaque jour ouvrable de retard pour le rapport coûte 2 points, soit 10% du total.

Remarque:

Nous souhaitons avoir vos commentaires sur les difficultés que vous avez rencontrées durant la réalisation de ce laboratoire. Nous sommes particulièrement intéressés par les lacunes pouvant subsister dans la documentation.

Dany Lebel (Chargé de laboratoire)Iliasse Benamrane(Chargé de laboratoire)

Gilbert Kowarzyk (Répétiteur)

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 13/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

Annexe A : Exemple de schéma d’un bloc additionneur 1 bit obetnu avec design_analyzer après synthèse

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 14/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

Annexex B : Exemple de lecture et écriture d’un fichier en VHDL­­ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Title       : Memory test bench­­  Project     : Exemple Lab 1 ELE4304­­ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  File        : test_file.vhd­­  Author      : Dany Lebel­­  Company     : Ecole Polytechnique de Montreal­­  Created     : 2005/08/26­­  Last update : 2005/08/26­­  Platform    : Simulation By Actel ActiveHDL Revision: ???­­                Synthesis By design_vision Version ???­­ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Description : This block is made to test the textutil library.­­ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Copyright (c) 2001 Ecole Polytechnique de Montreal.­­  Confidential and Proprietary Information­­ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Revisions  :­­  Date        Version  Author      Description­­  2002/08/26  1.0      dlebel        Creation of this file­­ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­LIBRARY ieee ;USE ieee.std_logic_1164.all;use std.textio.all;

library textutil;       ­­ Synposys Text I/O packageuse textutil.std_logic_textio.all;

ENTITY test_file ISEND test_file ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ARCHITECTURE test OF test_file IS     signal  test_word_1    : std_logic_vector(31 downto 0);   BEGIN  ­­ architecture

read_write : processfile input_file: text;file output_file: text;variable file_line: line;variable good : boolean;­­status of the readvariable buff : std_logic_vector((31) downto 0);­­buffer variable for the rd/wr

beginwait for 50 ns;

­­ Open the filesfile_open(input_file, "lab1_test.dat", READ_MODE);file_open(output_file, "lab1_test_out.dat", WRITE_MODE);

­­ Read from the input filereadline(input_file, file_line);HREAD(file_line, buff, good);test_word_1 <= buff;

wait for 50 ns;

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 15/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

­­Write to the output filebuff := test_word_1;HWRITE(file_line, buff, RIGHT, 8);­­Write the word buff which is 8 bytes longwriteline(output_file, file_line);

­­ Close the filesfile_close(input_file);file_close(output_file);wait;

end process read_write;END

Annexe C : Exemple du format de présentation des diagrammes temporels d’une simulation fonctionnelle (pré­synthèse)

 

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 16/17

ELE4304 – Principe des Circuits Intégrés à Très Grande Échelle

Annexe D : Exemple d’une capture d’une simulation temporelle post­synthèse

Laboratoire 1 LANGAGE VHDL ET SYNTHÈSE NUMÉRIQUE 17/17