développement d’une bibliothèque de cellules logiques ... · développement d’une...

85
EPFL MICROELECTRONIC SYSTEMS LABORATORY (LSM) ELD - ECUBLENS CH-1015 LAUSANNE PHONE : +41 21 693 6955 TELEFAX : +41 21 693 6959 PROJET DE SEMESTRE, HIVER 2002-2003 Développement d’une bibliothèque de cellules logiques standard pour une technologie CMOS 0.5 μm Marc Kristol, Electricité sem.7 Superviseur : Alain Vachoux (LSM)

Upload: vudang

Post on 13-Sep-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

EPFL – MICROELECTRONIC SYSTEMS LABORATORY (LSM) ELD - ECUBLENS – CH-1015 LAUSANNE PHONE : +41 21 693 6955 TELEFAX : +41 21 693 6959

PROJET DE SEMESTRE, HIVER 2002-2003

Développement d’une bibliothèque de cellules logiques standard pour une

technologie CMOS 0.5 µm

Marc Kristol, Electricité sem.7

Superviseur : Alain Vachoux (LSM)

Page 2: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 2

Page 3: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

3

TABLES DES MATIÈRES :

1. INTRODUCTION

1.1 Principe de base 1.2 Intervention dans le flot de conception

2. OBJECTIFS DU PROJET

2.1 Contenu d’une bibliothèque 2.2 Flot de développement 2.3 Bibliothèque valide

3. CONTENU D’UNE BIBLIOTHÈQUE

3.1 Vues Layout 3.2 Netlists 3.3 Librairie Synopsys de symboles 3.4 Librairie Synopsys 3.5 Modèles VHDL 3.6 Modèles verilog 3.7 Stubs verilog 3.8 Vues Cadence placement et routage 3.9 Timing Cadence placement et routage

4. FLOT DE DÉVELOPPEMENT

4.1 Condition de caractérisation 4.2 Caractérisation 4.3 Génération des modèles VHDL 4.4 Validation de la librairie Synopsys 4.5 Génération des stubs verilog 4.6 Vues et timing placement et routage

5. CARACTÉRISATION AVEC APTIVIA/DCM

5.1 Procédure d’utilisation du logiciel 5.2 Choix des paramètres de caractérisation 5.3 Génération de la librairie Synopsys

6. LIBRARY COMPILER

6.1 Compilation de la librairie Synopsys 6.2 Génération des modèles VHDL

Page 4: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 4

7. VALIDATIONS

7.1 Validation de la caractérisation 7.2 Validation des cellules par testbenchs 7.3 Validation par synthèse

8. TRAVAILS FUTURS

9. RÉFÉRENCES

10. ANNEXES

A. Datasheets B. Script de correction de la librairie Synopsys C. Librairie Synopsys D. Stubs E. Modèles VHDL des circuits de synthèse F. Scripts de synthèse pour Design Vision

Page 5: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

5

LISTES DES FIGURES : Fig 1.1 : Exemple de circuit composé d’alignements de cellules standards Fig 1.2 : Flot de conception basé sur VHDL Fig 3.1 : Exemple de symbole de cellule logique (NAND à 2 entrées) Fig 4.1 : Flot de développement de la bibliothèque BadBoy05 Fig 5.1 : Environnement de travail du logiciel Aptivia/DCM Fig 5.2 : Création d’un nouveau projet Fig 5.3 : Génération du setup Fig 5.4 : Onglet Design du setup Fig 5.5 : Includes du setup Fig 5.6 : Onglet Function du setup Fig 5.7 : Onglet verilog-AMS du setup Fig 5.8 : Onglet Synopsys du setup Fig 5.9 : Onglet Sweeps du setup Fig 5.10 : Onglet options du setup Fig 5.11 : Contenu du projet après génération des fichiers Fig 5.12 : Délai de la NAND2 en fonction de la pente d’entrée pour une capacité de 0fF Fig 5.13 : Délai de la NAND2 avec six points de mesure Fig 5.14 : Problème de résolution numérique Fig 5.15 : Génération d’une librairie unique Tableau 7.1 : Validation de la cellule NAND2_1 Tableau 7.2 : Validation de la cellule DFF_BASIC Fig 7.3 : Contrainte de surface minimum Fig 7.4 : sélection des pins de sortie Fig 7.5 : Contrainte sur les délais Fig 7.6 : Attribution d’un signal d’horloge Fig 7.7 : Fenêtre d’optimisation Fig 7.8 : Optimisation de l’ALU en surface avec le chemin critique Tableau 7.9 : Comparaisons des résultats de synthèse Tableau 7.10 : Résultats complets de la synthèse

Page 6: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 6

1. INTRODUCTION Les bibliothèques de cellules standards font parties des nombreuses techniques de conception de circuits intégrés au même titre que des méthodes telles que FPGA, Gate Array ou encore Full Custom. 1.1 Principe de base Le principe de base d’une telle bibliothèque est de disposer d’une série de petits circuits effectuant chacun une fonction logique basique. Chacun de ces circuits est dimensionné de façon à avoir des caractéristiques géométriques communes avec les autres circuits de la bibliothèque. En général ces caractéristiques communes sont la largeur et la position des lignes d’alimentation. Cela permet de les assembler telle un lego en de longues lignes de cellules ayant la même ligne d’alimentation lors de la conception d’un système intégré.

Fig 1.1 – Exemple de circuit composé d’alignements de cellules standards 1.2 Intervention dans le flot de conception Les bibliothèques de cellules standards interviennent à différents niveaux de conception d’un circuit intégré. Par exemple dans un flot de conception basé sur VHDL, le premier niveau est lors de la synthèse VHDL où le modèle du circuit fait directement appelle à l’architecture comportementale des cellules (fig 1.2). La bibliothèque est aussi utilisée lors de la simulation pour les mêmes raisons. Le dernier niveau d’intervention est le niveau layout. Etant donné que les layouts des cellules sont disponibles dans la bibliothèque, ils sont alors utilisés pour faire le layout du circuit en les assemblant par lignes et ensuite en réalisant les interconnections entre cellules.

Page 7: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

7

Fig 1.2 – Flot de conception basé sur VHDL

Page 8: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 8

2. OBJECTIFS DU PROJET Ce projet ne démarre pas en partant de nulle part. Il s’inscrit dans la continuité d’un projet précédent effectué au Worcester Polytechnic Institute [1] dont l’objectif était justement la création d’une bibliothèque de cellules standard nommée BadBoy05. Il avait été développé en particulier les vues layout, les descriptions schématiques, les caractérisations des cellules ainsi que la librairie Synopsys (voir chapitre 3). L’idée est d’utiliser ces éléments pour continuer le développement. 2.1 Contenu d’une bibliothèque Le premier objectif du projet est de comprendre les éléments constituant une bibliothèque de cellules logiques standard, en particulier de savoir quels sont les éléments essentiels et quelle est l’utilité de chacun de ces éléments. 2.2 Flot de développement L’objectif suivant est d’expérimenter le flot de développement d’une bibliothèque. C’est-à-dire étudier quelles sont les façons de générer les différents éléments constitutifs, quels sont les outils nécessaires à cela et quels sont les moyens de valider les résultats obtenus. 2.3 Bibliothèque valide Finalement le dernier objectif est évidemment d’obtenir une bibliothèque qui puisse être utilisable pour le développement de projet de conception de systèmes logiques. C’est dans ce but que sont repris les éléments du projet précédent. La première partie constituera à recaractériser les cellules de façon plus complète et de regénérer la librairie Synopsys à l’aide d’un logiciel adapté. Dans un second temps, il faudra alors valider la librairie obtenue en comparant les résultats obtenus avec les résultats précédents ainsi que d’effectuer des cas tests de synthèse VHDL. La dernière partie sera de reprendre les layout des cellules afin de générer les vues pour le placement et routage et en extraire les délais. Puis valider ces vues avec des cas tests VHDL. [1] « Standard Cell Library Blocks Design and Evaluation » A Major Thesis of the Worcester Polytechnic Institute by Samuel R. Girgis and Carl F. Nielsen Jr. (April 2000)

Page 9: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

9

3. CONTENU D’UNE BIBLIOTHÈQUE Une bibliothèque comporte différents éléments qui interviennent à différents niveaux de la conception des circuits. L’énumération de ces éléments se fait ci-dessous avec l’explication de leur utilité. 3.1 Vues Layout Les vues layout proviennent de l’ancien projet. Elles correspondent à la vue physique du circuit intégré des cellules et elles sont directement utilisées pour le développement des différents masques de fabrication. Ces vues sont utilisées dans la conception de la libraire pour générer les vues de placement et routage (Chapitre 3.8). Elles sont reconnaissables par l’extension de fichier « .gds » . 3.2 Netlists Les fichiers netlists proviennent également du projet précédent. Les netlists comportent la description du comportement des cellules. Elles peuvent être de deux types différents : schématique ou extraite. La netlist schématique est tirée de la vue schématique des transistors du circuit. Elle tient compte donc que des caractéristiques intrinsèques du transistor (délai, capacité des pins). La netlist extraite est tirée de la vue layout. Elle tient compte alors, en plus des caractéristiques du circuit, des effets parasites comme les capacités parasites. Elle est de ce fait plus proche de la réalité du circuit physique. L’extension informatique des netlists est « .sp » . 3.3 Librairie Synopsys de symboles La librairie des symboles contient la description graphique des symboles logiques des cellules de la bibliothèque. Elle est utilisée lors de la synthèse de circuit pour générer une vue schématique du circuit en portes logiques. La librairie utilisée pour ce projet a été construite à partir des symboles de la bibliothèque AVx. Son extension est « .slib », et « .sdb » pour la version binaire.

Fig 3.1 – Exemple de symbole de cellule logique (NAND à 2 entrées)

Page 10: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 10

3.4 Librairie Synopsys La librairie Synopsys contient toutes les informations issues de la caractérisation de chaque cellule. Elle est particulièrement importante dans le flot de développement car c’est à partir d’elle que quasiment tout le reste de la bibliothèque peut être généré. La librairie Synopsys possède l’extension « .lib » ou « .db » dans sa version binaire. 3.5 Modèles VHDL Les fichiers VHDL contiennent les modèles comportementaux des cellules en langage VHDL. Ils sont générés à partir des informations contenues dans la librairie Synopsys. L’extension VHDL est « .vhd ». Pour ce projet, les modèles VHDL ont été générés avec l’architecture VITAL. Cette architecture utilise trois fichiers : Le fichier VITAL.vhd contient les architectures comportementales des cellules, le fichier COMPONENTS.vhd contient la définition des composants, c’est-à-dire des cellules ( définition des entrées, des sorties…) et le fichiers TABLES.vhd contient des tables avec les contraintes sur les délais des cellules. 3.6 Modèles verilog Les fichiers verilog contiennent la description comportementale des cellules dans le langage verilog. On les reconnaît par l’extension « .v ». 3.7 Stubs verilog Les stubs sont les définitions des entrées et sorties des cellules en langage verilog. On les trouve également dans les modèles verilog. L’extension est la même que celles des modèles verilog. 3.8 Vues Cadence placement et routage Les vues pour le placement et routage sont en fait des vues layout abstraites. C’est-à-dire que seule la position des pins de connexion (entrées, sorties, alimentation) sont visibles. De plus il peut être indiqué les zones de la cellule qui n’acceptent pas le passage de lignes d’interconnexion. Ces vues sont reconnaissables par l’extension « .lef » . 3.9 Timing Cadence placement et routage Les vues timing contiennent les temps de propagation des layout Elles se distinguent par l’extension « .tlf » ou « .ctlf » pour les versions compilées.

Page 11: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

11

4. FLOT DE DÉVELOPPEMENT La première partie de la conception d’une bibliothèque est de déterminer un flot de développement des différents éléments constituants. Celui-ci s’impose relativement naturellement par le fait que certains éléments sont générés à partir d’autres.

Fig 4.1 – Flot de développement de la bibliothèque BadBoy05 4 .1 Conditions de caractérisation Comme cette bibliothèque a déjà été générée en partie lors du projet précédent, certaines conditions du flot sont déjà imposées. La bibliothèque est constituée de 39 cellules logiques :

- And à 2,3 et 4 entrées (AND2_1, AND3_1, AND4_1) - Nand à 2,3 et 4 entrées (NAND2_1, NAND3_1, NAND4_1) - Or à 2,3 et 4 entrées (OR2_1, OR3_1, OR4_1) - Nor à 2,3 et 4 entrées (NOR2_1, NOR3_1, NOR4_1) - Xor à 2 entrées (XOR2_1) - Xnor à 2 entrées (XNOR2_1) - Inverseur (INV_1) - Inverseur avec un demi drive (INV_HALF)

Page 12: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 12

- Buffer (BUF_1) - And-Or à 3 et 4 entrées (AO21, AO22) - And-Or-Inv à 3 et 4 entrées (AOI21, AOI22) - Or-And à 3 et 4 entrées (OA21, OA22) - Or-And-Inv à 3 et 4 entrées (OAI21, OAI22) - Multiplexeur à 2 et 4 entrées (MUX2_1, MUX4_1) - Flip-Flop D (DFF_BASIC) - Flip-Flop D avec reset (DFF_CLR) - Flip-Flop D avec set (DFF_PRE) - Flip-Flop D avec set et reset (DFF_CLR_PRE) - Latch D (DLATCH_BASIC) - Latch D avec reset (DLATCH_CLR) - Latch D avec set (DLATCH_PRE) - Latch D avec set et reset (DLATCH_CLR_PRE) - Buffer tri-state niveau haut (TRIBUF_1_H) - Buffer tri-state niveau bas (TRIBUF_1_L) - Inverseur tri-state niveau haut (TRINV_1_H) - Inverseur tri-state niveau bas (TRINV_1_L)

La technologie transistor utilisée est celle du fabricant HP AMOS14TB en 0,5 µm avec une alimentation de 3,3 V. La caractérisation n’avait été faite que dans un cas de conditions typiques (TYPICAL CASE : température 27°C, alimentation 3,3V). Elle a donc été aussi faite pour des conditions optimales (BEST CASE : température 0°C, alimentation 3,63 V) et des conditions mauvaises (WORST CASE : température 100°C, alimentation 2,97 V) en plus des conditions typiques. La caractérisation se fait à partir de deux autres paramètres importants en plus de la température et de la tension d’alimentation: la pente du signal d’entrée et la charge en sortie. Des valeurs entre 0,1 ns et 1 ns ont été prises pour la pente d’entrée et des valeurs entre 0 et 500fF pour la charge en sortie ce qui devrait suffire pour pouvoir mettre un maximum de cinq portes sur une sortie. 4.2 Caractérisation La caractérisation des cellules est faite avec le logiciel Aptivia/DCM de Antrim Design System. Il utilise le modèle du transistor, les netlists ainsi que les conditions qui ont été choisies pour générer la librairie Synopsys et les modèles verilog. L’utilisation du logiciel est décrite dans le chapitre 5. Les netlists utilisées ici sont de type schématique. La caractérisation consiste par simulation à déterminer la capacité de chacun des pins d’entrées des cellules, le délai de propagation entre chaque pin d’entrée et de sortie, le temps de transition du signal en sortie pour chaque trajet de propagation, la consommation lors des transitions et la consommation de la cellule au repos (dû aux courants de fuite) en fonction des paramètres cités ci-dessus.

Page 13: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

13

