Commit 8b278d65 authored by Mickael Fiorentino's avatar Mickael Fiorentino
Browse files

Merge branch 'master' of git-step:grm/tutoriel_analogique

parents 8fdf922d 67c2fbf1
......@@ -7,7 +7,7 @@ La conception d'un circuit intégré analogique CMOS passe par deux étapes comp
Dans le cadre de ces tutoriels nous utiliserons l’environnement de simulation et d’édition de dessin des masques **Virtuoso** de //Cadence// à travers la conception d’un inverseur CMOS. Nous utiliserons le kit de développement ''GPDK45'' (//Generic Process Design Kit - 45nm//) de //Cadence//.
Cette première partie du tutoriel traite de la conception et de la simulation du schéma de l'inverseur. Le répertoire de travail associé à ce tutoriel se situe à l’emplacement ''~/Tutos/inverseur''.
Cette première partie du tutoriel traite de la conception et de la simulation du schéma de l'inverseur. Le répertoire de travail associé à ce tutoriel se situe à l’emplacement ''~/Labs/tutoriel_analogique/inverseur''.
===== Environnement de travail =====
......@@ -22,7 +22,7 @@ Cette première partie du tutoriel traite de la conception et de la simulation d
* Se placer a la racine du projet et configurer l'environnement
<code:bash>
[shell]% cd ~/Tutos/inverseur/
[shell]% cd ~/Labs/tutoriel_analogique/inverseur/
[shell]% source setup.csh
</code>
......@@ -35,13 +35,13 @@ Cette première partie du tutoriel traite de la conception et de la simulation d
Après avoir exécuté ces commandes, vous allez voir apparaitre la fenêtre de contrôle de //Virtuoso//, appelée //Command Interpreter Window// (CIW) tel qu’illustré à la <imgref fig:log>. Elle contient l’historique de toutes les opérations que vous réaliserez, ainsi qu’un menu à partir duquel vous pouvez lancer les différents outils de //Virtuoso//.
<imgcaption fig:log| Fenêtre de contrôle de Virtuoso (CIW)>
{{1_log.png|Fenêtre de contrôle de Virtuoso (CIW)}}
{{1_log.png?nolink|Fenêtre de contrôle de Virtuoso (CIW)}}
</imgcaption>
L’accès aux circuits réalisés dans //Virtuoso// est géré par le //gestionnaire de librairies//, tel qu’illustré à la <imgref fig:libman>. Il contient des librairies standards (''analogLib'', ''basic''), des librairies spécifiques au kit (''gpdk045'', ''gpdk045_tech''), ainsi que des libraires créées par l’utilisateur (''ele8304''). Une librairie contient un ensemble de circuits appelés //cellules//. Chaque cellule est décrite par différentes représentations (//schematic, layout, symbol//, etc.).
<imgcaption fig:libman| Gestionnaire de librairies>
{{1_libman.png|Gestionnaire de librairies}}
{{1_libman.png?nolink|Gestionnaire de librairies}}
</imgcaption>
Pour lancer le gestionnaire de librairie à partir de la fenêtre de contrôle de //Virtuoso// sélectionnez: ''Tools -> Library Manager''. Pour créer la librairie de travail de ce laboratoire sélectionnez: ''File -> New -> Library'', appelez là: ''ele8304'', puis sélectionnez: ''attach to an existing technology library'', et sélectionnez la technologie: ''gsclib045_tech''.
......@@ -51,13 +51,13 @@ Pour lancer le gestionnaire de librairie à partir de la fenêtre de contrôle d
En complément de ce guide vous avez également accès à l’intégralité de la documentation de //Virtuoso// directement dans l’aide //Cadence//. Pour lancer l’aide sélectionnez: ''Help -> User Guide''. Vous obtiendrez une fenêtre similaire à la <imgref fig:cdnshelp>. Vous pouvez parcourir les différents dossier en sélectionnant ''View -> Show Navigation''.
<imgcaption fig:cdnshelp| Documentation de Virtuoso>
{{1_help.png|Documentation de Virtuoso}}
{{1_help.png?nolink|Documentation de Virtuoso}}
</imgcaption>
===== Édition du schéma =====
<imgcaption fig:cell| Nouvelle cellule>
{{1_cell.png|Nouvelle cellule}}
{{1_cell.png?nolink|Nouvelle cellule}}
</imgcaption>
Dans cette partie nous allons nous intéresser à la conception et à la simulation du schéma de l’inverseur. Pour ce faire nous allons commencer par créer une cellule: Positionnez-vous dans la librairie ''ele8304'', puis sélectionnez: ''File -> New -> Cell View'', et appelez là ''INV''. Assurez-vous que la vue ''schematic'' est bien sélectionnée, et que l’outil ''schematic L'' sera utilisé pour l’édition du schéma, comme le montre la <imgref fig:cell>.
......@@ -65,7 +65,7 @@ Dans cette partie nous allons nous intéresser à la conception et à la simulat
Pour plus de clarté, on vous suggère d’organiser votre espace de travail, composé du CIW, du gestionnaire de librairies, et de l’éditeur de schéma, comme le montre la <imgref fig:sch>.
<imgcaption fig:sch| Éditeur de schéma>
{{1_sch.png|Éditeur de schéma}}
{{1_sch.png?nolink|Éditeur de schéma}}
</imgcaption>
==== Raccourcis claviers ====
......@@ -83,20 +83,16 @@ L’éditeur de schéma de //Virtuoso// s’utilise principalement à partir des
==== Schéma ====
<imgcaption fig:invsch| Schéma de l'inverseur>
{{1_invsch.png|Schéma de l'inverseur}}
</imgcaption>
Dans cette partie nous allons créer le schéma de l’inverseur. Pour commencer, vous devez instancier deux transistors (//nmos// et //pmos//). Utilisez la touche ''i'' dans l’éditeur de schémas et sélectionnez ''pmos1v'' puis ''nmos1v'' dans la librairie ''gpdk045''.
Utilisez la touche ''w'' pour créer les connexions entre les transistors de façon à obtenir le schéma d’un inverseur. N’oubliez-pas de connecter les //bulk// du //nmos// et du //pmos// à leur source. Ensuite, utilisez la touche ''p'' pour ajouter des pins d’entrées/sorties. Vous devrez ajouter une pin d’entrée ''in'' (//input//), une pin de sortie ''out'' (//output//), une pin pour l’alimentation ''vdd'' (//inputoutput//) et une pin ''vss'' (//inputoutput//) pour la masse.
Vous devriez obtenir le schéma de la <imgref fig:invsch>. Pour valider votre schéma cliquez sur ''Check and Save'' en haut à gauche.
==== Symbole ====
<imgcaption fig:invsymb| Symbole de l'inverseur>
{{1_invsymb.png|Symbole de l'inverseur}}
<imgcaption fig:invsch| Schéma de l'inverseur>
{{1_invsch.png?nolink|Schéma de l'inverseur}}
</imgcaption><imgcaption fig:invsymb| Symbole de l'inverseur>
{{1_invsymb.png?nolink|Symbole de l'inverseur}}
</imgcaption>
Pour pouvoir intégrer cet inverseur dans un banc d’essai, nous allons créer un symbole associé au schéma. À terme nous aurons donc trois vues différentes de l’inverseur: //schematic//, //symbol//, et //layout//. Sélectionnez: ''Create -> Cellview -> From Cellview''. Après avoir choisi la position des pins sur le symbole, vous pouvez choisir de garder son apparence par défaut, ou vous pouvez choisir de la modifier, tel que le montre la <imgref fig:invsymb>. Les seuls éléments que vous ne devez pas supprimer sont les pins.
......@@ -120,7 +116,7 @@ Pour créer le banc d’essai de l’inverseur, placez-vous dans la librairie ''
|''cap'' |analogLib |symbol |Capacité de sortie (charge) du circuit: $C=10pf$ |
<imgcaption fig:invtb| Banc d’essai de l’inverseur>
{{1_invtb.png|Banc d’essai de l’inverseur}}
{{1_invtb.png?nolink|Banc d’essai de l’inverseur}}
</imgcaption>
==== Configuration ====
......@@ -172,7 +168,7 @@ Pour sélectionner les signaux à observer, sélectionnez: ''outputs -> to be pl
La <imgref fig:tran> montre que la réponse de l’inverseur à un signal périodique n’est pas parfaite. D’une part on observe une réponse $RC$ importante, qui est principalement due à la capacité de sortie du banc d’essai (observez la différence pour $C = 1pf$). D’autre part, le temps de montée est différent du temps de descente. Ceci est dû au fait que l’inverseur n’est pas balancé. À dimensions égales, le courant qui traverse le //nmos// est plus important que le courant qui traverse le //pmos// (mobilité des électrons //vs// mobilité des trous).
<imgcaption fig:tran| Simulation transitoire>
{{1_tran.png|Simulation transitoire}}
{{1_tran.png?nolink|Simulation transitoire}}
</imgcaption>
==== Simulation statique paramétrique ====
......@@ -190,7 +186,7 @@ Dans un premier temps il faut créer la variable ''wp'' qui servira de paramètr
La <imgref fig:param> montre que $W_p = 140nm$ correspond au point de fonctionnement pour lequel l’inverseur est le plus balancé. Vous pouvez donc remplacer: ''wp -> 140n'' dans les propriétés du transistor //pmos// pour la suite.
<imgcaption fig:param| Simulation paramétrique>
{{1_param.png|Simulation paramétrique}}
{{1_param.png?nolink|Simulation paramétrique}}
</imgcaption>
==== Sauvegarder l’environnement de simulation ====
......
......@@ -3,19 +3,17 @@
— //[[mickael.fiorentino@polymtl.ca|Mickael Fiorentino]] 2019/07/20// ; //[[erika.miller-jolicoeur@polymtl.ca|Erika Miller-Jolicoeur]] 2019/07/20// —
Cette deuxième partie du tutoriel traite de l’édition du dessin des masques de l’inverseur. Avant de commencer, assurez-vous d'avoir complété la [[tutos:inverseur:1_schema|première partie]].
Cette deuxième partie du tutoriel traite de l’édition du dessin des masques de l’inverseur. Avant de commencer, assurez-vous d'avoir complété la [[tutoriels:analogique:1_schema|première partie]].
Nous utiliserons une méthode semi-automatique pour concevoir le dessin des masques de l’inverseur à partir de son schéma. Ensuite, nous passerons au travers des étapes de vérifications physiques:
* Vérification des règles de dessins avec l’outil **DRC** (//Design Rules Check//).
* Vérification de l'intégrité électrique du circuit avec l'outil **LVS** (//Layout vs Schematic//).
Enfin, nous allons exporter le modèle du circuit final, incluant les capacités parasites, afin de réaliser une simulation post-implémentation.
Pour démarrer l’éditeur de dessin des masques de //Virtuoso// sélectionnez: ''Launch -> Layout XL'' à partir de la fenêtre d’édition de schéma de l’inverseur.
Enfin, nous allons exporter le modèle du circuit final, incluant les capacités parasites, afin de réaliser une simulation post-implémentation. Pour démarrer l’éditeur de dessin des masques de //Virtuoso// sélectionnez: ''Launch -> Layout XL'' à partir de la fenêtre d’édition de schéma de l’inverseur.
<imgcaption fig:layxl| Éditeur de dessin des masques>
{{2_layxl2.png|Éditeur de dessin des masques}}
{{2_layxl2.png?nolink|Éditeur de dessin des masques}}
</imgcaption>
===== Raccourcis clavier =====
......@@ -38,7 +36,7 @@ Le tableau ci-dessou liste les raccourcis clavier que vous serez amené à utili
==== Affichage ====
<imgcaption fig:display| Options d'affichage>
{{2_display.png|Options d'affichage}}
{{2_display.png?nolink|Options d'affichage}}
</imgcaption>
En suivant: ''Options -> Display'' (ou en utilisant le raccourcis ''e'') vous pouvez modifier les options d’affichage de //Virtuoso//. Modifiez la résolution de la grille (''Grid Controls'') et les modes d’amorçage (''Snap Modes'') tel que le montre la <imgref fig:display>.
......@@ -51,10 +49,8 @@ Il est possible de générer le dessin des masques des transistors de l’invers
Sélectionnez: ''Connectivity -> Generate -> All From Source'', et assurez-vous de (dé)sélectionner les options, comme le montre la <imgref fig:laygen>. En particulier, décochez la case ''PR Boundary'', et utilisez la couche ''Metal1 pin'' pour les pins d’entrées/sorties. Dans l’onglet ''I/O Pins'' sélectionnez: ''Create Label As -> Label'', puis: ''Options -> Layer Name/Layer Pins -> Same as Pin''. Vous devriez voir apparaitre à l’écran le dessin des masques des deux transistors, ainsi que les 4 pins d’entrées/sorties. Utilisez la combinaison de touches ''Shift+F'' pour afficher le détail des couches physiques. Pour remplacer ou ajouter un transistor, sélectionnez le dans l’éditeur de schéma, puis dans l’éditeur de dessin des masques faites: ''Connectivity -> Generate -> Selected From Source''. Pour afficher les connexions entre les différents points du circuit faites: ''Connectivity -> Incomplete Nets -> Show/Hide All''.
<imgcaption fig:laygen1| Generate>
{{2_laygen1.png|Generate}}
</imgcaption><imgcaption fig:laygen2| I/O Pins>
{{2_laygen2.png|I/O Pins}}
<imgcaption fig:laygen| Génération du dessin des masques à partir du schéma>
{{2_laygen.png?nolink|Génération du dessin des masques à partir du schéma}}
</imgcaption>
=== Modèle de cellule standard ===
......@@ -66,7 +62,7 @@ Pour concevoir le dessin des masques de l’inverseur, nous allons utiliser le /
=== Placement et routage manuel ===
<imgcaption fig:invlayout| Dessin des masques>
{{2_invlayout.png|Dessin des masques}}
{{2_invlayout.png?nolink|Dessin des masques}}
</imgcaption>
À ce stade, il ne vous reste plus qu’à effectuer le placement et le routage de l’inverseur. Sélectionnez les couches pertinentes dans le menu ''Layers'' avant chaque édition. Utilisez la touche ''p'' pour tracer les chemins des connexions. Utilisez la touche ''r'' pour créer des rectangles si nécessaires. Utilisez la touche ''o'' pour instancier des contacts.
......@@ -94,20 +90,18 @@ Par défaut, le DRC et le LVS s’exécutent respectivement dans les dossiers ''
Pour démarrer l’outil de DRC, sélectionnez: ''PVS -> Run DRC''. Avant de lancer la procédure, nous allons modifier le dossier d’exécution et configurer les règles comme le montre la <imgref fig:drc>.
* Dans le menu ''Run Data'' Sélectionnez: ''Run directory -> /export/tmp/<user>/verifications/drc''
* Dans le menu ''Rules'' Sélectionnez: ''Technology Mapping File -> /CMC/kits/AMSKIT616_GPDK/ tech/gpdk045/pvtech.lib''. Puis, sélectionnez ''gpdk045_pvs'' dans le menu déroulant. Le fichier contenant les règles pour le DRC devrait être: ''/CMC/kits/AMSKIT616_GPDK/tech/gpdk045/pvs/ pvlDRC.rul''.
* Dans le menu ''Rules'' Sélectionnez: ''Technology Mapping File -> /CMC/kits/GPDK45/ tech/gpdk045/pvtech.lib''. Puis, sélectionnez ''gpdk045_pvs'' dans le menu déroulant. Le fichier contenant les règles pour le DRC devrait être: ''/CMC/kits/GPDK45/tech/gpdk045/pvs/pvlDRC.rul''.
Parcourez les autres menus pour vous convaincre que les informations qu’ils contiennent sont pertinentes. Finalement, pour lancer la procédure de DRC cliquez sur ''Submit''.
<imgcaption fig:drcdata| Répertoire>
{{2_drcdata.png|Répertoire}}
</imgcaption> <imgcaption fig:drcrules| Règles>
{{2_drcrules.png|Règles}}
<imgcaption fig:drc| Configuration de l'outil DRC>
{{2_drc.png?nolink|Configuration de l'outil DRC}}
</imgcaption>
Pendant l’exécution du DRC, une nouvelle fenêtre contenant les //logs// de PVS s’ouvre. Elle permet de vérifier que l’exécution du DRC s’est bien passée, et donne des indications sur la nature des problèmes le cas échéant. À la fin de l’exécution, le DRC //Debug Environment// s’ouvre. Cette fenêtre contient la liste des erreurs de DRC trouvées par l’outil en analysant votre dessin des masques, comme le montre la <imgref fig:lvsdebug>. En cliquant sur une ligne vous obtenez le détail de l’erreur, et //Virtuoso// zoom automatiquement sur la zone concernée dans votre dessin des masques. Vous devez corrigez vos erreurs et relancer le DRC jusqu’à ce qu’il n’y en ai plus aucune.
<imgcaption fig:drcdebug| DRC Debug Environment>
{{2_drcdebug.png|DRC Debug Environment}}
<imgcaption fig:drcdebug| Environnement de débogage DRC>
{{2_drcdebug.png?nolink| Environnement de débogage DRC}}
</imgcaption>
==== LVS ====
......@@ -115,19 +109,17 @@ Pendant l’exécution du DRC, une nouvelle fenêtre contenant les //logs// de P
Pour démarrer l’outil de LVS, sélectionnez: ''PVS -> Run LVS''. De même que précédemment, nous allons modifier le dossier d’exécution, configurer les règles et les fichiers de sortie comme le montre la <imgref fig:lvs>.
* Dans le menu ''Run Data'' Sélectionnez: ''Run directory -> /export/tmp/<user>/verifications/lvs''
* Dans le menu ''Rules'' Sélectionnez: ''Technology Mapping File -> /CMC/kits/AMSKIT616_GPDK/ tech/gpdk045/pvtech.lib''. Puis, sélectionnez ''gpdk045_pvs'' dans le menu déroulant. Le fichier contenant les règles pour le DRC devrait être: ''/CMC/kits/AMSKIT616_GPDK/tech/gpdk045/pvs/ pvlLVS.rul''. En complément des règles de la technologie, il faut ajouter le fichier de contrôle: ''/CMC/kits/AMSKIT616_GPDK/tech/gpdk045/pvs/pvs_control_file''.
* Dans le menu ''Rules'' Sélectionnez: ''Technology Mapping File -> /CMC/kits/GPDK45/ tech/gpdk045/pvtech.lib''. Puis, sélectionnez ''gpdk045_pvs'' dans le menu déroulant. Le fichier contenant les règles pour le DRC devrait être: ''/CMC/kits/GPDK45/tech/gpdk045/pvs/ pvlLVS.rul''. En complément des règles de la technologie, il faut ajouter le fichier de contrôle: ''/CMC/kits/GPDK45/tech/gpdk045/pvs/pvs_control_file''.
* Dans le menu ''Output'' Cochez: ''Additional Output -> Create Quantus QRC Input Data''.
<imgcaption fig:lvsdata| Répertoire>
{{2_lvsdata.png|Répertoire}}
</imgcaption> <imgcaption fig:lvsrules| Règles>
{{2_lvsrules.png|Règles}}
<imgcaption fig:lvs| Configuration de l'outil LVS>
{{2_lvs.png?nolink| Configuration de l'outil LVS}}
</imgcaption>
Pendant l’exécution du LVS, un nouvel onglet s’ouvre dans la fenêtre des //logs// de PVS. À la fin de l’exécution, le LVS //Debug Environment// liste les erreurs de LVS trouvées par l’outil en analysant votre dessin des masques, comme le montre la <imgref fig:lvsdebug>. Ici par exemple on observe une différence entre les labels du schéma et ceux du //layout// (inexistant). Les noms des objets sont des liens qui vous guideront vers les zones concernées de votre schéma ou de votre //layout//. C’est à vous de juger de l’importance des erreurs de LVS. Corrigez ce qui vous semble nécessaire pour obtenir un circuit fonctionnel.
<imgcaption fig:lvsdebug| LVS Debug Environment>
{{2_lvsdebug.png|LVS Debug Environment}}
{{2_lvsdebug.png?nolink|LVS Debug Environment}}
</imgcaption>
===== Simulation du dessin des masques =====
......@@ -136,48 +128,39 @@ La simulation du dessin des masques (aussi appelée simulation post-implémentat
==== Extraction des parasites ====
L’extraction des parasites nécessite un résultat sans erreur du LVS, et sera réalisée avec l’outil //Quantus QRC Extraction//. Pour ce faire, sélectionnez ''QRC -> Run PVS - Quantus QRC''. Dans la fenêtre qui s’ouvre (<imgref fig:qrcinit>), sélectionnez: ''PVS Data Directory -> /export/tmp/<user>/verifications/lvs/svdb'', puis: ''Quantus QRC Tech Lib -> /CMC/kits/AMSKIT616_GPDK/tech/gpdk045/pvtech.lib'', et finalement: ''Technology -> gpdk045_pvs''. Dans la nouvelle fenêtre qui s’ouvre (<imgref fig:qrc>):
L’extraction des parasites nécessite un résultat sans erreur du LVS, et sera réalisée avec l’outil //Quantus QRC Extraction//. Pour ce faire, sélectionnez ''QRC -> Run PVS - Quantus QRC''. Dans la fenêtre qui s’ouvre, sélectionnez: ''PVS Data Directory -> /export/tmp/<user>/verifications/lvs/svdb'', puis: ''Quantus QRC Tech Lib -> /CMC/kits/GPDK45/tech/gpdk045/pvtech.lib'', et finalement: ''Technology -> gpdk045_pvs''. Dans la nouvelle fenêtre qui s’ouvre:
* Dans le menu ''Setup'' Sélectionnez: ''Ruleset -> rcx_typical''. On veut créer une vue //extracted//, dans ''Output -> Extracted View'', assurez vous que c’est la bonne cellule et librairie, la vue est ''view -> av_extracted''.
* Dans le menu ''Extraction'' Sélectionnez ''Extraction Type -> RC'' puis ''Name Space -> Schematic Names''. Choisissez ''Cap Coupling Mode -> Coupled'' ainsi que ''Ref Node -> vss'', ou le nom de la pin de référence dans votre schéma.
* Dans le menu ''Netlisting'' Sélectionnez ''Parasitic Capacitor Models -> Do Not Include'' ainsi que ''Parasitic Resistor Models -> Do Not Include'' afin d’utiliser les composants de la librairie ''analogLib''.
<imgcaption fig:parasites| Parasites extraits>
{{2_qrcextracted.png|Parasites extraits}}
<imgcaption fig:qrcdata| Configuration du QRC (setup)>
{{2_qrcsetup.png?nolink| Configuration du QRC (setup)}}
</imgcaption><imgcaption fig:qrcextract| Configuration du QRC (extraction)>
{{2_qrcextract.png?nolink| Configuration du QRC (extraction)}}
</imgcaption><imgcaption fig:qrcnetlist| Configuration du QRC (netlist)>
{{2_qrcnetlist.png?nolink| Configuration du QRC (netlist)}}
</imgcaption>
À la fin de l’exécution de QRC, une fenêtre devrait vous annoncer que la vue a été créée. Dans le gestionnaire de librairie, ouvrez la nouvelle vue générée (''av_extracted''). Faites ''Shift+F'' pour afficher le détail du dessin des masques. Si vous zoomez suffisamment, vous pouvez voir les différents parasites, tel que le montre la <imgref fig:parasites>.
<imgcaption fig:qrcinit| Initialisation>
{{2_qrcinit.png|Initialisation}}
</imgcaption> <imgcaption fig:qrcdata| Configuration>
{{2_qrcsetup.png|Configuration}}
</imgcaption> <imgcaption fig:qrcextract| Extraction>
{{2_qrcextract.png|Extraction}}
</imgcaption> <imgcaption fig:qrcnetlist| Liste des interconnexions>
{{2_qrcnetlist.png|Liste des interconnexions}}
<imgcaption fig:parasites| Parasites extraits>
{{2_qrcextracted.png?nolink|Parasites extraits}}
</imgcaption>
==== Configuration de la simulation ====
Il faut créer une vue //config// qui permettra de choisir la vue à utiliser pour simuler la cellule. Dans le ''Library Manager'', placez vous dans la cellule du banc d’essai (''INV_TB''), puis sélectionnez: ''File -> New -> Cell View'', avec: ''Type -> config'', tel qu’illustré à la <imgref fig:configview>. Dans la nouvelle fenêtre, sélectionnez: ''Use Template -> spectre''. Modifiez les champs: ''View -> schematic'', et: ''Library List -> ele8304'' pour identifier les cellules et librairies nécessaires. Modifiez ''View List'' pour ajouter la vue ''av_extracted''. Vous devriez obtenir un résultat similaire à la <imgref fig:configparam>. Dans la fenêtre du ''Hierarchy Editor'' vous pouvez choisir la vue qui sera simulée en faisant un clic droit sur la cellule de l’inverseur, puis en sélectionnant: ''Set Cell View -> av_extracted''. Enfin, mettez à jour les vues avec: ''View -> Update''. Vous remarquez que les nouveaux composants contenant les éléments parasites ont été ajouté à la hiérarchie. Notez qu’il faut que l’environnement de simulation soit lié à la fenêtre //config// (ce qui peut être vérifié par le titre de la fenêtre ''ADE L'', tel qu’illustré à la <imgref fig:configadel>). Pour ce faire, il faut ouvrir ''ADE L'' via la vue //config//. Le simulateur par défaut est //AMS//, changez pour //spectre// avant de continuer. Sélectionnez: ''Setup -> Simulator/Directory/Host -> Simulator: spectre; Project Directory:/export/tmp/<user>/simulations''.
==== Simulation post-implémentation ====
Il faut créer une vue //config// qui permettra de choisir la vue à utiliser pour simuler la cellule. Dans le ''Library Manager'', placez vous dans la cellule du banc d’essai (''INV_TB''), puis sélectionnez: ''File -> New -> Cell View'', avec: ''Type -> config''. Dans la nouvelle fenêtre, sélectionnez: ''Use Template -> spectre''. Modifiez les champs: ''View -> schematic'', et: ''Library List -> ele8304'' pour identifier les cellules et librairies nécessaires. Modifiez ''View List'' pour ajouter la vue ''av_extracted''. Vous devriez obtenir un résultat similaire à la <imgref fig:configeditor>. Dans la fenêtre du ''Hierarchy Editor'' vous pouvez choisir la vue qui sera simulée en faisant un clic droit sur la cellule de l’inverseur, puis en sélectionnant: ''Set Cell View -> av_extracted''. Enfin, mettez à jour les vues avec: ''View -> Update''. Vous remarquez que les nouveaux composants contenant les éléments parasites ont été ajouté à la hiérarchie. Notez qu’il faut que l’environnement de simulation soit lié à la fenêtre //config//. Pour ce faire, il faut ouvrir ''ADE L'' via la vue //config//. Le simulateur par défaut est //AMS//, changez pour //spectre// avant de continuer. Sélectionnez: ''Setup -> Simulator/Directory/Host -> Simulator: spectre; Project Directory:/export/tmp/<user>/simulations''.
Chargez la configuration que vous avez sauvegardée précédemment avec: ''Session -> Load State''. Si vous n’avez pas de sauvegarde, configurez l’environnement comme à la section, et [[tutos:inverseur:1_schema:#Simulation transitoire|configurez la simulation transitoire]]. Faites ensuite une nouvelle sauvegarde de votre environnement, de façon à le conserver dans un fichier distinct.
<imgcaption fig:simupara| Simulation des vues schematic et av_extracted>
{{2_simupara.png|Simulation des vues schematic et av_extracted}}
<imgcaption fig:configeditor| Nouvelle configuration>
{{2_configeditor.png?nolink|Nouvelle configuration}}
</imgcaption>
Chargez la configuration que vous avez sauvegardée précédemment avec: ''Session -> Load State''. Si vous n’avez pas de sauvegarde, configurez l’environnement comme à la section, et [[tutoriels:analogique:1_schema:#Simulation transitoire|configurez la simulation transitoire]]. Faites ensuite une nouvelle sauvegarde de votre environnement, de façon à le conserver dans un fichier distinct.
Augmentez la finesse de la simulation en sélectionnant ''Choose Analyses -> Accuracy: conservative''. Puis lancez la simulation avec: ''Netlist and Run''. Vous obtenez la simulation incluant les parasites spécifiques au dessin des masques. Pour vous en assurer, vérifiez que les parasites sont bien inclus dans la //netlist// (''Simulation -> Netlist -> Display''). Puis, comparez les résultats par rapport à la simulation sans parasites. Ouvrez en parallèle la vue ''config'' et changez la vue de la cellule ''INV'' pour ''schematic''. Mettez à jour la hiérarchie et sauvegardez. Enfin dans ''ADE L'', modifiez: ''plotting mode -> append'' pour ajouter la nouvelle simulation à la précédente puis: ''Netlist and Run''. Utilisez la barre de défilement en haut des chronogrammes pour afficher une transition de l’inverseur. Vous devriez obtenir un résultat similaire à la <imgref fig:simupara>. On remarque une très légère différence entre les deux courbes.
<imgcaption fig:configview| Création>
{{2_configview.png|Création}}
</imgcaption> <imgcaption fig:configadel| ADE L lié>
{{2_configadel.png|ADE L lié}}
</imgcaption> <imgcaption fig:configparam| Configuration>
{{2_configparam.png|Configuration}}
</imgcaption> <imgcaption fig:configfinal| Hierarchy Editor>
{{2_configfinal.png|Hierarchy Editor}}
</imgcaption>
<imgcaption fig:simupara| Simulation des vues schematic et av_extracted>
{{2_simupara.png?nolink|Simulation des vues schematic et av_extracted}}
</imgcaption>
\ No newline at end of file
......@@ -9,10 +9,15 @@
#-----------------------------------------------------------------------------
# Description: Synchronisation de la documentation sur le Wiki du GRM
# - Interface à partir de l'API XML-RPC de DokuWiki
# --> module dokuwiki: https://python-dokuwiki.readthedocs.io
# - module dokuwiki: https://python-dokuwiki.readthedocs.io
# Usage : Sur les machines du GRM:
# % stpython37
# % pip3 install dokuwiki --user
# % python3 sync.py 'username' 'passwd'
#-----------------------------------------------------------------------------
import dokuwiki
import argparse
import os
# Arguments
parser = argparse.ArgumentParser()
......@@ -23,27 +28,30 @@ args = parser.parse_args()
# Parameters
username = args.login
password = args.passwd
namespace = ':tutoriels:analogique:'
wiki_url = 'https://intranet.grm.polymtl.ca/wiki'
namespace = ':tutos:inverseur:'
img_dir = 'img'
wiki_dir = 'wiki'
page_dir = 'pages'
# Login
# Login
try:
wiki = dokuwiki.DokuWiki(wiki_url, username, password, cookieAuth=True)
except (DokuWikiError, Exception) as err:
print('unable to connect: %s' % err)
# Backup pages
pages_list = wiki.pages.list(namespace)
for p in pages_list:
# Cleaning up directories before backup
for d in [img_dir, page_dir]:
if not os.path.exists(d):
os.mkdir(d)
# Backup pages
for p in wiki.pages.list(namespace):
page = wiki.pages.get(p['id'])
name = wiki_dir + '/' + p['id'].split(':')[-1] + '.dwiki'
name = page_dir + '/' + p['id'].split(':')[-1] + '.dwiki'
with open(name, 'w') as f:
f.write(page)
# Backup Media
media_list = wiki.medias.list(namespace)
for m in media_list:
for m in wiki.medias.list(namespace):
name = m['id'].split(':')[-1]
wiki.medias.get(m['id'], dirpath=img_dir, filename=name, overwrite=True)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment