Upload
dangkhanh
View
233
Download
0
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 sousensemble 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 VHDLRTL (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 postsynthè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 cidessus. 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. Celuici 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. Celuici 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 celuici 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 autové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 minibus 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 minibus qui permet d’accéder à deux FIFOs.
La Figure 3 représente le diagramme bloc de ce minibus é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 minibus é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 sousmodule doit mettre à jour les signaux : « data_out ».
Le Tableau 3 récapitule la description des signaux d’entrée/sortie du minibus.
Tableau 3 Entrées et Sorties du minibus
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 sousmodule 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 postsynthè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 minibus ;
Les codes VHDL du testbench et l’entité principale : minibus ainsi que ceux de chaque sousmodule 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 M5405). 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