4.3 Génération des modèles VHDL Les modèles VHDL des cellules sont générés à partir de la librairie Synopsys et de la librairie de symboles par le logiciel Library Compiler de Synopsys. Ce logiciel permet aussi d’obtenir les versions compilées de la librairie Synopsys et de la librairie de symboles ainsi que des testbenchs pour chaque cellule. La procédure d’utilisation se trouve dans le chapitre 6. 4.4 Validation de la librairie Synopsys La première validation est de comparer les résultats de la caractérisation avec les anciens résultats, c’est-à-dire de voir si les délais de propagation et les capacités d’entrée des pins ont le même ordre de grandeur. Dans un second temps, après avoir compilé la librairie Synopsys, on effectue des testes de synthèse VHDL utilisant la bibliothèque. Ces testes sont effectués sur un additionneur un bit (ONEBIT), sur un additionneur 8 bits (ADDER8), sur une ALU et sur un circuit nommé ISP. Dans le but de pouvoir de nouveau comparer les résultats avec ceux du précédent projet, on utilise les codes VHDL de ces circuits réalisés lors dudit projet. Cette synthèse est réalisée à l’aide du logiciel Design Vision de Synopsys. Finalement, à l’aide des testbenchs des cellules générés par Library Compiler, une validation du comportement des cellules est également effectuée. Le détail de toute la validation se trouve dans le chapitre 7. 4.5 Génération des stubs verilog Les modules stubs sont obtenus à partir des modèles verilog. Les modèles verilog sont composés de deux parties. La première correspond à la liste des pins de la cellule, la seconde à l’architecture comportementale. Les stubs correspondent à la première partie du modèle. Il suffit donc de prendre les stubs de toutes les cellules et de les mettre dans un seul fichier. Il est possible de faire un script qui extrait les modules et crée le fichier stubs. Cependant le fichier stubs a été créé ici manuellement par copier-coller. 4.6 Vues et timing placement et routage Les vues placement et routage sont générées à partir du layout des cellules à l’aide du logiciel Autoabgen de Cadence. Les vues timing placement et routage sont générées avec le logiciel Tlfgen de Cadence à partir de la librairie Synopsys. Malheureusement, le manque de temps et des problèmes de lecture des layout par Autoabgen n’auront pas permis d’effectuer cette partie du projet jusqu’au bout. Evidemment, les méthodes de validation des vues et timing placement et routage n’ont également pas pu être explorées.

Page 14: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 14

5. CARACTÉRISATION AVEC APTIVIA/DCM La procédure de caractérisation est presque la même pour toutes les cellules. C’est pourquoi le déroulement est expliqué ici par un exemple, en l’occurrence celui de la cellule NAND à 2 entrées. 5.1 Procédure d’utilisation du logiciel La première chose à faire est de créer un nouvel espace de travail (workspace). Le logiciel ouvre automatiquement une fenêtre où il faut choisir entre un workspace récent ou en créer un nouveau.

Fig 5.1 – Environnement de travail du logiciel Aptivia/DCM

Ensuite, il faut créer un projet. Chaque projet correspond à une cellule. Le plus directe pour créer un nouveau projet est de faire un clique-droit sur le workspace et de sélectionner « create new project ». Une boite de dialogue s’ouvre. Elle propose de baser le projet sur un projet existant ou un exemple ce qu’il faut refuser. Puis il faut entrer la position du répertoire de travail du projet ainsi que le nom que l’on donne au projet (en l’occurrence le nom de la cellule). On peut également donner une description, mais cela n’est pas forcément nécessaire.

Page 15: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

15

Fig 5.2 – Création d’un nouveau projet Une fois cela de fait, le logiciel crée une série de répertoires vides visibles dans l’environnement de travail.

- Documents : contient les informations liées au projet - Tests : contient les procédures de tests de timing et de capacité - Sweeps/corners : contient les procédures pour les sweeps - Spec sheets : contient les éléments pour la vérification verilog (pas utilisé ici) - Model calibrations : contient les éléments de calibration pour verilog-AMS (pas utilisé

ici) - Model generators : contient le setup de génération du projet - Optimizations : contient les éléments d’optimisation (pas utilisé ici) - Plans : contient les scripts permettant de lancer la caractérisation

Il faut donc maintenant générer tous les fichiers liés à une cellule et entrer les conditions de caractérisation. Toute la procédure se fait avec un setup. Pour cela il faut faire un clique-droit sur le dossier « Model generators » et sélectionner « New model setup ». Dans le générateur de setup qui apparaît, il faut entrer un nom et indiquer que les tests sont basés sur la netlist.

Fig 5.3 – Génération du setup

Page 16: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 16

Après avoir fait « OK », le setup s’ouvre. Dans celui-ci, il faut compléter tous les onglets présents. Dans premier onglet « Design » (Fig 5.3), on doit indiquer le lien vers la netlist de la cellule. Normalement une fois celui-ci entrée, le logiciel détecte automatiquement le nom et les pins de la cellule.

Fig 5.4 – Onglet Design du setup En cliquant sur « Create base test », une nouvelle fenêtre s’ouvre qui contient quatre zones de saisi et en particulier une zone « SPICE includes » où il faut saisir le lien vers le modèle du transistor. Il est même possible en allant dans « Templates » de faire la même chose en créant un « Base Test » qui sera alors repris par tous les autres projets créés par la suite.

Page 17: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

17

Fig 5.5 – Includes du setup L’onglet suivant « Function » permet de définir la fonction logique de la cellule ainsi que la définition des pins. Normalement le logiciel a déjà trouvé les correspondances, mais il est bon de vérifier. Pour le pin d’alimentation, il faut indiquer la tension d’alimentation.

Fig 5.6 – Onglet Function du setup

Page 18: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 18

Dans l’onglet « Create », il faut sélectionner les modèles à générer. Il y a quatre choix :

- Characterization - Verilog-AMS model - Verilog-D model - Synopsys model

Pour ce projet, les quatre ont été sélectionnés. L’onglet « Verilog-AMS » permet de définir des tableaux de résultats pour la caractérisation des délais (timing) et de la capacité d’entrée (Input capacitance). Dans les deux cas des tables en trois dimensions ont été choisi, avec des résultats en fonction de la pente d’entrée (Input slope) et de la capacité en sortie (Load capacitance). Les deux options possibles à savoir « Calibrate » et « Verify » ont aussi été sélectionné. (la Fig 5.7 ne correspond pas à ce qui a été fait)

Fig 5.7 – Onglet verilog-AMS du setup Dans verilogD, rien n’est à modifier. Il faut vérifier que l’option « Calibrate » est bien activée. L’onglet « Synopsys » permet de sélectionner toutes les caractérisations voulues, tant au niveau timing qu’au niveau capacité ou encore, pour certaines cellules comme les flip-flop, au niveau contraintes. Si on veut aussi avoir les caractérisations de consommation, il faut sélectionner l’option « Timing and power ». Un champ d’écriture permet d’inscrire la surface de la cellule pour y être inséré dans le fichier librairie Synopsys.

Page 19: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

19

Fig 5.8 – Onglet Synopsys du setup L’onglet « Defaults » correspond au valeur typique de caractérisation. En particulier on peut préciser la température à 27°C, la pente d’entrée à 0,1 ns ou encore la capacité en sortie à 200fF. Mais comme la caractérisation permet de connaître la réponse de la cellule pour n’importe quelles valeurs, l’importance de cet onglet est très relative. L’onglet « Sweeps » est très important. Une des principales questions à se poser avant de faire une caractérisation est quel niveau de caractérisation on veut atteindre. Les sweeps servent à caractériser une cellule en faisant varier un paramètre. Par exemple, on peut déterminer le délai de propagation en fonction d’une température allant de 0 à 100°C par pas de 10°C, mais on peut aussi choisir un pas de 20°C. Le choix de la valeur des paramètres est décrite dans le chapitre 5.2. L’option « sweep run » qui se trouve en bas permet de choisir de faire la caractérisation entière (avec toutes les valeurs choisies) ou avec seulement les valeurs minimum, typique et maximum. La seconde caractérisation qui est très rapide permet juste de vérifier que tout se passe bien dans un premier temps avant d’effectuer la caractérisation complète.

Page 20: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 20

Fig 5.9 – Onglet Sweeps du setup Le dernier onglet contient les préférences de simulation. Il est important de sélectionner l’option « Keep RAW files » pour conserver les données de simulation. Dans le cas d’une grande cellule comme les cellules à quatre entrées et si plusieurs ordinateurs sont disponibles, il est possible de sélectionner l’option « Distribute plan simulation » afin d’augmenter la rapidité.

Fig 5.10 – Onglet options du setup Une fois que tous cela est fait, on clique sur « Generate » ou sur « Generate and run ». La différence est que la première solution ne fait que générer tous les fichiers alors que la seconde génère les fichiers et lance immédiatement la caractérisation de la cellule.

Page 21: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

21

Fig 5.11 – Contenu du projet après génération des fichiers Les résultats de la caractérisation peuvent être visualisé en ouvrant le fichier sweep. Dans l’onglet « results » et en faisant « plot », on obtient une liste des graphes de mesures. 5.2 Choix des paramètres de caractérisation Le choix des paramètres des sweeps dépend du niveau de précision que l’on veut. Si les courbes de caractérisation sont peu linéaire, il faut alors prendre plus de point afin d’être le plus précis possibles. Le problème est que si on prend trop de point, on obtient alors des matrices de caractérisation dans la librairie Synopsys qui sont gigantesques. On s’est alors limité à un maximum de six points par paramètre pour la pente d’entrée et la capacité de charge en sortie. Pour les paramètres de température et de tenson d’alimentation, rien n’a été touché car ils correspondaient bien à ce qui était voulu. La température varie de 0 à 100°C par pas de 10°C et la tension d’alimentation varie entre 90% et 110% de sa valeur nominale par pas de 0,1 V. Pour la pente d’entrée et la capacité de charge, il a d’abord été effectué une caractérisation très précise avec beaucoup de points dans le but de vérifier la linéarité des courbes. On a fait varier la pente d’entrée de 0,1 ns à 1 ns par pas de 0,05 ns et la capacité de charge de 0

Page 22: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 22

à 500fF par pas de 20fF. Cette caractérisation a été faite pour deux cellules dites de référence à savoir la NAND à 2 entrées et la Flip-flop basique, qui permette d’extrapoler les comportements des autres cellules.

Fig 5.12 – Délai de la NAND2 en fonction de la pente d’entrée pour une capacité de 0fF Si la courbe de délai en fonction de la capacité de charge s’est révélé bien linéaire, il en a été autrement pour celle en fonction de la pente d’entrée (Fig 5.12). Même si cela n’est pas catastrophique, il vaut mieux dans ce cas prendre un pas irrégulier. Après avoir relevé six valeurs par courbe et cela pour chaque courbe correspondant à une valeur de capacité de charge donnée de la cellule NAND2_1 et de la cellule DFF_BASIC, les six valeurs apparaissant le plus souvent ont été choisies comme paramètre de la pente d’entrée. Ces valeurs sont : 0,1 ns, 0,2 ns, 0,3 ns, 0,5 ns, 0,8 ns et 1ns. Afin d’avoir le même nombre de valeurs pour la capacité de charge, les valeurs 0, 100fF, 200fF, 300fF, 400fF et 500fF ont été choisi pour cette dernière.

Page 23: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

23

Fig 5.13 – Délai de la NAND2 avec six points de mesure La caractérisation précise a également permis de détecter un problème dans le degré de résolution des simulations. Les courbes de délai de la Flip-flop basique étaient très perturbé et de ce fait n’était pas caractérisable avec seulement six points. Mais en augmentant le degré de résolution, le phénomène a disparu. Cela est peut-être dû à des erreurs d’arrondies de numérisation.

Fig 5.14 – Problème de résolution numérique Le niveau de résolution peut être modifié en ouvrant le fichier de test timing (Fig 5.11). Une option avec un curseur pouvant varier entre –4 et +4 définie le niveau de résolution. Il est par défaut sur 0, pour corriger le problème il a été mis sur 3 ce qui semblait suffisant. Plus le degré de résolution est élevé, plus la simulation prend de temps.

Page 24: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 24

5.3 Génération de la librairie Synopsys Lors de la caractérisation, le logiciel génère un fichier librairie pour chaque cellule. Il existe cependant une commande permettant de rassembler tout ces fichier en un seul. Cette commande se trouve dans le menu « tools » du setup de chaque cellule. Il reste alors à entrer le nom du fichier unique et le nom de la librairie.

Fig 5.15 – Génération d’une librairie unique

Page 25: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

25

6. LIBRARY COMPILER Le logiciel Library Compiler existe dans une version graphique. Cependant c’est via un terminal qu’il a été utilisé. Il se lance avec la commande suivante au niveau du répertoire du travail. >lc_shell 6.1 Compilation de la librairie Synopsys Pour compiler la libraire dans sa version binaire « .db » il faut d’abord la faire lire par le logiciel : >read_lib BadBoy05.lib Il se peut qu’un certain nombre de messages tels des warnings ou des errors soient alors affichés. Dans le cas d’errors, la librairie ne peut pas être compilée. Pour la Librairie BadBoy05.lib généré par Aptivia/DCM se fut le cas. Il a alors fallu la corriger avec un script (annexe B). La librairie Synopsys contient au début une série de templates. Dans le cas de la librairie BadBOy05, certain de ces templates étaient présents en double. Le script permet alors de supprimer les templates en trop. Un autre problème était que pour les cellules NAND 2_1, NAND3_1, NAND4_1, XOR 2_1 et XNOR2_1 le nom de la librairie était devenu nBadBoy05 ou xBadBoy05. Cela est également corrigé par le script. Le dernier problème survenu est dû au fonctionnement des cellules tri-state. Lors d’une transition du signal sur le pin de sélection (SEL) qui provoque un état de haute-impédance en sortie, il n’y a pas eu de caractérisation effectuée car la sortie ne varie pas entre 0 et 1 ou vice-versa. Pourtant le logiciel s’attend trouver des matrices de délais et de temps de transition. Il a été rajouté manuellement les éléments suivant pour remplacer ces matrices : rise_transition (scalar) {

Values(“ 0.0 “) ; }

fall_transition (scalar) {

Values(“ 0.0 “) ; }

Une fois ces problèmes corrigés, la compilation s’effectue avec la commande suivante : >write_lib BadBoy05 –o bb05.db D’autres commandes peuvent être utiles. >report_lib BadBoy05 Cette commande permet d’avoir un rapport sur la lecture. En particulier elle permet de voir si toutes les cellules ont été repérés.

Page 26: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 26

Si des problèmes de conflit entre librairies apparaissent il est possibles de commencer la procédure par la commande suivante avant d’effectuer la lecture : >remove_lib La librairie de symboles se compile selon le même processus. 6.2 Génération des modèles VHDL La génération des modèles VHDL s’effectue avec la procédure suivante : >read_lib BadBoy05.lib >vhdllib_architecture = VITAL >write_lib –f vhdl BadBoy05 La première ligne fait une lecture de la librairie. La seconde permet de choisir le style d’architecture. Une des architectures les plus courantes est VITAL. La troisième ligne génère les trois fichiers VHDL :

- BadBoy05_VITAL.vhd - BadBoy05_Vcomponents.vhd - BadBoy05_Vtables.vhd

Il est également possible de générer des testbenchs de validation des cellules. La procédure est la suivante : >read_lib BadBoy05.lib >vhdllib_architecture = VITAL >vhdllib_tb_x_eq_dontcare = false >vhdllib_tb_compare = 5 >write_lib –f vhdl BadBoy05 Il est à noter que les modèles VHDL sont également généré avec cette procédure. La commande de la troisième ligne sert à définir si on désire que l’état x corresponde à un état « Don’t care ». La commande de la quatrième ligne permet de choisir le niveau de vérification, 0 étant le niveau sans vérification et 5 le plus élevé. L’utilisation des testbenchs est commentée dans le chapitre 7.

Page 27: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

27

7. VALIDATIONS La validation des résultats est une partie importante du flot de développement. Sans validation, on ne peut jamais être certain que les résultats obtenus sont corrects. Une première vérification est faite en voyant si les fichiers générés sont acceptés par les logiciels qui les utilisent ensuite. C’est une vérification syntaxique, mais qui ne permet pas de dire si le contenu est juste. Avec la validation par des tests, on peut très vite dire si les résultats obtenus ne sont pas aberrants. De plus, comme on dispose des résultats du projet précédent, on peut également faire une validation par comparaison. 7.1 Validation de la caractérisation La caractérisation est justement validée par comparaison. Dans l’ensemble, les valeurs de délais et pente de sortie sont du même ordre. On compare en particulier les délais de propagation et les temps de transition pour des capacité de charges de 200 fF et 400 fF. On compare également les capacités des pins d’entrées. Les petites différences sont dues au faites que la caractérisation n’a pas été faite avec les mêmes outils et de la même manière. De plus, les anciens résultats ne comprennent que les valeurs des cas les plus mauvais possible, alors qu’ici on a les valeurs de toutes les combinaisons possibles de trajets entre les entrées et sorties.

delay-rise delay-fall output slope-rise output slope-fall 200fF 400fF 200fF 400fF 200fF 400fF 200fF 400fF

BadBoy05 403 ps 637 ps 415 ps 681 ps 686 ps 1,2 ns 715 ps 1,3 ns Version 2003

Ain->Qout 337,5 ps 575,2 ps 376,5 ps 646,6 ps 711,1 ps 1315,2 ps 776,7 ps 1421,3 ps Bin->Qout 361,0 ps 597,0 ps 383,5 ps 654,2 ps 757,8 ps 1348,9 ps 776,9 ps 1422,4 ps

Capacité Ain Bin

BadBoy05 31,88 fF 31,90 fF Version 2003 28,29 fF 28,33 fF

Tableau 7.1 – Validation de la cellule NAND2_1

delay-rise delay-fall output slope-rise output slope-fall

CLK->Qout 200fF 400fF 200fF 400fF 200fF 400fF 200fF 400fF BadBoy05 918 ps 1,0 ns 1,0 ns 1,2 ns 342 ps 580 ps 338 ps 573 ps

Version 2003 885,8 ps 1002,2 ps 1249,9 ps 1376,8 ps 407,7 ps 661,1 ps 404,9 ps 663,5 ps CLK->Q'out BadBoy05 869 ps 998 ps 805 ps 998 ps 410 ps 641 ps 368 ps 607 ps

Version 2003 953,8 ps 1086,9 ps 675,9 ps 819,4 ps 474,8 ps 732,4 ps 436,5 ps 702,1 ps Capacité Din CLK

BadBoy05 47,57 fF 53,39 fF Version 2003 51,46 fF 53,55 fF

Tableau 7.2 – Validation de la cellule DFF_BASIC

Page 28: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 28

Dans les deux cas test ci-dessus (tableau 7.1 et 7.2), les différences de temps entre les deux caractérisations sont presque toutes inférieures à 100 ps. Pour les capacités d’entrées, les différences sont de l’ordre de 5fF au maximum. Les résultats complets de validation de la caractérisation se trouvent en annexe (annexe A). 7.2 Validation des cellules par testbench Les fichiers générés par Library Compiler comprennent un fichier testbench VHDL, un fichier de signaux général pour la simulation, un script qui génère les fichiers de signaux pour chaque cellule et un script qui permet de faire la validation. Malheureusement la validation effectuée par ce script donne des résultats négatifs. La tentative pour comprendre si les testbench étaient bons avec un debugger a révélé qu’apparemment les signaux qui sortent des cellules sont bons, mais la vérification avec des signaux théoriques ne passait pas. Par manque de temps il n’a pas été possible de vérifier plus loin et de corriger les problèmes. Mais, il semble malgré tout que les cellules de la bibliothèque fonctionnent correctement. 7.3 Validation par synthèse La validation par synthèse est faite à l’aide de quatre circuits provenant du projet initial. Il s’agit un additionneur un bit (ONEBIT), d’un additionneur huit bits (ADDER8), d’une unité arithmétique et logique (ALU) et d’un ISP. La synthèse de ces circuits est faite avec deux optimisations différentes : l’optimisation en surface et celle en délai. Dans le but de correspondre à la dernière version du langage VHDL, les codes ont été un peu modifiés. Les packages std_logic_arith et std_logic_unsigned ont été remplacés par le package numérique_std. Cela implique de changer tous les signaux ou variables de type std_logic_vecteur par le type unsigned (annexe E). Après avoir au préalable définit dans le fichier de setup du logiciel Design Vision qu’il doit utiliser la librairie Synopsys et la librairie des symboles (les versions compilées), la première étape est le lui faire analyser le modèle VHDL. Cela se fait en allant sur « Analyze file » dans le menu « File ». Une fois là, il suffit d’entrer le lien vers le modèle voulu. L’étape suivante est de faire une première élaboration du circuit. On trouve cela également dans le menu « File » sous « Elaborate Design ». Une première visualisation du circuit apparaît, mais sans aucune optimisation. Pour appliquer une contrainte de surface minimum, il faut aller dans le menu « Attributes » dans « Optimization Constraints, puis dans « Design contraints ». Dans la fenêtre qui s’ouvre (Fig 7.3), il suffit seulement de mettre dans le champ « Max area » la valeur 0.

Page 29: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

29

Fig 7.3 – Contrainte de surface minimum Pour imposer une contrainte de délai minimum il faut au préalable sélectionner tous les pins de sortie du circuit. Une fois cela fait, le chemin est le même : « Attributes » -> « Optimization contraints » -> « Timing contraints ».

Fig 7.4 – sélection des pins de sortie Dans ce projet, la contrainte mise sur les délais a été mise à 0. Mais il est possible que pour des circuits plus complexes, le simulateur n’arrive pas résoudre le problème et finissent par tourner indéfiniment.

Page 30: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 30

Fig 7.5 – Contrainte sur les délais Pour le circuit ISP qui possède un signal d’horloge, la contrainte sur le délai est un peu différente. Il faut sélectionner le pin d’horloge. Puis, en allant dans le menu « attributes » dans « Clocks » et « Specify », on peut alors spécifier la durée d’une période d’horloge. L’optimisation se fait alors par essai successif en diminuant à chaque fois la période jusqu’à trouver la période minimal pour laquelle les délais internes du circuit sont respectés.

Fig 7.6 – Attribution d’un signal d’horloge Les deux contraintes ne sont jamais imposées en même temps. Soit on fait une optimisation en surface ou soit on la fait en délai. Après avoir imposé la contrainte voulue une version du

Page 31: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

31

circuit est sauvegardée afin de pouvoir refaire une optimisation si cela est nécessaire comme dans le cas de l’ISP. Pour effectuer l’optimisation, il faut aller dans le menu « Tools » dans « Design optimization ». Là il faut préciser le niveau d’effort d’optimisation à « high » et sélectionner l’options « Ungroup All », cela dans le but d’avoir une optimisation qui ne soit pas bloqué par des composants interne du circuit comme c’est le cas pour l’ISP qui possède les composants Shifter et Logic. Pour que le logiciel puisse trouver ces composants, il ne faut pas oublier de lui faire analyser les codes VHDl de ceux-ci.

Fig 7.7 – Fenêtre d’optimisation Une fois l’optimisation exécutée, il est possible d’aller voir les rapports d’optimisation dans le menu « Reports ». Une version du circuit optimiser a également été sauvegardée. Pour optimiser l’exécution de toutes ces optimisations, des scripts qui font tout le processus ont été fait. Il suffit alors de taper dans la ligne de commande : > include nom_du_script.dcs Des scripts ont été faits pour chaque circuit avec optimisation en surface et en délai pour les conditions typical, best et worst. Ces scripts se trouvent en annexe (annexe F).

Page 32: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 32

Fig 7.8 – Optimisation de l’ALU en surface avec le chemin critique Les résultats de la synthèse sont bons et, comparativement, sont très proches de ceux du projet précédent. Le fait d’avoir choisir un effort maximal fait que les nouveaux résultats sont un petit peu meilleur, tant en surface qu’en timing (tableau 7.9). Le tableau 7.10 contient en plus les résultats pour les conditions best et worst.

Page 33: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

33

Onebit AREA OPTIMIZATION SPEED OPTIMIZATION Area [um^2] Delay [ns] Nbr Cells % Lib Used Area [um^2] Delay [ns] Nbr Cells % Lib Used BadBoy05 1958 0,79 3 5,1 2448 0,63 5 7,7 BB05 v.2003 1958 0,78 3 5,1 4161 0,55 10 15,4 Adder8 AREA OPTIMIZATION SPEED OPTIMIZATION Area [um^2] Delay [ns] Nbr Cells % Lib Used Area [um^2] Delay [ns] Nbr Cells % Lib Used BadBoy05 29008 7,72 59 28,2 64259 2,69 145 38,5 BB05 v.2003 29498 8,11 59 23,1 73929 2,44 187 35,9 ALU AREA OPTIMIZATION SPEED OPTIMIZATION Area [um^2] Delay [ns] Nbr Cells % Lib Used Area [um^2] Delay [ns] Nbr Cells % Lib Used BadBoy05 79927 9,41 167 48,7 122644 3,28 282 48,7 BB05 v.2003 79315 10,04 163 46,2 131457 3,12 331 41,0 ISP AREA OPTIMIZATION SPEED OPTIMIZATION Area [um^2] Delay [ns] Nbr Cells % Lib Used Area [um^2] Delay [ns] Nbr Cells % Lib Used BadBoy05 537825 - 708 56,4 - - - - BB05 v.2003 491925 9,37 630 64,1 595843 4,46 996 56,4

Tableau 7.9 – Comparaisons des résultats de synthèse

Onebit AREA OPTIMIZATION SPEED OPTIMIZATION Area [um^2] Delay [ns] Nbr Cells % Lib Used Area [um^2] Delay [ns] Nbr Cells % Lib Used Best 1958 0,71 3 5,1 3304 0,50 7 12,8 Typical 1958 0,78 3 5,1 4161 0,55 10 15,4 Worst 1958 0,91 3 5,1 4528 0,62 11 15,4 Adder8 AREA OPTIMIZATION SPEED OPTIMIZATION Area [um^2] Delay [ns] Nbr Cells % Lib Used Area [um^2] Delay [ns] Nbr Cells % Lib Used Best 29253 7,29 58 25,6 88617 2,08 234 41,0 Typical 29498 8,11 59 23,1 73929 2,44 187 35,9 Worst 29498 9,87 59 23,1 75276 2,51 197 38,5 ALU AREA OPTIMIZATION SPEED OPTIMIZATION Area [um^2] Delay [ns] Nbr Cells % Lib Used Area [um^2] Delay [ns] Nbr Cells % Lib Used Best 79437 8,75 165 41,0 147614 2,86 378 43,6 Typical 79315 10,04 163 46,2 131457 3,12 331 41,0 Worst 79427 11,95 165 46,2 127051 3,63 331 41,0 ISP AREA OPTIMIZATION SPEED OPTIMIZATION Area [um^2] Delay [ns] Nbr Cells % Lib Used Area [um^2] Delay [ns] Nbr Cells % Lib Used Best 491803 8,41 629 64,1 610164 4,01 1046 56,4 Typical 491925 9,37 630 64,1 595843 4,46 996 56,4 Worst 493884 11,69 633 64,1 626810 5,09 1113 59,0

Tableau 7.10 – Résultats complets de la synthèse

Page 34: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 34

8. TRAVAILS FUTURS ET CONCLUSION Ce projet comporte beaucoup d’éléments à réaliser et malheureusement tous n’ont pas pu être amenés à terme. La première chose à terminer est de résoudre le problème de validation avec les testbenchs. Cela demande de d’abord bien comprendre les fichiers générés par Library Compiler et leur utilité. Ce qui n’est pas chose aisée. Dans un second temps, toute la partie placement et routage reste à faire. Il faut comprendre les logiciels utiles pour cette partie et, une fois les fichiers générés, mettre un point une procédure de validation. Une autre chose intéressante à faire est de refaire toute la caractérisation à partir des netlists extraites des layouts. Elles prendraient ainsi en compte les effets parasites et donc permettraient d’avoir un comportement plus proche de la réalité. Il est également possible de créer de nouvelles cellules comme un additionneur un bit ou des portes XOR et XNOR à 3 et 4 entrées dans le but d’étoffer cette bibliothèque qui reste malgré tout restreinte. Ce qui ressort de ce projet est la grande difficulté à utiliser des outils provenant de différents fournisseurs. Lorsqu’on développe un système, il est presque préférable d’utiliser toute la gamme d’outils provenant du même fournisseur afin d’éviter les problèmes d’incompatibilité. Malgré cela, il est à souligner que chacun de ces outils pris individuellement reste très performant et apporte un gain de temps considérable dans le développement, même si ces derniers ne sont pas toujours très faciles à apprivoiser à cause de leurs grandes complexités.

Page 35: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

35

9. RÉFÉRENCES « Standard Cell Library Blocks Design and Evaluation » A Major Thesis of the Worcester Polytechnic Institute, April 2000 Samuel R. Girgis and Carl F. Nielsen Jr. « BadBoy05 Standard Cell Library Data Book », April 2000 Samuel R. Girgis and Carl F. Nielsen Jr. « Modélisation de systèmes intégrés numériques - Introduction à VHDL » Notes de cours, 2002 Alain Vachoux « Synospys Design Vision introduction », 2002 Alain Vachoux « Design Characterization and Modelling – User’s Guide », May 2002 Antrim Design Systems Inc. « Integrated Digital Systems » Lecture notes, 2002 Yusuf Leblebici « Circuits Intégrés Numériques » Notes de cours, 2002 Bertrand Hochet « Analyse et Synthèse des Systèmes Logiques » Traité d’Electricité vol. V - PPUR,1995 Daniel Mange

Page 36: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 36

10. ANNEXES

A. Datasheets B. Script de correction de la librairie Synopsys C. Librairie Synopsys D. Stubs E. Modèles VHDL des circuits de synthèse F. Scripts de synthèse pour Design Vision

Page 37: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

37

A. BadBoy05 datasheets Conditions : Vdd = 3.3 V Temperature : 27 °C Input slope = 0.2 ns AND2_1 : Fonction : Qout = Ain * Bin

Input Capacitance[fF] Truth Table

Ain 18.51 Ain Bin Qout

Bin 18.53 0 0 0

0 1 0

Load 1 0 0

Ain 200fF 400fF 1 1 1

Propagation Delay -Rise 415.2 535.6

Propagation Delay -Fall 506.6 671.5

Ouput Slope - Rise 405.0 664.4

Ouput Slope - Fall 479.1 830.1

Bin

Propagation Delay -Rise 422.6 543.2

Propagation Delay -Fall 542.8 707.7

Ouput Slope - Rise 404.3 664.5

Ouput Slope - Fall 484.5 833.4 AND3_1 : Fonction : Qout = Ain * Bin * Cin

Input Capacitance[fF] Truth Table

Ain 38.06 Ain Bin Cin Qout

Bin 38.11 0 0 0 0

Cin 38.13 0 0 1 0

0 1 0 0

Load 0 1 1 0

Ain 200fF 400fF 1 0 0 0

Propagation Delay -Rise 487.4 615.2 1 0 1 0

Propagation Delay -Fall 397.0 525.8 1 1 0 0

Ouput Slope - Rise 436.4 695.8 1 1 1 1

Ouput Slope - Fall 373.8 646.7

Bin

Propagation Delay -Rise 514.2 642.0

Propagation Delay -Fall 425.9 555.2

Ouput Slope - Rise 436.2 695.6

Ouput Slope - Fall 378.4 651.0

Cin

Propagation Delay -Rise 525.7 653.7

Propagation Delay -Fall 449.4 579.9

Ouput Slope - Rise 436.3 695.2

Ouput Slope - Fall 387.5 657.0

Page 38: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 38

AND4_1 : Fonction : Qout = Ain * Bin * Cin * Din

Input Capacitance[fF] Truth Table

Ain 38.06 Ain Bin Cin Din Qout

Bin 38.11 0 0 0 0 0

Cin 38.13 0 0 0 1 0

Din 38.13 0 0 1 0 0

0 0 1 1 0

Load 0 1 0 0 0

Ain 200fF 400fF 0 1 0 1 0

Propagation Delay -Rise 619.9 767.3 0 1 1 0 0

Propagation Delay -Fall 422.5 557.7 0 1 1 1 0

Ouput Slope - Rise 592.7 851.0 1 0 0 0 0

Ouput Slope - Fall 425.6 703.9 1 0 0 1 0

Bin 1 0 1 0 0

Propagation Delay -Rise 661.1 815.1 1 0 1 1 0

Propagation Delay -Fall 455.3 591.2 1 1 0 0 0

Ouput Slope - Rise 572.7 845.8 1 1 0 1 0

Ouput Slope - Fall 450.3 714.6 1 1 1 0 0

Cin 1 1 1 1 1

Propagation Delay -Rise 697.2 844.6

Propagation Delay -Fall 490.7 620.0

Ouput Slope - Rise 576.6 835.3

Ouput Slope - Fall 496.5 733.5

Din

Propagation Delay -Rise 704.7 854.7

Propagation Delay -Fall 503.6 635.9

Ouput Slope - Rise 561.2 853.7

Ouput Slope - Fall 492.7 752.9 AO21 : Fonction : Qout = (Ain * Bin) + Cin

Input Capacitance[fF] Truth Table

Ain 43.24 Ain Bin Cin Qout

Bin 43.31 0 0 0 0

Cin 51.46 0 0 1 1

0 1 0 0

Load 0 1 1 1

Ain 200fF 400fF 1 0 0 0

Propagation Delay -Rise 356.9 472.9 1 0 1 1

Propagation Delay -Fall 520.3 691.1 1 1 0 1

Ouput Slope - Rise 374.1 640.6 1 1 1 1

Ouput Slope - Fall 495.9 846.2

Bin

Propagation Delay -Rise 361.2 477.4

Propagation Delay -Fall 572.9 744.5

Ouput Slope - Rise 373.9 640.4

Ouput Slope - Fall 506.2 853.1

Cin

Propagation Delay -Rise 444.4 560.8

Propagation Delay -Fall 521.5 690.4

Page 39: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

39

Ouput Slope - Rise 381.2 643.7

Ouput Slope - Fall 485.6 837.5 AO22 : Fonction : Qout = (Ain * Bin) + (Cin + Din)

Input Capacitance[fF] Truth Table

Ain 45.79 Ain Bin Cin Din Qout

Bin 45.84 0 0 0 0 0

Cin 45.79 0 0 0 1 0

Din 45.84 0 0 1 0 0

0 0 1 1 1

Load 0 1 0 0 0

Ain 200fF 400fF 0 1 0 1 0

Propagation Delay -Rise 593.0 717.3 0 1 1 0 0

Propagation Delay -Fall 529.1 670.9 0 1 1 1 1

Ouput Slope - Rise 434.9 688.0 1 0 0 0 0

Ouput Slope - Fall 421.1 693.8 1 0 0 1 0

Bin 1 0 1 0 0

Propagation Delay -Rise 599.2 723.6 1 0 1 1 1

Propagation Delay -Fall 562.1 704.6 1 1 0 0 1

Ouput Slope - Rise 435.4 689.1 1 1 0 1 1

Ouput Slope - Fall 429.4 698.8 1 1 1 0 1

Cin 1 1 1 1 1

Propagation Delay -Rise 411.3 530.1

Propagation Delay -Fall 423.8 556.8

Ouput Slope - Rise 393.4 655.9

Ouput Slope - Fall 391.0 661.4

Din

Propagation Delay -Rise 416.2 535.0

Propagation Delay -Fall 455.1 588.9

Ouput Slope - Rise 393.4 655.0

Ouput Slope - Fall 396.8 667.2 AOI21 : Fonction : Qout = {(Ain * Bin) + Cin}’

Input Capacitance[fF] Truth Table

Ain 30.37 Ain Bin Cin Qout

Bin 30.43 0 0 0 1

Cin 49.37 0 0 1 0

0 1 0 1

Load 0 1 1 0

Ain 200fF 400fF 1 0 0 1

Propagation Delay -Rise 567.4 911.5 1 0 1 0

Propagation Delay -Fall 396.8 610.6 1 1 0 0

Ouput Slope - Rise 1168.8 2015.8 1 1 1 0

Ouput Slope - Fall 798.1 1299.1

Bin

Propagation Delay -Rise 611.9 953.2

Propagation Delay -Fall 402.9 616.0

Ouput Slope - Rise 1265.2 2106.9

Ouput Slope - Fall 797.9 1298.7

Cin

Propagation Delay -Rise 320.0 542.1

Propagation Delay -Fall 351.3 575.8

Page 40: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 40

Ouput Slope - Rise 735.3 1293.2

Ouput Slope - Fall 628.9 1144.3 AOI22 : Fonction : Qout = {(Ain * Bin) + (Cin + Din)}’

Input Capacitance[fF] Truth Table

Ain 45.79 Ain Bin Cin Din Qout

Bin 45.84 0 0 0 0 1

Cin 45.79 0 0 0 1 1

Din 45.84 0 0 1 0 1

0 0 1 1 0

Load 0 1 0 0 1

Ain 200fF 400fF 0 1 0 1 1

Propagation Delay -Rise 405.3 606.7 0 1 1 0 1

Propagation Delay -Fall 496.9 711.1 0 1 1 1 0

Ouput Slope - Rise 794.2 1286.3 1 0 0 0 1

Ouput Slope - Fall 963.6 1466.7 1 0 0 1 1

Bin 1 0 1 0 1

Propagation Delay -Rise 430.8 632.0 1 0 1 1 0

Propagation Delay -Fall 503.2 717.0 1 1 0 0 0

Ouput Slope - Rise 850.0 1343.9 1 1 0 1 0

Ouput Slope - Fall 963.9 1466.1 1 1 1 0 0

Cin 1 1 1 1 0

Propagation Delay -Rise 319.4 515.8

Propagation Delay -Fall 347.8 558.4

Ouput Slope - Rise 695.7 1191.6

Ouput Slope - Fall 684.5 1185.7

Din

Propagation Delay -Rise 342.8 540.5

Propagation Delay -Fall 353.7 564.3

Ouput Slope - Rise 749.8 1244.3

Ouput Slope - Fall 684.2 1186.4 BUF_1 : Fonction : Qout = Ain

Input Capacitance[fF] Truth Table

Ain 37.81 Ain Qout

0 0

Load 1 1

Ain 200fF 400fF

Propagation Delay -Rise 355.2 440.9

Propagation Delay -Fall 291.4 365.7

Ouput Slope - Rise 312.8 501.0

Ouput Slope - Fall 238.5 390.5

Page 41: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

41

DFF_BASIC :

Input Capacitance[fF] Truth Table

Din 51.46 Din CLK Qout (k) Q'out (k)

CLK 53.55 x 0 no change no change

0 1 0 1

Load 1 1 1 0

CLK -> Qout 200fF 400fF

Propagation Delay -Rise 885.8 1002.2

Propagation Delay -Fall 1249.9 1376.8

Ouput Slope - Rise 407.7 661.1

Ouput Slope - Fall 404.9 663.5

CLK -> Q'out

Propagation Delay -Rise 953.8 1086.9

Propagation Delay -Fall 675.9 819.4

Ouput Slope - Rise 474.8 732.4

Ouput Slope - Fall 436.5 702.1 DFF_CLR :

Input Capacitance[fF] Truth Table

Din 51.46 Din CLK CLR Qout (k) Q'out (k)

CLK 53.55 x x 0 0 1

CLR 81.88 0 1 1 0 1

1 1 1 1 0

Load x 0 1 no change no change

CLK -> Qout 200fF 400fF

Propagation Delay -Rise 1092.7 1225.4

Propagation Delay -Fall 1278.2 1407.5

Ouput Slope - Rise 491.9 746.0

Ouput Slope - Fall 415.6 675.5

CLR -> Qout

Propagation Delay -Fall 507.7 642.6

Ouput Slope - Fall 408.8 673.1

CLK -> Q'out

Propagation Delay -Rise 957.6 1090.6

Propagation Delay -Fall 680.4 823.7

Ouput Slope - Rise 474.2 731.5

Ouput Slope - Fall 438.3 702.3

CLR -> Q'out

Propagation Delay -Rise 960.3 1090.9

Ouput Slope - Rise 474.3 726.6

Page 42: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 42

DFF_CLR_PRE :

Input Capacitance[fF] Truth Table

Din 51.46 Din CLK CLR PRE Qout (k) Q'out (k)

CLK 53.55 x x 0 1 0 1

CLR 81.88 0 1 1 1 0 1

PRE 81.88 1 1 1 1 1 0

x 0 1 1 no change no change

Load x x 1 0 1 0

CLK -> Qout 200fF 400fF x x 0 0 illegal illegal

Propagation Delay -Rise 1134.7 1277.3

Propagation Delay -Fall 1308.7 1438.9

Ouput Slope - Rise 549.9 814.7

Ouput Slope - Fall 460.0 736.9

CLR -> Qout

Propagation Delay -Fall 514.8 653.4

Ouput Slope - Fall 449.1 709.0

PRE -> Qout

Propagation Delay -Rise 1056.8 1201.0

Ouput Slope - Rise 545.0 825.3

CLK -> Q'out

Propagation Delay -Rise 971.3 1109.0

Propagation Delay -Fall 700.2 847.2

Ouput Slope - Rise 525.2 762.6

Ouput Slope - Fall 479.0 737.9

CLR -> Q'out

Propagation Delay -Rise 983.9 1129.9

Ouput Slope - Rise 538.4 830.7

PRE -> Q'out

Propagation Delay -Fall 625.3 772.7

Ouput Slope - Fall 488.5 742.8 DFF_PRE :

Input Capacitance[fF] Truth Table

Din 51.46 Din CLK PRE Qout (k) Q'out (k)

CLK 53.55 x x 0 1 0

PRE 81.82 0 1 1 0 1

1 1 1 1 0

Load x 0 1 no change no change

CLK -> Qout 200fF 400fF

Propagation Delay -Rise 916.4 1033.9

Propagation Delay -Fall 1270.9 1399.0

Ouput Slope - Rise 411.8 666.1

Ouput Slope - Fall 410.9 670.2

PRE -> Qout

Propagation Delay -Rise 850.9 966.8

Ouput Slope - Rise 404.5 660.1

CLK -> Q'out

Propagation Delay -Rise 961.2 1094.9

Propagation Delay -Fall 695.7 839.4

Ouput Slope - Rise 477.7 735.1

Ouput Slope - Fall 438.4 704.1

PRE -> Q'out

Propagation Delay -Fall 630.4 773.5

Page 43: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

43

Ouput Slope - Fall 440.9 701.2 DLATCH_BASIC :

Input Capacitance[fF] Truth Table

Din 17.96 Din CLK Qout (k) Q'out (k)

CLK 53.55 0 0 0 1

1 0 1 0

Load x 1 no change no change

Din -> Qout 200fF 400fF

Propagation Delay -Rise 465.9 582.8

Propagation Delay -Fall 530.4 661.1

Ouput Slope - Rise 379.1 647.6

Ouput Slope - Fall 383.5 654.5

CLK -> Qout

Propagation Delay -Rise 657.2 773.7

Propagation Delay -Fall 725.9 856.7

Ouput Slope - Rise 379.1 647.4

Ouput Slope - Fall 383.2 654.6

Din -> Q'out

Propagation Delay -Rise 680.5 792.8

Propagation Delay -Fall 681.9 808.8

Ouput Slope - Rise 372.9 639.1

Ouput Slope - Fall 379.3 650.5

CLK -> Q'out

Propagation Delay -Rise 876.5 988.8

Propagation Delay -Fall 872.9 999.3

Ouput Slope - Rise 372.6 639.2

Ouput Slope - Fall 378.5 650.3 DLATCH_CLR :

Input Capacitance[fF] Truth Table

Din 17.96 Din CLK CLR Qout (k) Q'out (k)

CLK 53.55 x x 0 0 1

CLR 26.24 0 0 1 0 1

1 0 1 1 0

Load x 1 1 no change no change

Din -> Qout 200fF 400fF

Propagation Delay -Rise 629.5 760.9

Propagation Delay -Fall 557.2 690.1

Ouput Slope - Rise 452.8 718.1

Ouput Slope - Fall 392.7 661.8

CLK -> Qout

Propagation Delay -Rise 821.2 952.5

Propagation Delay -Fall 753.2 885.9

Ouput Slope - Rise 452.7 718.5

Ouput Slope - Fall 392.8 661.8

CLR -> Qout

Propagation Delay -Fall 465.1 598.5

Ouput Slope - Fall 395.5 664.7

Din -> Q'out

Propagation Delay -Rise 706.8 819.2

Propagation Delay -Fall 849.9 975.5

Page 44: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 44

Ouput Slope - Rise 373.7 639.8

Ouput Slope - Fall 387.2 655.1

CLK -> Q'out

Propagation Delay -Rise 903.0 1015.4

Propagation Delay -Fall 1041.6 1167.1

Ouput Slope - Rise 373.6 639.2

Ouput Slope - Fall 387.2 655.1

CLR -> Q'out

Propagation Delay -Rise 738.8 861.7

Ouput Slope - Rise 425.2 686.4 DLATCH_CLR_PRE :

Input Capacitance[fF] Truth Table

Din 17.96 Din CLK CLR PRE Qout (k) Q'out (k)

CLK 53.55 x x 0 1 0 1

CLR 26.24 0 0 1 1 0 1

PRE 26.24 1 0 1 1 1 0

x 1 1 1 no change no change

Load x x 1 0 1 0

Din -> Qout 200fF 400fF x x 0 0 illegal illegal

Propagation Delay -Rise 1008.3 1314.3

Propagation Delay -Fall 1062.5 1367.2

Ouput Slope - Rise 411.0 728.2

Ouput Slope - Fall 411.2 732.7

CLK -> Qout

Propagation Delay -Rise 1197.5 1503.2

Propagation Delay -Fall 1259.7 1564.2

Ouput Slope - Rise 410.9 728.2

Ouput Slope - Fall 410.7 732.2

CLR -> Qout

Propagation Delay -Fall 1189.9 1509.8

Ouput Slope - Fall 421.1 740.7

PRE -> Qout

Propagation Delay -Rise 830.6 1145.7

Ouput Slope - Rise 416.0 729.6

Din -> Q'out

Propagation Delay -Rise 800.4 923.2

Propagation Delay -Fall 764.8 893.9

Ouput Slope - Rise 517.1 773.4

Ouput Slope - Fall 465.5 734.4

CLK -> Q'out

Propagation Delay -Rise 997.6 1120.2

Propagation Delay -Fall 954.0 1082.9

Ouput Slope - Rise 517.1 772.6

Ouput Slope - Fall 465.8 734.4

CLR -> Q'out

Propagation Delay -Rise 921.7 1059.6

Ouput Slope - Rise 601.7 863.2

PRE -> Q'out

Propagation Delay -Fall 581.5 723.7

Ouput Slope - Fall 534.5 791.6

Page 45: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

45

DLATCH_PRE :

Input Capacitance[fF] Truth Table

Din 17.96 Din CLK PRE Qout (k) Q'out (k)

CLK 53.55 x x 0 1 0

PRE 26.24 0 0 1 0 1

1 0 1 1 0

Load x 1 1 no change no change

Din -> Qout 200fF 400fF

Propagation Delay -Rise 828.8 1140.5

Propagation Delay -Fall 1032.4 1336.9

Ouput Slope - Rise 413.8 729.3

Ouput Slope - Fall 410.2 730.6

CLK -> Qout

Propagation Delay -Rise 1078.4 1383.8

Propagation Delay -Fall 1229.2 1533.5

Ouput Slope - Rise 410.5 728.1

Ouput Slope - Fall 410.8 730.7

PRE -> Qout

Propagation Delay -Rise 828.8 1140.5

Ouput Slope - Rise 413.8 729.3

Din -> Q'out

Propagation Delay -Rise 770.4 893.1

Propagation Delay -Fall 582.2 719.5

Ouput Slope - Rise 516.6 772.7

Ouput Slope - Fall 525.9 776.1

CLK -> Q'out

Propagation Delay -Rise 967.2 1089.8

Propagation Delay -Fall 835.0 963.6

Ouput Slope - Rise 517.2 772.9

Ouput Slope - Fall 462.7 732.6

PRE -> Q'out

Propagation Delay -Fall 582.2 719.5

Ouput Slope - Fall 525.9 776.1 INV_1 : Fonction : Qout = Ain ‘

Input Capacitance[fF] Truth Table

Ain 51.46 Ain Qout

0 1

Load 1 0

Ain 200fF 400fF

Propagation Delay -Rise 182.1 293.2

Propagation Delay -Fall 247.4 408.4

Ouput Slope - Rise 340.9 622.7

Ouput Slope - Fall 436.6 805.1

Page 46: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 46

INV_HALF : Fonction : Qout = Ain ‘

Input Capacitance[fF] Truth Table

Ain 26.24 Ain Qout

0 1

Load 1 0

Ain 200fF 400fF

Propagation Delay -Rise 313.4 551.2

Propagation Delay -Fall 298.7 522.9

Ouput Slope - Rise 658.9 1257.7

Ouput Slope - Fall 568.9 1086.9 MUX2_1 : Fonction : when SEL = 0, Qout = Ain when SEL = 1, Qout = Bin

Input Capacitance[fF] Truth Table

Ain 36.62 SEL Qout

Bin 34.02 0 Ain

SEL 75.81 1 Bin

Load

Ain 200fF 400fF

Propagation Delay -Rise 126.9 203.3

Propagation Delay -Fall 143.1 231.9

Ouput Slope - Rise 378.4 602.3

Ouput Slope - Fall 462.1 747.4

Bin

Propagation Delay -Rise 139.4 218.3

Propagation Delay -Fall 130.8 216.7

Ouput Slope - Rise 399.9 622.4

Ouput Slope - Fall 441.5 724.4

SEL

Propagation Delay -Rise 178.2 261.0

Propagation Delay -Fall 227.6 322.8

Ouput Slope - Rise 359.6 603.8

Ouput Slope - Fall 436.9 729.2 MUX4_1_TRANS : Fonction : when SEL0 = 0 and SEL1 = 0, Qout = Ain when SEL0 = 0 and SEL1 = 1, Qout = Bin when SEL0 = 1 and SEL1 = 0, Qout = Cin when SEL0 = 1 and SEL1 = 1, Qout = Din

Input Capacitance[fF] Truth Table

Ain 43.75 SEL0 SEL1 Qout

Bin 43.75 0 0 Ain

Cin 43.75 0 1 Bin

Din 43.75 1 0 Cin

SEL0 131.18 1 1 Din

Page 47: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

47

SEL1 65.18

Load

Ain 200fF 400fF

Propagation Delay -Rise 846.0 1109.4

Propagation Delay -Fall 838.5 1112.3

Ouput Slope - Rise 1000.9 1643.9

Ouput Slope - Fall 1063.6 1701.8

Bin

Propagation Delay -Rise 831.8 1095.3

Propagation Delay -Fall 846.2 1120.0

Ouput Slope - Rise 1001.8 1643.1

Ouput Slope - Fall 1062.8 1701.3

Cin

Propagation Delay -Rise 844.7 1108.2

Propagation Delay -Fall 834.6 1108.6

Ouput Slope - Rise 1005.8 1648.8

Ouput Slope - Fall 1063.9 1700.3

Din

Propagation Delay -Rise 837.9 1101.4

Propagation Delay -Fall 842.1 1116.3

Ouput Slope - Rise 1005.6 1648.8

Ouput Slope - Fall 1064.1 1700.3

SEL0

Propagation Delay -Rise 870.4 1133.7

Propagation Delay -Fall 912.7 1186.8

Ouput Slope - Rise 1002.8 1644.2

Ouput Slope - Fall 1065.9 1703.1

SEL1

Propagation Delay -Rise 367.0 630.6

Propagation Delay -Fall 365.1 640.3

Ouput Slope - Rise 963.3 1631.9

Ouput Slope - Fall 930.0 1657.3 NAND2_1 : Fonction : Qout = {Ain * Bin}’

Input Capacitance[fF] Truth Table

Ain 28.29 Ain Bin Qout

Bin 28.33 0 0 1

0 1 1

Load 1 0 1

Ain 200fF 400fF 1 1 0

Propagation Delay -Rise 337.5 575.2

Propagation Delay -Fall 376.5 646.6

Ouput Slope - Rise 711.1 1315.2

Ouput Slope - Fall 776.7 1421.3

Bin

Propagation Delay -Rise 361.0 597.0

Propagation Delay -Fall 383.5 654.2

Ouput Slope - Rise 757.8 1348.9

Ouput Slope - Fall 776.9 1422.4

Page 48: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 48

NAND3_1 : Fonction : Qout = {Ain * Bin * Cin}’

Input Capacitance[fF] Truth Table

Ain 32.43 Ain Bin Cin Qout

Bin 32.49 0 0 0 1

Cin 32.52 0 0 1 1

0 1 0 1

Load 0 1 1 1

Ain 200fF 400fF 1 0 0 1

Propagation Delay -Rise 365.1 603.3 1 0 1 1

Propagation Delay -Fall 355.9 598.0 1 1 0 1

Ouput Slope - Rise 768.6 1355.5 1 1 1 0

Ouput Slope - Fall 791.5 1379.7

Bin

Propagation Delay -Rise 405.0 641.8

Propagation Delay -Fall 383.3 625.4

Ouput Slope - Rise 840.7 1432.5

Ouput Slope - Fall 791.6 1379.3

Cin

Propagation Delay -Rise 439.2 677.5

Propagation Delay -Fall 394.4 636.4

Ouput Slope - Rise 922.8 1513.4

Ouput Slope - Fall 791.4 1380.7 NAND4_1 : Fonction : Qout = {Ain * Bin * Cin * Din}’

Input Capacitance[fF] Truth Table

Ain 32.42 Ain Bin Cin Din Qout

Bin 32.48 0 0 0 0 1

Cin 32.50 0 0 0 1 1

Din 32.52 0 0 1 0 1

0 0 1 1 1

Load 0 1 0 0 1

Ain 200fF 400fF 0 1 0 1 1

Propagation Delay -Rise 382.0 619.2 0 1 1 0 1

Propagation Delay -Fall 460.4 772.1 0 1 1 1 1

Ouput Slope - Rise 804.6 1405.4 1 0 0 0 1

Ouput Slope - Fall 1111.6 1875.7 1 0 0 1 1

Bin 1 0 1 0 1

Propagation Delay -Rise 422.9 660.5 1 0 1 1 1

Propagation Delay -Fall 506.9 819.2 1 1 0 0 1

Ouput Slope - Rise 883.6 1475.2 1 1 0 1 1

Ouput Slope - Fall 1113.1 1878.4 1 1 1 0 1

Cin 1 1 1 1 0

Propagation Delay -Rise 459.9 697.8

Propagation Delay -Fall 538.8 850.8

Ouput Slope - Rise 965.8 1555.8

Ouput Slope - Fall 1112.8 1877.0

Din

Propagation Delay -Rise 489.4 730.8

Propagation Delay -Fall 550.5 862.6

Ouput Slope - Rise 1049.7 1639.9

Page 49: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

49

Ouput Slope - Fall 1113.0 1877.1 NOR2_1 : Fonction : Qout = {Ain + Bin}’

Input Capacitance[fF] Truth Table

Ain 51.46 Ain Bin Qout

Bin 51.46 0 0 1

0 1 0

Load 1 0 0

Ain 200fF 400fF 1 1 0

Propagation Delay -Rise 367.8 584.9

Propagation Delay -Fall 316.4 478.6

Ouput Slope - Rise 716.4 1256.1

Ouput Slope - Fall 574.2 940.3

Bin

Propagation Delay -Rise 316.0 532.7

Propagation Delay -Fall 259.7 418.7

Ouput Slope - Rise 717.7 1257.9

Ouput Slope - Fall 449.4 816.7 NOR3_1 : Fonction : Qout = {Ain + Bin + Cin}’

Input Capacitance[fF] Truth Table

Ain 51.46 Ain Bin Cin Qout

Bin 51.46 0 0 0 1

Cin 51.46 0 0 1 0

0 1 0 0

Load 0 1 1 0

Ain 200fF 400fF 1 0 0 0

Propagation Delay -Rise 600.3 923.6 1 0 1 0

Propagation Delay -Fall 360.6 533.1 1 1 0 0

Ouput Slope - Rise 1167.7 1971.5 1 1 1 0

Ouput Slope - Fall 709.3 1081.5

Bin

Propagation Delay -Rise 550.9 874.2

Propagation Delay -Fall 328.8 490.7

Ouput Slope - Rise 1167.1 1969.4

Ouput Slope - Fall 587.3 953.1

Cin

Propagation Delay -Rise 430.8 755.3

Propagation Delay -Fall 267.0 426.1

Ouput Slope - Rise 1155.5 1965.4

Ouput Slope - Fall 464.1 830.5

Page 50: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 50

NOR4_1 : Fonction : Qout = {Ain + Bin + Cin + Din}’

Input Capacitance[fF] Truth Table

Ain 51.46 Ain Bin Cin Din Qout

Bin 51.46 0 0 0 0 1

Cin 51.46 0 0 0 1 0

Din 51.46 0 0 1 0 0

0 0 1 1 0

Load 0 1 0 0 0

Ain 200fF 400fF 0 1 0 1 0

Propagation Delay -Rise 873.6 1303.4 0 1 1 0 0

Propagation Delay -Fall 382.8 566.7 0 1 1 1 0

Ouput Slope - Rise 1693.1 2749.3 1 0 0 0 0

Ouput Slope - Fall 821.8 1209.5 1 0 0 1 0

Bin 1 0 1 0 0

Propagation Delay -Rise 827.1 1257.7 1 0 1 1 0

Propagation Delay -Fall 373.8 545.7 1 1 0 0 0

Ouput Slope - Rise 1689.8 2744.2 1 1 0 1 0

Ouput Slope - Fall 725.6 1096.4 1 1 1 0 0

Cin 1 1 1 1 0

Propagation Delay -Rise 713.2 1144.5

Propagation Delay -Fall 335.9 498.0

Ouput Slope - Rise 1687.5 2748.2

Ouput Slope - Fall 601.3 966.7

Din

Propagation Delay -Rise 522.7 954.3

Propagation Delay -Fall 273.2 432.6

Ouput Slope - Rise 1635.0 2737.7

Ouput Slope - Fall 478.6 845.2 OA21 : Fonction : Qout = (Ain + Bin) * Cin

Input Capacitance[fF] Truth Table

Ain 49.63 Ain Bin Cin Qout

Bin 49.63 0 0 0 0

Cin 30.43 0 0 1 0

0 1 0 0

Load 0 1 1 1

Ain 200fF 400fF 1 0 0 0

Propagation Delay -Rise 506.4 650.2 1 0 1 1

Propagation Delay -Fall 532.4 701.8 1 1 0 0

Ouput Slope - Rise 463.2 780.1 1 1 1 1

Ouput Slope - Fall 481.5 831.7

Bin

Propagation Delay -Rise 414.9 555.4

Propagation Delay -Fall 481.2 650.6

Ouput Slope - Rise 439.3 763.3

Ouput Slope - Fall 481.5 831.5

Cin

Propagation Delay -Rise 379.2 518.4

Propagation Delay -Fall 538.7 703.9

Ouput Slope - Rise 430.9 757.4

Page 51: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

51

Ouput Slope - Fall 472.3 819.2 OA22 : Fonction : Qout = (Ain + Bin) * (Cin + Din)

Input Capacitance[fF] Truth Table

Ain 49.64 Ain Bin Cin Din Qout

Bin 49.64 0 0 0 0 0

Cin 49.69 0 0 0 1 0

Din 49.69 0 0 1 0 0

0 0 1 1 0

Load 0 1 0 0 0

Ain 200fF 400fF 0 1 0 1 1

Propagation Delay -Rise 401.0 554.7 0 1 1 0 1

Propagation Delay -Fall 488.2 659.3 0 1 1 1 1

Ouput Slope - Rise 465.1 833.6 1 0 0 0 0

Ouput Slope - Fall 482.7 832.1 1 0 0 1 1

Bin 1 0 1 0 1

Propagation Delay -Rise 469.7 625.8 1 0 1 1 1

Propagation Delay -Fall 539.7 710.9 1 1 0 0 0

Ouput Slope - Rise 481.1 847.0 1 1 0 1 1

Ouput Slope - Fall 482.8 831.7 1 1 1 0 1

Cin 1 1 1 1 1

Propagation Delay -Rise 498.5 656.5

Propagation Delay -Fall 626.3 799.4

Ouput Slope - Rise 491.4 852.8

Ouput Slope - Fall 497.1 840.9

Din

Propagation Delay -Rise 429.6 585.4

Propagation Delay -Fall 573.8 746.7

Ouput Slope - Rise 475.3 841.1

Ouput Slope - Fall 497.5 840.8 OAI21 : Fonction : Qout = {(Ain + Bin) * Cin}’

Input Capacitance[fF] Truth Table

Ain 49.63 Ain Bin Cin Qout

Bin 49.63 0 0 0 1

Cin 30.43 0 0 1 1

0 1 0 1

Load 0 1 1 0

Ain 200fF 400fF 1 0 0 1

Propagation Delay -Rise 418.7 657.1 1 0 1 0

Propagation Delay -Fall 415.0 628.0 1 1 0 1

Ouput Slope - Rise 827.5 1420.4 1 1 1 0

Ouput Slope - Fall 825.8 1326.3

Bin

Propagation Delay -Rise 366.9 605.1

Propagation Delay -Fall 343.9 554.9

Ouput Slope - Rise 826.8 1421.8

Ouput Slope - Fall 669.6 1170.3

Cin

Propagation Delay -Rise 425.1 661.2

Propagation Delay -Fall 271.0 428.9

Ouput Slope - Rise 887.1 1478.8

Page 52: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 52

Ouput Slope - Fall 526.4 903.8 OAI22 : Fonction : Qout = {(Ain + Bin) * (Cin + Din)}’

Input Capacitance[fF] Truth Table

Ain 49.64 Ain Bin Cin Din Qout

Bin 49.64 0 0 0 0 1

Cin 49.69 0 0 0 1 1

Din 49.69 0 0 1 0 1

0 0 1 1 1

Load 0 1 0 0 1

Ain 200fF 400fF 0 1 0 1 0

Propagation Delay -Rise 378.0 616.1 0 1 1 0 0

Propagation Delay -Fall 288.6 452.5 0 1 1 1 0

Ouput Slope - Rise 863.1 1456.3 1 0 0 0 1

Ouput Slope - Fall 531.9 917.5 1 0 0 1 0

Bin 1 0 1 0 0

Propagation Delay -Rise 429.9 668.8 1 0 1 1 0

Propagation Delay -Fall 341.9 508.1 1 1 0 0 1

Ouput Slope - Rise 862.9 1455.5 1 1 0 1 0

Ouput Slope - Fall 653.0 1037.7 1 1 1 0 0

Cin 1 1 1 1 0

Propagation Delay -Rise 501.2 738.5

Propagation Delay -Fall 354.5 515.1

Ouput Slope - Rise 996.7 1589.1

Ouput Slope - Fall 672.3 1049.3

Din

Propagation Delay -Rise 448.6 686.2

Propagation Delay -Fall 302.5 461.4

Ouput Slope - Rise 997.4 1589.2

Ouput Slope - Fall 553.7 930.7 OR2_1 : Fonction : Qout = Ain + Bin

Input Capacitance[fF] Truth Table

Ain 51.46 Ain Bin Qout

Bin 51.46 0 0 0

0 1 1

Load 1 0 1

Ain 200fF 400fF 1 1 1

Propagation Delay -Rise 399.9 516.6

Propagation Delay -Fall 510.8 679.2

Ouput Slope - Rise 403.5 670.0

Ouput Slope - Fall 528.1 869.1

Bin

Propagation Delay -Rise 324.8 437.8

Propagation Delay -Fall 459.5 626.7

Ouput Slope - Rise 364.6 653.9

Ouput Slope - Fall 516.5 888.4

Page 53: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

53

OR3_1 : Fonction : Qout = Ain + Bin + Cin

Input Capacitance[fF] Truth Table

Ain 51.46 Ain Bin Cin Qout

Bin 51.46 0 0 0 0

Cin 51.46 0 0 1 1

0 1 0 1

Load 0 1 1 1

Ain 200fF 400fF 1 0 0 1

Propagation Delay -Rise 464.9 586.0 1 0 1 1

Propagation Delay -Fall 621.6 750.0 1 1 0 1

Ouput Slope - Rise 409.1 674.1 1 1 1 1

Ouput Slope - Fall 403.7 627.1

Bin

Propagation Delay -Rise 423.7 539.1

Propagation Delay -Fall 572.3 700.7

Ouput Slope - Rise 381.7 646.1

Ouput Slope - Fall 403.8 627.6

Cin

Propagation Delay -Rise 346.3 459.8

Propagation Delay -Fall 455.1 583.4

Ouput Slope - Rise 365.3 634.8

Ouput Slope - Fall 398.1 624.8 OR4_1 : Fonction : Qout = Ain + Bin + Cin + Din

Input Capacitance[fF] Truth Table

Ain 51.46 Ain Bin Cin Din Qout

Bin 51.46 0 0 0 0 0

Cin 51.46 0 0 0 1 1

Din 51.46 0 0 1 0 1

0 0 1 1 1

Load 0 1 0 0 1

Ain 200fF 400fF 0 1 0 1 1

Propagation Delay -Rise 496.6 625.1 0 1 1 0 1

Propagation Delay -Fall 847.9 993.1 0 1 1 1 1

Ouput Slope - Rise 439.3 707.5 1 0 0 0 1

Ouput Slope - Fall 471.5 711.8 1 0 0 1 1

Bin 1 0 1 0 1

Propagation Delay -Rise 481.7 602.8 1 0 1 1 1

Propagation Delay -Fall 802.6 947.6 1 1 0 0 1

Ouput Slope - Rise 412.8 675.2 1 1 0 1 1

Ouput Slope - Fall 469.8 709.4 1 1 1 0 1

Cin 1 1 1 1 1

Propagation Delay -Rise 434.5 550.3

Propagation Delay -Fall 688.8 834.1

Ouput Slope - Rise 383.5 648.9

Ouput Slope - Fall 470.3 710.2

Din

Propagation Delay -Rise 355.5 469.5

Propagation Delay -Fall 509.0 652.8

Ouput Slope - Rise 367.4 636.4

Page 54: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 54

Ouput Slope - Fall 452.7 695.1 TRIBUF2_1_H : Fonction : Qout = Ain (when SEL = 1)

Input Capacitance[fF] Truth Table

Ain 51.46 Ain SEL Qout

SEL 60.79 0 0 -

0 1 0

Load 1 0 -

Ain 200fF 400fF 1 1 1

Propagation Delay -Rise 536.3 753.1

Propagation Delay -Fall 511.4 725.4

Ouput Slope - Rise 769.2 1308.7

Ouput Slope - Fall 789.9 1288.9

SEL

Propagation Delay -Rise 432.4 648.1

Propagation Delay -Fall 338.3 550.6

Ouput Slope - Rise 766.0 1307.7

Ouput Slope - Fall 748.7 1276.2 TRIBUF2_1_L : Fonction : Qout = Ain (when SEL = 0)

Input Capacitance[fF] Truth Table

Ain 51.46 Ain SEL Qout

SEL 68.63 0 0 0

0 1 -

Load 1 0 1

Ain 200fF 400fF 1 1 -

Propagation Delay -Rise 527.3 743.8

Propagation Delay -Fall 515.7 729.0

Ouput Slope - Rise 766.0 1303.9

Ouput Slope - Fall 786.2 1286.8

SEL

Propagation Delay -Rise 340.5 555.3

Propagation Delay -Fall 413.8 624.9

Ouput Slope - Rise 760.9 1303.6

Ouput Slope - Fall 785.3 1286.7 TRINV2_1_H : Fonction : Qout = Ain’ (when SEL = 1)

Input Capacitance[fF] Truth Table

Ain 53.51 Ain SEL Qout

SEL 60.79 0 0 -

0 1 1

Load 1 0 -

Ain 200fF 400fF 1 1 0

Propagation Delay -Rise 314.6 532.3

Propagation Delay -Fall 325.2 536.7

Ouput Slope - Rise 700.1 1243.9

Ouput Slope - Fall 612.9 1113.9

SEL

Propagation Delay -Rise 469.2 685.2

Propagation Delay -Fall 322.7 529.9

Page 55: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

55

Ouput Slope - Rise 704.3 1245.4

Ouput Slope - Fall 612.1 1114.5 TRINV2_1_L : Fonction : Qout = Ain’ (when SEL = 0)

Input Capacitance[fF] Truth Table

Ain 53.55 Ain SEL Qout

SEL 95.68 0 0 1

0 1 -

Load 1 0 0

Ain 200fF 400fF 1 1 -

Propagation Delay -Rise 315.6 532.9

Propagation Delay -Fall 325.0 536.6

Ouput Slope - Rise 702.4 1241.3

Ouput Slope - Fall 613.4 1114.2

SEL

Propagation Delay -Rise 359.5 575.1

Propagation Delay -Fall 364.5 573.1

Ouput Slope - Rise 702.6 1244.8

Ouput Slope - Fall 613.1 1114.3 XNOR2_1 : Fonction : Qout = {(Ain’ * Bin) + ( Ain * Bin’)}’

Input Capacitance[fF] Truth Table

Ain 40.15 Ain Bin Qout

Bin 40.11 0 0 0

0 1 1

timing sense: positive unate Load 1 0 1

Ain 200fF 400fF 1 1 0

Propagation Delay -Rise 415.1 554.9

Propagation Delay -Fall 342.0 446.9

Ouput Slope - Rise 442.3 768.1

Ouput Slope - Fall 304.7 527.4

Bin

Propagation Delay -Rise 410.2 549.9

Propagation Delay -Fall 318.2 422.3

Ouput Slope - Rise 442.1 769.2

Ouput Slope - Fall 300.9 524.7

timing sense: negative unate

Ain

Propagation Delay -Rise 723.9 1070.8

Propagation Delay -Fall 254.5 351.6

Ouput Slope - Rise 1257.4 2042.7

Ouput Slope - Fall 306.8 528.9

Bin

Propagation Delay -Rise 719.9 1066.9

Propagation Delay -Fall 247.1 344.5

Ouput Slope - Rise 1257.7 2046.3

Ouput Slope - Fall 307.9 529.6

Page 56: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 56

XOR2_1 : Fonction : Qout = (Ain’ * Bin) + ( Ain * Bin’)

Input Capacitance[fF] Truth Table

Ain 45.16 Ain Bin Qout

Bin 45.16 0 0 1

0 1 0

timing sense: positive unate Load 1 0 0

Ain 200fF 400fF 1 1 1

Propagation Delay -Rise 474.2 628.6

Propagation Delay -Fall 431.3 544.8

Ouput Slope - Rise 481.3 849.8

Ouput Slope - Fall 337.3 555.5

Bin

Propagation Delay -Rise 396.4 549.7

Propagation Delay -Fall 378.3 491.7

Ouput Slope - Rise 466.6 839.0

Ouput Slope - Fall 337.2 555.1

timing sense: negative unate

Ain

Propagation Delay –Rise 326.3 476.1

Propagation Delay –Fall 433.0 646.0

Ouput Slope – Rise 467.8 840.3

Ouput Slope – Fall 608.8 1030.6

Bin

Propagation Delay –Rise 314.1 463.5

Propagation Delay –Fall 424.0 636.4

Ouput Slope – Rise 468.5 840.1

Ouput Slope – Fall 609.8 1030.3

Page 57: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

57

B. Script postlib.pl #!/bin/perl # # postlib.pl # # Usage: postlib.pl <Synopsys-lib> <lib-name> # # Do some post-processing on a Synopsys library created by Antrim DCM # $lib_file = $ARGV[0]; $lib_name = $ARGV[1]; $template = $lib_name . "_template"; $dff_lib_file = $ENV{"DFF_LIB_FILE"}; if ( $dff_lib_file eq "" ) { print "Env. variable DFF_LIB_FILE not defined\n"; exit; } @tmp = split(/\//, $dff_lib_file); @tmp = split(/\./, $tmp[$#tmp]); $dff_name = $tmp[0]; $dff_template_file = "\/tmp\/dff_template\.lib"; open(FDFFLIB, $dff_lib_file) || die "cannot open $dff_lib_file for reading"; open(FDFFTEMP, ">$dff_template_file") || die "cannot create $dff_template_file"; # extract power templates $pwr_swipwr_template = -1; $pwr_nocpwr_template = -1; while (<FDFFLIB>) { $line = $_; if ( $line =~ /swipwr_template/ && $pwr_swipwr_template == -1 ) { $pwr_swipwr_template = 1; $line =~ s/$dff_name/$lib_name/; } if ( $pwr_swipwr_template == 1) { print FDFFTEMP $line; } if ( $pwr_swipwr_template == 1 && $line =~ /}/ ) { $pwr_swipwr_template = 0; } if ( $line =~ /nocpwr_template/ && $pwr_nocpwr_template == -1 ) { $pwr_nocpwr_template = 1; $line =~ s/$dff_name/$lib_name/; } if ( $pwr_nocpwr_template == 1) { print FDFFTEMP $line; } if ( $pwr_nocpwr_template == 1 && $line =~ /}/ ) { $pwr_nocpwr_template = 0; } } close(FDFFTEMP); open(FDFFTEMP, $dff_template_file) || die "cannot open $dff_template_file for reading"; $fname = $lib_file; $fname =~ s/\W.*//; # get file name $new_lib_file = $fname . "_post.lib";

Page 58: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 58

if (-e $new_lib_file ) { rename $new_lib_file, $new_lib_file . ".old"; } open(FOLIB, $lib_file) || die "cannot open $lib_file for reading"; open(FNLIB, ">$new_lib_file") || die "cannot create $new_lib_file"; $nlib_name = "n" . $lib_name; $xlib_name = "x" . $lib_name; $swipwr_template = $lib_name . "_swipwr_template"; $nocpwr_template = $lib_name . "_nocpwr_template"; $operating_cond = -1; $min_pulse_width = 0; $do_print = 1; while (<FOLIB>) { $line = $_; # add leakage_power_unit" if ( $line =~ /capacitive_load_unit/ ) { print FNLIB $line; $line = "\tleakage_power_unit : \"1pW\";\n"; } # insert power templates if ( $line =~ /operating_conditions/ && $operating_cond == -1) { $operating_cond = 1; } if ( $operating_cond == 1 ) { while (<FDFFTEMP>) { print FNLIB $_; } $operating_cond = 0; } # get cell name if ( $line =~ /cell\(/ ) { $cell_name = $line; $cell_name =~ s/\Wcell\(//; $cell_name =~ s/\W+//; print $cell_name . "\n"; # print FNLIB $line; # $line = "\t\tarea : 0 ;\n"; } # get line with "cell_leakage_power" if ( $line =~ /\Wcell_leakage_power/ ) { $line =~ s/cell_leakage_power /cell_leakage_power : /; } # get lines related to min_pulse_width if ( $line =~ /min_pulse_width/ ) { $min_pulse_width = 1; $do_print = 0; } if ( $min_pulse_width == 1 ) { if ( $line =~ /\}/ ) { $min_pulse_width = 0; $do_print = 0; } elsif ( $line =~ /when/ || $line =~ /sdf_cond/ ) { $do_print = 0; } else { @tmp = split(/\:/, $line); if ( $tmp[0] =~ /low/ ) { $line = "\t\t\tmin_pulse_width_low :" . $tmp[1];

Page 59: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

59

} if ( $tmp[0] =~ /high/ ) { $line = "\t\t\tmin_pulse_width_high :" . $tmp[1]; } } } # remove "equal_or_opposite_output" attribute if ( $line =~ /equal_or_opposite_output/ ) { $do_print = 0; } # get line with *swipwr* if ( $line =~ /swipwr/ ) { $tmp = $cell_name . "_swipwr_template"; $line =~ s/$tmp/$swipwr_template/; } # get line with *nocpwr* if ( $line =~ /nocpwr/ ) { $tmp = $cell_name . "_nocpwr_template"; $line =~ s/$tmp/$nocpwr_template/; } # replace "n$lib_name" if ( $line =~ /$nlib_name/ ) { $line =~ s/$nlib_name/$lib_name/; } # replace "x$lib_name" if ( $line =~ /$xlib_name/ ) { $line =~ s/$xlib_name/$lib_name/; } if ( $do_print ) { print FNLIB $line; } else { $do_print = 1; # reset } } print "Synopsys library " . $lib_name . " created in " . $new_lib_file . "\n";

Page 60: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 60

Page 61: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

61

C. Librairie BadBoy05

Librairie Synopsys BadBoy05

Page 62: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 62

Page 63: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

63

D. Stubs module and2_1(Ain,Bin,Qout,vdd); output Qout; input Ain,Bin,vdd; endmodule module and3_1(Ain,Bin,Cin,Qout,vdd); output Qout; input Ain,Bin,Cin,vdd; endmodule module and4_1(Ain,Bin,Cin,Din,Qout,vdd); output Qout; input Ain,Bin,Cin,Din,vdd; endmodule module ao21(Ain,Bin,Cin,Qout,vdd); output Qout; input Ain,Bin,Cin,vdd; endmodule module ao22(Ain,Bin,Cin,Din,Qout,vdd); output Qout; input Ain,Bin,Cin,Din,vdd; endmodule module aoi21(Ain,Bin,Cin,Qout,vdd); output Qout; input Ain,Bin,Cin,vdd; endmodule module aoi22(Ain,Bin,Cin,Din,Qout,vdd); output Qout; input Ain,Bin,Cin,Din,vdd; endmodule module buf_1(Ain,Qout,vdd); output Qout; input Ain,vdd; endmodule module dff_basic(Clk,Din,Qout,Qpout,vdd); output Qout,Qpout; input Clk,Din,vdd; endmodule module DFF_CLR(Clk,Clr,Din,Qout,Qpout,vdd); output Qout,Qpout; input Clr,Clk,Din,vdd; endmodule module DFF_CLR_PRE(Clk,Clr,Din,Pre,Qout,Qpout,vdd); output Qout,Qpout; input Pre,Clr,Clk,Din,vdd; endmodule module DFF_PRE(Clk,Din,Pre,Qout,Qpout,vdd); output Qout,Qpout; input Pre,Clk,Din,vdd; endmodule module DLATCH_BASIC(Din,clk,Qout,Qpout,vdd); output Qout,Qpout; input clk,Din,vdd; endmodule

Page 64: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 64

module dlatch_clr(Clr,Din,clk,Qout,Qpout,vdd); output Qout,Qpout; input Clr,clk,Din,vdd; endmodule module dlatch_clr_pre(Clr,Din,Pre,clk,Qout,Qpout,vdd); output Qout,Qpout; input Pre,Clr,clk,Din,vdd; endmodule module dlatch_pre(Din,Pre,clk,Qout,Qpout,vdd); output Qout,Qpout; input Pre,clk,Din,vdd; endmodule module inv_1(Ain,Qout,vdd); output Qout; input Ain,vdd; endmodule module inv_half(Ain,Qout,vdd); output Qout; input Ain,vdd; endmodule module mux2_1(Ain,Bin,Sel,Qout,vdd); output Qout; input Ain,Bin,Sel,vdd; endmodule module mux4_1_trans(Ain,Bin,Cin,Din,Sel0,Sel1,Qout,vdd); output Qout; input Ain,Bin,Cin,Din,Sel0,Sel1,vdd; endmodule module nand2_1(Ain,Bin,Qout,vdd); output Qout; input Ain,Bin,vdd; endmodule module nand3_1(Ain,Bin,Cin,Qout,vdd); output Qout; input Ain,Bin,Cin,vdd; endmodule module nand4_1(Ain,Bin,Cin,Din,Qout,vdd); output Qout; input Ain,Bin,Cin,Din,vdd; endmodule module nor2_1(Ain,Bin,Qout,vdd); output Qout; input Ain,Bin,vdd; endmodule module nor3_1(Ain,Bin,Cin,Qout,vdd); output Qout; input Ain,Bin,Cin,vdd; endmodule module nor4_1(Ain,Bin,Cin,Din,Qout,vdd); output Qout; input Ain,Bin,Cin,Din,vdd; endmodule

Page 65: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

65

module oa21(Ain,Bin,Cin,Qout,vdd); output Qout; input Ain,Bin,Cin,vdd; endmodule module oa22(Ain,Bin,Cin,Din,Qout,vdd); output Qout; input Ain,Bin,Cin,Din,vdd; endmodule module oai21(Ain,Bin,Cin,Qout,vdd); output Qout; input Ain,Bin,Cin,vdd; endmodule module oai22(Ain,Bin,Cin,Din,Qout,vdd); output Qout; input Ain,Bin,Cin,Din,vdd; endmodule module or2_1(Ain,Bin,Qout,vdd); output Qout; input Ain,Bin,vdd; endmodule module or3_1(Ain,Bin,Cin,Qout,vdd); output Qout; input Ain,Bin,Cin,vdd; endmodule module or4_1(Ain,Bin,Cin,Din,Qout,vdd); output Qout; input Ain,Bin,Cin,Din,vdd; endmodule module tribuf2_1_h(Ain,Sel,Qout,vdd); output Qout; input Ain,Sel,vdd; endmodule module tribuf2_1_l(Ain,Sel,Qout,vdd); output Qout; input Ain,Sel,vdd; endmodule module trinv2_1_h(Ain,Sel,Qout,vdd); output Qout; input Ain,Sel,vdd; endmodule module trinv2_1_l(Ain,Sel,Qout,vdd); output Qout; input Ain,Sel,vdd; endmodule module xnor2_1(Ain,Bin,Qout,vdd); output Qout; input Ain,Bin,vdd; endmodule module xor2_1(Ain,Bin,Qout,vdd); output Qout; input Ain,Bin,vdd; endmodule

Page 66: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 66

E. Circuits VHDL pour la synthèse onebit_desc_modified.vhd library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity onebit is port ( a : IN std_logic; b : IN std_logic; ci: IN std_logic; q : OUT std_logic; co : OUT std_logic ); end onebit; architecture desc of onebit is begin -- simple one bit full adder q <= (a xor b) xor ci; co <= (b and ci) or (a and b) or (a and ci); end desc;

adder8_desc_modified.vhd library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity adder is port ( a : IN unsigned (7 downto 0); b : IN unsigned (7 downto 0); q : OUT unsigned (7 downto 0); mode: IN unsigned (1 downto 0); cin: IN std_logic; cout: OUT std_logic ); end adder; architecture desc of adder is -- internal connections signal c : unsigned (9 downto 0); -- has to be larger to support c(i+1) signal aa: unsigned (8 downto 0); signal bb: unsigned (8 downto 0); signal qq: unsigned (8 downto 0); -- one bit Full adder component component onebit port ( a : IN std_logic; b : IN std_logic; ci : IN std_logic; q : OUT std_logic; co : OUT std_logic ); end component;

Page 67: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

67

begin -- let us decide on the mode and determine what happens to b! with mode select bb <= '0' & b when "00", -- a+b '1' & not (b) when "01", -- a-b "000000001" when "10", -- a+1 "111111111" when others; -- a-1 -- aa actually has the carry and a aa <= cin & a; -- mode(0) is one for subtractions, good example of simplifying -- logic with clever instruction sets c(0) <= mode(0); -- generate a 9 bit adder one additional bit to take care of -- carry and sign stuff... -- one: for i in 0 to 8 generate -- two: onebit port map (aa(i),bb(i),c(i),qq(i),c(i+1)); -- end generate; qq <= aa + bb; -- this is the result, q <= qq (7 downto 0); -- and this is the carry.. cout <= qq(8); end desc; shifter_desc_modified.vhd library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity shifter is port ( a : IN unsigned (7 downto 0); q : OUT unsigned (7 downto 0); mode: IN unsigned (1 downto 0); cin: IN std_logic; cout: OUT std_logic ); end shifter; architecture desc of shifter is begin with mode select q <= a(6 downto 0) & '0' when "00", -- << a(6 downto 0) & cin when "10", -- rol cin & a (7 downto 1) when others; -- ror also >> with mode select cout <= '0' when "01", -- >> a(0) when "11", -- ror a(7) when others; -- rol, << end desc;

Page 68: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 68

Logic_desc_modified.vhd library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity logic is port ( a : IN unsigned (7 downto 0); b : IN unsigned (7 downto 0); q : OUT unsigned (7 downto 0); mode: IN unsigned (2 downto 0) ); end logic; architecture desc of logic is signal mm : unsigned (1 downto 0); signal qq : unsigned (7 downto 0); begin -- first two bits is the mode mm <= mode(2 downto 1); with mm select qq <= not (a) when "00", -- not a a and b when "01", -- a and b a or b when "10", -- a or b a xor b when others; -- a xor b -- negate depending on mode (0) q <= qq when mode (0) ='0' else not (qq); end desc; alu_desc_modified.vhd library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity alu is port ( a : IN unsigned (7 downto 0); b : IN unsigned (7 downto 0); mode : IN unsigned (3 downto 0); q : OUT unsigned (7 downto 0); zero : OUT std_logic; ci : IN std_logic; co : OUT std_logic; pos : OUT std_logic; neg : OUT std_logic ); end alu; -- mode changed for simplicity -- ADDER -- 0000 a + b -- 0001 a - b -- 0010 a + 1 -- 0011 a - 1 -- SHIFTER -- 0100 a << -- 0101 a >> -- 0110 rol a -- 0111 ror a -- LOGIC -- 1000 not (a) -- 1001 NOP -- not not a

Page 69: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

69

-- 1010 a and b -- 1011 a nand b -- 1100 a or b -- 1101 a nor b -- 1110 a xor b -- 1111 a xnor b architecture desc of alu is -- we have three instances.. an adder, a shifter and a logic block component adder port ( a : IN unsigned (7 downto 0); b : IN unsigned (7 downto 0); q : OUT unsigned (7 downto 0); mode: IN unsigned (1 downto 0); cin: IN std_logic; cout: OUT std_logic ); end component; component logic port ( a : IN unsigned (7 downto 0); b : IN unsigned (7 downto 0); q : OUT unsigned (7 downto 0); mode: IN unsigned (2 downto 0) ); end component; component shifter port ( a : IN unsigned (7 downto 0); q : OUT unsigned (7 downto 0); mode: IN unsigned (1 downto 0); cin: IN std_logic; cout: OUT std_logic ); end component; signal q_a: unsigned (7 downto 0); -- result of adder signal q_s: unsigned (7 downto 0); -- result of shifter signal q_l: unsigned (7 downto 0); -- result of logic signal c_a: std_logic; -- carry from adder signal c_s: std_logic; -- carry from shift signal mm : unsigned (1 downto 0); signal m2 : unsigned (1 downto 0); signal m3 : unsigned (2 downto 0); signal qq : unsigned (7 downto 0); -- temporary output begin mm <= mode (3) & mode (2); -- permutations of mode signals... m2 <= mode (1) & mode (0); -- for neatness only.. m3 <= mode (2) & m2; -- instantiate the components add_me : adder port map (a,b,q_a,m2,ci,c_a); shift_me : shifter port map (a,q_s,m2,ci,c_s); reason_me: logic port map (a,b,q_l,m3); -- select the output of the appropriate module qq <= q_a when mm = "00" else -- addition mode q_s when mm = "01" else -- shift mode q_l; -- logic operation -- update carry co <= c_a when mm ="00" else -- carry from the alu operation c_s when mm ="01" else -- carry from the shift operation

Page 70: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 70

ci; -- or remain the same -- positive check pos <= '1' when c_a='0' and mm = "00" else -- only from addition '0'; -- negative check neg <= '1' when c_a='1' and mm = "00" else -- only from addition '0'; -- check zero flag zero <= '1' when qq = "00000000" else -- if all are zero '0'; q <= qq; end desc; isp_desc_modified.vhd library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity ISP is port ( a_bus : OUT unsigned (15 downto 0); tri_bus : INOUT unsigned (7 downto 0); d_rd : OUT std_logic; d_wr : OUT std_logic; irq : IN std_logic; clk : IN std_logic ); end isp; architecture desc of ISP is type state_type is (fetch1,fetch2,fetch3, -- Operand fetch states read1_1,read1_2,read1_3, -- Data 1 Fetch states read2_1,read2_2,read2_3, -- Data 2 Fetch states store1,store2,store3, -- Store states ldi1,ldi2,ldi3, -- Load Indexed states jmp1,jmp2,jmp3,jmp4,jmp5, -- Jump States jsr1,jsr2,jsr3,jsr4,jsr5, -- JSR states exec,update, -- Execute state isr1,isr2,isr3,isr4,isr5); -- Interrupt service state signal state : state_type; -- our present state signal pc : unsigned (15 downto 0); -- PC signal a : unsigned (7 downto 0); -- Reg A signal b : unsigned (7 downto 0); -- Reg B signal r1 : unsigned (7 downto 0); -- READ Data 1 signal r2 : unsigned (7 downto 0); -- READ Data 2 signal op : unsigned (7 downto 0); -- Operand signal carry : std_logic; -- Carry Flag signal pos : std_logic; -- Positive Flag signal neg : std_logic; -- Negative Flag signal zero : std_logic; -- Zero Flag signal inten : std_logic; -- INT enable Flag -- the register control signals signal a_in : unsigned (7 downto 0); -- reg A signal a_load : std_logic; signal a_clr : std_logic; signal b_in : unsigned (7 downto 0); -- reg B signal b_load : std_logic; signal b_clr : std_logic;

Page 71: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

71

signal pn_load : std_logic; -- NEG and POS flags signal pos_in : std_logic; signal neg_in : std_logic; signal carry_in : std_logic; -- carry signal carry_load : std_logic; signal carry_clr : std_logic; signal carry_set : std_logic; signal zero_in : std_logic; -- zero signal zero_load : std_logic; signal zero_clr : std_logic; -- for the tristate.. signal rd : std_logic; signal wr : std_logic; signal d_in : unsigned (7 downto 0); signal d_bus: unsigned (7 downto 0); -- bunch-ups for easier code signal num_data : unsigned (1 downto 0); signal op_type : unsigned (1 downto 0); signal op_mode : unsigned (3 downto 0); -- the ALU instantiation.. component alu port ( a : IN unsigned (7 downto 0); b : IN unsigned (7 downto 0); mode : IN unsigned (3 downto 0); q : OUT unsigned (7 downto 0); zero : OUT std_logic; ci : IN std_logic; co : OUT std_logic; pos : OUT std_logic; neg : OUT std_logic ); end component; -- output connection of ALU signal alu_q : unsigned (7 downto 0); begin -- MAIN -- bunch-ups num_data <= op (7 downto 6); -- first two bits of opcode op_mode <= op (3 downto 0); tri_bus <= d_bus when wr = '1' -- when writing else "ZZZZZZZZ"; -- else ZZZ d_in <= tri_bus when wr = '0' else "00000000"; d_rd <= rd; d_wr <= wr; -- our ALU brain: alu port map (a, -- REG A b, -- REG B op_mode, -- the mode alu_q, -- the result zero_in, -- the resulting Zero flag carry, -- carry to ALU carry_in,-- carry from ALU pos_in, -- the resulting POS flag neg_in); -- the resulting NEG flag process (clk) -- the process for next state assignments begin

Page 72: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 72

if (clk'event and clk = '1') then -- rising edge case state is when fetch1 => state <= fetch2; when fetch2 => state <= fetch3; when fetch3 => if num_data = "00" then state <= exec; -- done with opcode else state <= read1_1; -- have to read more end if; when read1_1 => state <= read1_2; when read1_2 => state <= read1_3; when read1_3 => if num_data = "01" then state <= exec; -- done with the opcode else state <= read2_1; -- still more end if; when read2_1 => state <= read2_2; when read2_2 => state <= read2_3; when read2_3 => if num_data = "10" then state <= exec; -- done with the opcode elsif op_type = "00" then state <= store1; -- we have a store stage elsif op_type = "01" then state <= ldi1; -- we have a load indexed state elsif op_type = "10" then state <= jmp1; -- we are jumping... else -- or else... state <= jsr1; -- this is the nightmare JSR... end if; when store1 => state <= store2; -- store states when store2 => state <= store3; when store3 => if (irq = '1' and inten = '1') then -- IRQ ? state <= isr1; -- Go there else state <= fetch1; -- Come back end if; when ldi1 => state <= ldi2; -- load states when ldi2 => state <= ldi3; when ldi3 => state <= exec; -- go to exec to finish.. when jmp1 => state <= jmp2; -- the jmpi chain.. when jmp2 => state <= jmp3; when jmp3 => state <= jmp4; when jmp4 => state <= jmp5; when jmp5 => state <= exec; -- go to exec to finish.. when jsr1 => state <= jsr2; -- The JSR states.. when jsr2 => state <= jsr3; -- I don't like them.. when jsr3 => state <= jsr4; -- too complicated.. when jsr4 => state <= jsr5; when jsr5 => state <= read1_1; -- where do I go now ? when exec => state <= update; -- main exec state when update => -- store the results if (irq = '1' and inten = '1') then -- IRQ ? state <= isr1; -- Go there else state <= fetch1; -- Come back end if; when isr1 => state <= isr2; -- Interrupt state chain when isr2 => state <= isr3; when isr3 => state <= isr4; when isr4 => state <= isr5; when isr5 => state <= jmp1; -- the jump fake.. when others => state <= fetch1; -- This is the default end case; end if;

Page 73: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

73

end process; process (state,clk) -- the process that actually does the work -- must be careful to cover all possibilities, -- a default does no good to me.. begin -- trying to latch the results.. if (clk'event and clk ='0') then if state = fetch1 then -- write address a_bus <=pc; end if; if state = fetch2 then -- wait to read rd <= '1'; pc <= pc + 1; -- inc PC end if; if state = fetch3 then -- fetch rd <= '0'; op <= d_in; end if; if state = read1_1 then -- another read a_bus <=pc; -- put the address end if; if state = read1_2 then -- wait to read rd <= '1'; pc <= pc + 1; -- inc PC end if; if state = read1_3 then -- fetch rd <= '0'; r1 <= d_in; end if; if state = read2_1 then -- and another read... a_bus <= pc; -- keep addressing end if; if state = read2_2 then -- wait to read rd <= '1'; pc <= pc + 1; -- inc PC end if; if state = read2_3 then -- fetch rd <= '0'; r2 <= d_in; end if; if state = store1 then -- now we write a_bus (15 downto 8) <= r1; -- this is the address a_bus (7 downto 0) <= r2; if (op(3)='0') then d_bus <= a; -- STA else d_bus <= b; -- STB end if; end if; if state = store2 then -- let us write wr <= '1'; end if; if state = store3 then -- and wait wr <= '0'; end if; if state = ldi1 then -- one more read this time not ith PC a_bus <= r1 & r2; -- keep addressing end if; if state = ldi2 then -- wait to read rd <= '1'; end if; if state = ldi3 then -- fetch rd <= '0'; r1 <= d_in; -- we don't need r1 anymore, just overwrite -- and go to exec state..

Page 74: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 74

end if; if state = jmp1 then -- ready to JUMP!!! PC <= r1 & r2; -- since we won't come back who cares a_bus <= r1 & r2 ; -- about PC, overwrite it... end if; if state = jmp2 then -- wait to read rd <= '1'; PC <= PC + 1; -- we need one more end if; if state = jmp3 then -- need more to get an address rd <='0'; r1 <= d_in; a_bus <= PC; -- keep addressing end if; if state = jmp4 then -- wait to read rd <= '1'; end if; if state = jmp5 then -- I have the values, now we can do a rd <='0'; -- normal JUMP r2 <= d_in; -- on the exec state.. end if; if state = jsr1 then -- JUMP subroutine.. a_bus <= r1 & r2(7 downto 1) & '0' ; -- can't risk this.. -- JSR address has to be at -- even location.. d_bus <= PC(15 downto 8); end if; if state = jsr2 then -- wait to write wr <= '1'; end if; if state = jsr3 then -- now the second one... wr <='0'; a_bus <= r1 & r2(7 downto 1) & '1' ; -- this is at an odd add. d_bus <= PC(7 downto 0); end if; if state = jsr4 then -- wait to write wr <= '1'; PC <= r1 & r2(7 downto 1) & '1'; -- get PC end if; if state = jsr5 then -- I have the values, now we can do a wr <='0'; -- normal JUMP PC <= PC +1; -- we have placed the PC; op <= "11100000"; -- fake JMP,i end if; if state = exec then -- this is where we start going.. if op_type= "00" then -- ALU op a_in <= alu_q; -- the output of the alu.. a_load <='1'; carry_load <='1'; zero_load <='1'; pn_load <= '1'; elsif op_type = "01" then if op_mode = "1100" then -- CLC carry_clr <='1'; elsif op_mode = "1101" then -- STC carry_set <='1'; elsif op_mode = "1110" then -- CLI inten <='0'; elsif op_mode = "1111" then -- STI inten <='1'; elsif op_mode = "0100" then -- CLA a_clr <= '1'; zero_clr <='1'; elsif op_mode = "0101" then -- LDA,R1 a_load <='1'; a_in <= r1; elsif op_mode = "0110" then -- LDA,R2 a_load <='1'; a_in <= r2;

Page 75: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

75

elsif op_mode = "0111" then -- MOV B,A a_load <= '1'; a_in <= b; elsif op_mode = "1000" then -- CLB b_clr <= '1'; elsif op_mode = "1001" then -- LDB,R1 b_load <= '1'; b_in <= r1; elsif op_mode = "1010" then -- LDB,R2 b_load <= '1'; b_in <= r2; elsif op_mode = "1011" then -- MOV A,B b_load <= '1'; b_in <= a; else -- TEST is 0001 so that ALU executes A-B carry_load <='1'; zero_load <='1'; pn_load <= '1'; end if; else -- we can only jump now.. that is op_type 11 or 10 if (op_mode = "0001" and zero='1') then -- JZ PC <= r1 & r2; elsif (op_mode = "0010" and neg='1') then -- JN PC <= r1 & r2; elsif (op_mode = "0100" and pos='1') then -- JP PC <= r1 & r2; elsif (op_mode = "1000" and carry='1') then -- JC PC <= r1 & r2; else PC <= r1 & r2; -- Straight JUMP end if; end if; end if; if state = update then -- drop flags for all update signals a_load <= '0'; -- and latch the outputs.... b_load <= '0'; carry_load <= '0'; zero_load <= '0'; pn_load <= '0'; carry_clr <= '0'; a_clr <= '0'; b_clr <= '0'; zero_clr <= '0'; end if; if state = isr1 then -- interrupt inten <= '0'; -- disable further int a_bus <= "0000000000000000"; -- mem [0] d_bus <= pc(15 downto 8); -- hi PC end if; if state = isr2 then -- wait to write wr <= '1'; end if; if state = isr3 then a_bus <= "0000000000000001"; -- mem [1] d_bus <= pc(7 downto 0); -- lo PC wr <= '0'; end if; if state = isr4 then -- wait to write wr <= '1'; -- saved PC r1 <= "00000000" ; -- we will fake a JMP,i r2 <= "00000010" ; -- making regs ready for it.. op <= "11100000" ; -- opcode for JMP,i simply brilliant :) end if;

Page 76: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 76

if state = isr5 then wr <= '0'; -- stop writing end if; end if; -- for clock sensitity.. end process; process (a_clr,a_load,clk) -- process for REG A begin if (clk'event and clk = '1') then if (a_clr='1') then a <= "00000000"; elsif (a_load ='1') then a <= a_in; end if; end if; end process; process (b_clr,b_load,clk) -- process for REG B begin if (clk'event and clk = '1') then if (b_clr='1') then b <= "00000000"; elsif (b_load ='1') then b <= b_in; end if; end if; end process; process (carry_set,carry_clr,carry_load,clk) -- process for the carry bit.. begin if (clk'event and clk ='0') then if (carry_clr='1') then carry <= '0'; elsif (carry_set='1') then carry <= '1'; elsif (carry_load ='1') then carry <= carry_in; end if; end if; end process; process (zero_clr,zero_load,clk) -- process for the zero bit.. begin if (clk'event and clk ='1') then if (zero_clr='1') then zero <= '0'; elsif (zero_load ='1') then zero <= zero_in; end if; end if; end process; process (pn_load,clk) -- process for the POS and NEG flags begin if (clk'event and clk = '1') then if (pn_load ='1') then pos <= pos_in; neg <= neg_in; end if; end if; end process; end desc;

Page 77: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

77

F. Scripts pour la synthèse avec Design Vision onebit_area_best.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/onebit_desc.vhd} elaborate onebit -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0 set_operating_conditions -library "BadBoy05" "BEST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_area_best_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_area_best_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} view_report_output2file = "true" report_area > ./reports/onebit_area_best_area.rpt report_cell > ./reports/onebit_area_best_cell.rpt report_reference > ./reports/onebit_area_best_reference.rpt report_timing > ./reports/onebit_area_best_timing.rpt onebit_area_typ.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/onebit_desc.vhd} elaborate onebit -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0 set_operating_conditions -library "BadBoy05" "TYPICAL" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_area_typ_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_area_typ_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} view_report_output2file = "true" report_area > ./reports/onebit_area_typ_area.rpt report_cell > ./reports/onebit_area_typ_cell.rpt report_reference > ./reports/onebit_area_typ_reference.rpt report_timing > ./reports/onebit_area_typ_timing.rpt onebit_area_wor.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/onebit_desc.vhd} elaborate onebit -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0 set_operating_conditions -library "BadBoy05" "WORST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_area_wor_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_area_wor_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} view_report_output2file = "true" report_area > ./reports/onebit_area_wor_area.rpt report_cell > ./reports/onebit_area_wor_cell.rpt

Page 78: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 78

report_reference > ./reports/onebit_area_wor_reference.rpt report_timing > ./reports/onebit_area_wor_timing.rpt onebit_timing_best.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/onebit_desc.vhd} elaborate onebit -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_delay 0.360000 -rise -to { "q" "co" } max_delay 0.360000 -fall -to { "q" "co" } reset_path -hold -rise -to { "q" "co" } reset_path -hold -fall -to { "q" "co" } set_operating_conditions -library "BadBoy05" "BEST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_timing_best_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_timing_best_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} view_report_output2file = "true" report_area > ./reports/onebit_timing_best_area.rpt report_cell > ./reports/onebit_timing_best_cell.rpt report_reference > ./reports/onebit_timing_best_reference.rpt report_timing > ./reports/onebit_timing_best_timing.rpt onebit_timing_typ.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/onebit_desc.vhd} elaborate onebit -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_delay 0.390000 -rise -to { "q" "co" } max_delay 0.390000 -fall -to { "q" "co" } reset_path -hold -rise -to { "q" "co" } reset_path -hold -fall -to { "q" "co" } set_operating_conditions -library "BadBoy05" "TYPICAL" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_timing_typ_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_timing_typ_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} view_report_output2file = "true" report_area > ./reports/onebit_timing_typ_area.rpt report_cell > ./reports/onebit_timing_typ_cell.rpt report_reference > ./reports/onebit_timing_typ_reference.rpt report_timing > ./reports/onebit_timing_typ_timing.rpt onebit_timing_wor.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/onebit_desc.vhd} elaborate onebit -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_delay 0.460000 -rise -to { "q" "co" } max_delay 0.460000 -fall -to { "q" "co" } reset_path -hold -rise -to { "q" "co" } reset_path -hold -fall -to { "q" "co" } set_operating_conditions -library "BadBoy05" "WORST"

Page 79: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

79

write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_timing_wor_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/onebit_timing_wor_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/onebit.db:onebit"} view_report_output2file = "true" report_area > ./reports/onebit_timing_wor_area.rpt report_cell > ./reports/onebit_timing_wor_cell.rpt report_reference > ./reports/onebit_timing_wor_reference.rpt report_timing > ./reports/onebit_timing_wor_timing.rpt adder8_area_best.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/adder8_desc_modified.vhd} elaborate adder -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0 set_operating_conditions -library "BadBoy05" "BEST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_area_best_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_area_best_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} view_report_output2file = "true" report_area > ./reports/adder8_area_best_area.rpt report_cell > ./reports/adder8_area_best_cell.rpt report_reference > ./reports/adder8_area_best_reference.rpt report_timing > ./reports/adder8_area_best_timing.rpt adder8_area_typ.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/adder8_desc_modified.vhd} elaborate adder -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0 set_operating_conditions -library "BadBoy05" "TYPICAL" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_area_typ_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_area_typ_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} view_report_output2file = "true" report_area > ./reports/adder8_area_typ_area.rpt report_cell > ./reports/adder8_area_typ_cell.rpt report_reference > ./reports/adder8_area_typ_reference.rpt report_timing > ./reports/adder8_area_typ_timing.rpt adder8_area_wor.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/adder8_desc_modified.vhd} elaborate adder -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0

Page 80: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 80

set_operating_conditions -library "BadBoy05" "WORST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_area_wor_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_area_wor_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} view_report_output2file = "true" report_area > ./reports/adder8_area_wor_area.rpt report_cell > ./reports/adder8_area_wor_cell.rpt report_reference > ./reports/adder8_area_wor_reference.rpt report_timing > ./reports/adder8_area_wor_timing.rpt adder8_timing_best.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/adder8_desc_modified.vhd} elaborate adder -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_delay 0.000000 -rise -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } max_delay 0.000000 -fall -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -rise -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -fall -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } set_operating_conditions -library "BadBoy05" "BEST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_timing_best_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_timing_best_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} view_report_output2file = "true" report_area > ./reports/adder8_timing_best_area.rpt report_cell > ./reports/adder8_timing_best_cell.rpt report_reference > ./reports/adder8_timing_best_reference.rpt report_timing > ./reports/adder8_timing_best_timing.rpt adder8_timing_typ.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/adder8_desc_modified.vhd} elaborate adder -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_delay 4.050000 -rise -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } max_delay 4.050000 -fall -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -rise -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -fall -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } set_operating_conditions -library "BadBoy05" "TYPICAL" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_timing_typ_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_timing_typ_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"}

Page 81: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

81

view_report_output2file = "true" report_area > ./reports/adder8_timing_typ_area.rpt report_cell > ./reports/adder8_timing_typ_cell.rpt report_reference > ./reports/adder8_timing_typ_reference.rpt report_timing > ./reports/adder8_timing_typ_timing.rpt adder8_timing_wor.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/adder8_desc_modified.vhd} elaborate adder -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_delay 0.000000 -rise -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } max_delay 0.000000 -fall -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -rise -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -fall -to { "cout" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } set_operating_conditions -library "BadBoy05" "WORST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_timing_wor_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/adder8_timing_wor_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/adder.db:adder"} view_report_output2file = "true" report_area > ./reports/adder8_timing_wor_area.rpt report_cell > ./reports/adder8_timing_wor_cell.rpt report_reference > ./reports/adder8_timing_wor_reference.rpt report_timing > ./reports/adder8_timing_wor_timing.rpt alu_area_best.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/alu_desc_modified.vhd} elaborate alu -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0 set_operating_conditions -library "BadBoy05" "BEST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_area_best_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_area_best_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} view_report_output2file = "true" report_area > ./reports/alu_area_best_area.rpt report_cell > ./reports/alu_area_best_cell.rpt report_reference > ./reports/alu_area_best_reference.rpt report_timing > ./reports/alu_area_best_timing.rpt alu_area_typ.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/alu_desc_modified.vhd} elaborate alu -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0

Page 82: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 82

set_operating_conditions -library "BadBoy05" "TYPICAL" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_area_typ_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_area_typ_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} view_report_output2file = "true" report_area > ./reports/alu_area_typ_area.rpt report_cell > ./reports/alu_area_typ_cell.rpt report_reference > ./reports/alu_area_typ_reference.rpt report_timing > ./reports/alu_area_typ_timing.rpt alu_area_wor.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/alu_desc_modified.vhd} elaborate alu -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0 set_operating_conditions -library "BadBoy05" "WORST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_area_wor_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_area_wor_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} view_report_output2file = "true" report_area > ./reports/alu_area_wor_area.rpt report_cell > ./reports/alu_area_wor_cell.rpt report_reference > ./reports/alu_area_wor_reference.rpt report_timing > ./reports/alu_area_wor_timing.rpt alu_timing_best.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/alu_desc_modified.vhd} elaborate alu -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_delay 4.380000 -rise -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } max_delay 4.380000 -fall -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -rise -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -fall -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } set_operating_conditions -library "BadBoy05" "BEST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_timing_best_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_timing_best_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} view_report_output2file = "true" report_area > ./reports/alu_timing_best_area.rpt report_cell > ./reports/alu_timing_best_cell.rpt report_reference > ./reports/alu_timing_best_reference.rpt report_timing > ./reports/alu_timing_best_timing.rpt

Page 83: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

83

alu_timing_typ.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/alu_desc_modified.vhd} elaborate alu -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_delay 5.020000 -rise -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } max_delay 5.020000 -fall -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -rise -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -fall -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } set_operating_conditions -library "BadBoy05" "TYPICAL" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_timing_typ_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_timing_typ_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} view_report_output2file = "true" report_area > ./reports/alu_timing_typ_area.rpt report_cell > ./reports/alu_timing_typ_cell.rpt report_reference > ./reports/alu_timing_typ_reference.rpt report_timing > ./reports/alu_timing_typ_timing.rpt alu_timing_wor.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/alu_desc_modified.vhd} elaborate alu -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_delay 5.980000 -rise -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } max_delay 5.980000 -fall -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -rise -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } reset_path -hold -fall -to { "zero" "co" "pos" "neg" "q[7]" "q[6]" "q[5]" "q[4]" "q[3]" "q[2]" "q[1]" "q[0]" } set_operating_conditions -library "BadBoy05" "WORST" write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_timing_wor_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/alu_timing_wor_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/alu.db:alu"} view_report_output2file = "true" report_area > ./reports/alu_timing_wor_area.rpt report_cell > ./reports/alu_timing_wor_cell.rpt report_reference > ./reports/alu_timing_wor_reference.rpt report_timing > ./reports/alu_timing_wor_timing.rpt isp_area_best.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/isp_desc_modified.vhd} elaborate ISP -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view

Page 84: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE – Marc Kristol 84

set_max_area 0 set_operating_conditions -library "BadBoy05" "BEST" create_clock -name "clk" -period 50 -waveform { "0" "25" } { "clk" } write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_area_best_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_area_best_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} view_report_output2file = "true" report_area > ./reports/isp_area_best_area.rpt report_cell > ./reports/isp_area_best_cell.rpt report_reference > ./reports/isp_area_best_reference.rpt report_timing > ./reports/isp_area_best_timing.rpt isp_area_typ.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/isp_desc_modified.vhd} elaborate ISP -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0 set_operating_conditions -library "BadBoy05" "TYPICAL" create_clock -name "clk" -period 50 -waveform { "0" "25" } { "clk" } write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_area_typ_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_area_typ_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} view_report_output2file = "true" report_area > ./reports/isp_area_typ_area.rpt report_cell > ./reports/isp_area_typ_cell.rpt report_reference > ./reports/isp_area_typ_reference.rpt report_timing > ./reports/isp_area_typ_timing.rpt isp_area_wor.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/isp_desc_modified.vhd} elaborate ISP -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_max_area 0 set_operating_conditions -library "BadBoy05" "WORST" create_clock -name "clk" -period 50 -waveform { "0" "25" } { "clk" } write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_area_wor_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_area_wor_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} view_report_output2file = "true" report_area > ./reports/isp_area_wor_area.rpt report_cell > ./reports/isp_area_wor_cell.rpt report_reference > ./reports/isp_area_wor_reference.rpt report_timing > ./reports/isp_area_wor_timing.rpt isp_timing_best.dcs remove_design -all

Page 85: Développement d’une bibliothèque de cellules logiques ... · Développement d’une bibliothèque de cellules logiques standard pour une ... synthèse VHDL où le modèle du circuit

PROJET DE SEMESTRE - Marc Kristol

85

analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/isp_desc_modified.vhd} elaborate ISP -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_operating_conditions -library "BadBoy05" "BEST" create_clock -name "clk" -period 8 -waveform { "0" "4" } { "clk" } write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_timing_best_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_timing_best_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} view_report_output2file = "true" report_area > ./reports/isp_timing_best_area.rpt report_cell > ./reports/isp_timing_best_cell.rpt report_reference > ./reports/isp_timing_best_reference.rpt report_timing > ./reports/isp_timing_best_timing.rpt isp_timing_typ.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/isp_desc_modified.vhd} elaborate ISP -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_operating_conditions -library "BadBoy05" "TYPICAL" create_clock -name "clk" -period 8 -waveform { "0" "4" } { "clk" } write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_timing_typ_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_timing_typ_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} view_report_output2file = "true" report_area > ./reports/isp_timing_typ_area.rpt report_cell > ./reports/isp_timing_typ_cell.rpt report_reference > ./reports/isp_timing_typ_reference.rpt report_timing > ./reports/isp_timing_typ_timing.rpt isp_timing_wor.dcs remove_design -all analyze -format vhdl -lib WORK {/home/kristol/Projet_LSM/dkit/bench/isp_desc_modified.vhd} elaborate ISP -arch "desc" -lib WORK -update create_schematic -size infinite -schematic_view set_operating_conditions -library "BadBoy05" "WORST" create_clock -name "clk" -period 10 -waveform { "0" "5" } { "clk" } write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_timing_wor_elab.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} compile -map_effort high -ungroup_all write -format DB -hierarchy -output "/home/kristol/Projet_LSM/dkit/bench/db/isp_timing_wor_mapped.db" {"/home/kristol/Projet_LSM/dkit/bench/ISP.db:ISP"} view_report_output2file = "true" report_area > ./reports/isp_timing_wor_area.rpt report_cell > ./reports/isp_timing_wor_cell.rpt report_reference > ./reports/isp_timing_wor_reference.rpt report_timing > ./reports/isp_timing_wor_timing.rpt