diff --git a/compteur/setup.csh b/compteur/setup.csh index 8d39a8dbcb242f25b9dbd696084fd5664a12b9f0..62800805f5b80a82c8c2b132cde4b347ee085f12 100644 --- a/compteur/setup.csh +++ b/compteur/setup.csh @@ -15,11 +15,11 @@ #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- -# CONFIGURATION +# CONFIGURATION #----------------------------------------------------------------------------- setenv CMC_CONFIG "/CMC/scripts/cmc.2017.12.csh" -setenv PROJECT_HOME `pwd` +setenv PROJECT_HOME `pwd` # setup.csh doit être lancé depuis la racine du projet if ( ! -f ${PROJECT_HOME}/setup.csh ) then @@ -36,7 +36,7 @@ endif source ${CMC_CONFIG} #----------------------------------------------------------------------------- -# HIERARCHIE DU PROJET +# HIERARCHIE DU PROJET #----------------------------------------------------------------------------- # Global @@ -69,12 +69,12 @@ setenv PNR_OA_LIB liboa #----------------------------------------------------------------------------- setenv KIT_HOME ${CMC_HOME}/kits/GPDK45 - -# Librairies Modelsim + +# Librairies Modelsim setenv SIMLIB ${KIT_HOME}/simlib setenv SIMLIB_VHD fast_vdd1v0_basicCells setenv SIMLIB_VER gpdk45 - + # Front-End setenv FE_DIR ${KIT_HOME}/tech/gsclib045/gsclib045 setenv FE_VER_LIB ${FE_DIR}/verilog @@ -110,24 +110,25 @@ alias vsim "vsim -64 -modelsimini ${SIMLIB}/modelsim.ini" alias vsim_help "${MGC_HTML_BROWSER} ${CMC_MNT_MSIM_HOME}/docs/index.html" # CADENCE -source ${CMC_HOME}/scripts/cadence.2014.12.csh +source ${CMC_HOME}/scripts/cadence.2014.12.csh setenv DRCTEMPDIR /export/tmp/$user # GENUS source ${CMC_HOME}/scripts/cadence.genus17.10.000.csh alias genus "genus -overwrite" -alias genus_help "${CDS_TOP_DIR}/GENUS17.10.000_lnx86/tools.lnx86/bin/cdnshelp" +alias genus_help "${CMC_CDS_GENUS_HOME}/tools/bin/cdnshelp" # INNOVUS source ${CMC_HOME}/scripts/cadence.innovus17.11.000.csh alias innovus "innovus -overwrite -no_logv" -alias innovus_help "${CDS_TOP_DIR}/INNOVUS17.11.000_lnx86/tools/bin/cdnshelp" +alias innovus_help "${CMC_CDS_INNOVUS_HOME}/tools/bin/cdnshelp" # VOLTUS & TEMPUS source ${CMC_HOME}/scripts/cadence.ssv16.16.000.csh alias voltus "voltus -overwrite -no_logv" alias tempus "tempus -overwrite -no_logv" -alias ssv_help "${CDS_TOP_DIR}/SSV-ISR6.16.16.000_lnx86/bin/cdnshelp" +alias voltus_help "${CMC_CDS_SSV_HOME}/bin/cdnshelp" +alias tempus_help "${CMC_CDS_SSV_HOME}/bin/cdnshelp" # QUANTUS QRC source ${CMC_HOME}/scripts/cadence.ext17.21.000.csh diff --git a/doc/img/compteur.zip b/doc/img/compteur.zip deleted file mode 100644 index 3eb9bc0cfabbaabdbe5fcad7d74ef4916f79f791..0000000000000000000000000000000000000000 Binary files a/doc/img/compteur.zip and /dev/null differ diff --git a/doc/wiki/1_simulation.dwiki b/doc/pages/1_simulation.dwiki similarity index 86% rename from doc/wiki/1_simulation.dwiki rename to doc/pages/1_simulation.dwiki index f299803c42803ad1d9640d99529769469728007e..f13d958fd5d5ba7d7728cd6437c524688932fa27 100644 --- a/doc/wiki/1_simulation.dwiki +++ b/doc/pages/1_simulation.dwiki @@ -1,4 +1,3 @@ - ====== Simulation des circuits intégrés numériques ====== — //[[mickael.fiorentino@polymtl.ca|Mickael Fiorentino]] 2019/07/10// — @@ -14,7 +13,7 @@ On appelle //modèle comportemental// la description matérielle d’un circuit Dans le cadre de ce tutoriel, nous utiliserons le simulateur logique **Modelsim** de //Mentor Graphics// pour réaliser les simulations fonctionnelles et temporelles des systèmes d’intérêts. Ce document présente l’utilisation de //Modelsim// à travers la simulation fonctionnelle et temporelle d’un compteur BCD. Les sections traitant des simulations temporelles supposent que vous disposez des //netlist// post-synthèse et/ou post-implémentation. Pour les étapes de synthèse et de placement & routage du compteur référez-vous aux tutoriels associés. -Le répertoire de travail associé à ce tutoriel se situe à l'emplacement ''~/Tutos/compteur/simulation/''. Vous trouverez le code source du compteur BCD ainsi que son banc d’essai à l’emplacement: ''~/Tutos/compteur/sources/''. Les dossiers de travail associés aux simulations comportementales, post-synthèses, et post- placement & routage se situent respectivement dans les sous-répertoires: ''beh'', ''syn'', et ''pnr''. +Le répertoire de travail associé à ce tutoriel se situe à l'emplacement ''~/Labs/tutoriel_numerique/compteur/simulation/''. Vous trouverez le code source du compteur BCD ainsi que son banc d’essai à l’emplacement: ''~/Labs/tutoriel_numerique/compteur/sources/''. Les dossiers de travail associés aux simulations comportementales, post-synthèses, et post- placement & routage se situent respectivement dans les sous-répertoires: ''beh'', ''syn'', et ''pnr''. ===== Environnement de travail ===== @@ -25,7 +24,7 @@ Le répertoire de travail associé à ce tutoriel se situe à l'emplacement ''~/ * Se placer a la racine du projet et configurer l'environnement <code:bash> -[shell]% cd ~/Tutos/compteur/ +[shell]% cd ~/Labs/tutoriel_numerique/compteur/ [shell]% source setup.csh </code> @@ -50,7 +49,11 @@ En complément de ce guide, vous pouvez obtenir de l’aide directement à parti [modelsim]% help help </code> -Vous avez également accès à l’intégralité de la documentation de //Modelsim// via le menu //help//. Avant d’ouvrir l’aide, vous devez d’abord configurer le lecteur PDF à utiliser. Pour ce faire, sélectionnez ''Tools → Viewer Preference → PDF viewer'', puis remplissez le champs avec: ''evince''. Vous pouvez ouvrir l’aide en sélectionnant: ''Help → SE Documentation - PDF Bookcase''. Le PDF qui s’ouvre vous donne accès aux liens de la documentation de //Modelsim//, comme le montre la <imgref fig:help>. +Vous avez accès à la documentation de //Modelsim// via le menu: ''Help → SE Documentation - InfoHub''. L'ensemble de la documentation de //Modelsim// au format HTML devrait s'ouvrir dans un navigateur Web, comme le montre la <imgref fig:help>. Alternativement vous pouvez utiliser la commande ''vsim_help'' qui est un alias défini dans ''setup.csh'': + +<code:bash> +[shell]% vsim_help +</code> <imgcaption fig:help| Documentation de Modelsim> {{1_help.png?nolink&|Documentation de Modelsim}} @@ -62,7 +65,7 @@ Dans cette partie, nous allons détailler la procédure permettant de réaliser ==== Simulation Fonctionnelle ==== -Créez un nouveau projet: ''File → new → project'' et complétez le répertoire de simulation:''~/Tutos/compteur/simulation/beh''. Puis, sélectionnez le fichier d’initialisation de //Modelsim//: ''/CMC/kits/AMSKIT616\_GPDK/simlib/modelsim.ini'', comme le montre la <imgref fig:newproj>. Après avoir validé, une nouvelle fenêtre va apparaitre, dans laquelle vous aurez le choix d’ajouter des fichiers. Sélectionnez ''Add existing Files → Browse'', puis sélectionnez les deux fichiers VHDL ''compteur.vhd'' et ''compteur_tb.vhd''. +Créez un nouveau projet: ''File → new → project'' et complétez le répertoire de simulation:''~/Labs/tutoriel_numerique/compteur/simulation/beh''. Puis, sélectionnez le fichier d’initialisation de //Modelsim//: ''/CMC/kits/GPDK45/simlib/modelsim.ini'', comme le montre la <imgref fig:newproj>. Après avoir validé, une nouvelle fenêtre va apparaitre, dans laquelle vous aurez le choix d’ajouter des fichiers. Sélectionnez ''Add existing Files → Browse'', puis sélectionnez les deux fichiers VHDL ''compteur.vhd'' et ''compteur_tb.vhd''. <imgcaption fig:newproj| Nouveau Projet> {{1_newproj.png?nolink&|Nouveau Projet}} @@ -115,23 +118,21 @@ Cette section détaille la procédure à suivre pour réaliser la simulation tem <imgcaption fig:newprojrtl| Nouveau Projet> {{1_newproj_rtl.png?nolink&|Nouveau Projet}} -</imgcaption><imgcaption fig:lib| Librairies> -{{1_gsclib.png?nolink&|Librairies}} -</imgcaption><imgcaption fig:sdf| SDF> -{{1_sdf.png?nolink&|SDF}} +</imgcaption><imgcaption fig:libsdf| Librairies & SDF> +{{1_sclib-sdf.png?nolink&|Librairies & SDF}} </imgcaption> -Créez un nouveau projet: ''File → new → project'', puis complétez le répertoire de simulation: ''~/Tutos/compteur/simulation/syn'' comme le montre la <imgref fig:newprojrtl>. Puis, ajoutez la //netlist// (''compteur_net.v''), ainsi que le banc d’essai (''compteur_tb.vhd''). +Créez un nouveau projet: ''File → new → project'', puis complétez le répertoire de simulation: ''~/Labs/tutoriel_numerique/compteur/simulation/syn'' comme le montre la <imgref fig:newprojrtl>. Puis, ajoutez la //netlist// (''compteur_net.v''), ainsi que le banc d’essai (''compteur_tb.vhd''). Avant de lancer la compilation, spécifiez que le banc d’essai utilise la norme VHDL-2008: ''click-droit → Properties → VHDL → Use 1076-2008''. Puis, lancez la compilation: ''compile → compile all''. Finalement, si votre code compile sans erreurs, lancez la simulation: ''simulation → start simulation''. Dans la fenêtre qui s’ouvre nous allons configurer 3 onglets: * //Design//: Sélectionnez: ''work/compteur_tb'', puis: ''Resolution → ps''. - * //Libraries//: Sélectionnez: ''Add'', puis cherchez la librairie des cellules standards comme le montre la <imgref fig:lib>: ''/CMC/kits/AMSKIT616_GPDK/simlib/gsclib045_ver''. - * //SDF//: Sélectionnez ''Add'', puis cherchez le fichier SDF correspondant à la //netlist// comme le montre la <imgref fig:sdf> (//notez que ces deux fichiers doivent avoir le même nom//): ''$~/Tutos/compteur/implementation/syn/netlist/compteur.syn.sdf''. Dans la partie ''Apply to region'', indiquez à quelle partie du système le fichier SDF doit être appliqué. C’est-à -dire, donnez le nom de l’instance de dans le banc d’essai, soit ici: ''dut''. Le fichier SDF contient trois types de délais: //min, typical//, et //max//. Sélectionnez ''max''. + * //Libraries//: Sélectionnez: ''Add'', puis cherchez la librairie des cellules standards comme le montre la <imgref fig:libsdf>: ''fast_vdd1v0_basicCells''. + * //SDF//: Sélectionnez ''Add'', puis cherchez le fichier SDF correspondant à la //netlist// comme le montre la <imgref fig:libsdf> (//notez que ces deux fichiers doivent avoir le même nom//): ''~/Labs/tutoriel_numerique/compteur/implementation/syn/netlist/compteur.syn.sdf''. Dans la partie ''Apply to region'', indiquez à quelle partie du système le fichier SDF doit être appliqué. C’est-à -dire, donnez le nom de l’instance de dans le banc d’essai, soit ici: ''dut''. Le fichier SDF contient trois types de délais: //min, typical//, et //max//. Sélectionnez ''max''. Alternativement, vous pouvez utiliser l’interface en ligne de commande pour simuler le système: * Création de la librairie de travail: - + <code:tcl> [modelsim]% vlib syn/work </code> @@ -147,7 +148,7 @@ Alternativement, vous pouvez utiliser l’interface en ligne de commande pour si <code:tcl> [modelsim]% vsim -t ps -sdfmax dut=../implementation/syn/netlist/compteur.syn.sdf \ - -L /CMC/kits/AMSKIT616_GPDK/simlib/gsclib045_ver work.compteur_tb + -L fast_vdd1v0_basicCells work.compteur_tb </code> * Lancement de la simulation @@ -243,7 +244,7 @@ set tb "${top}_tb" set net "path/to/netlist/${top}.syn.v" set sdf "path/to/netlist/${top}.syn.sdf" set vcd "${top}.syn.vcd" -set netLib "/CMC/kits/AMSKIT616_GPDK/simlib/gsclib045_ver" +set netLib "/CMC/kits/GPDK45/simlib/gsclib045_ver" set dut "dut" # Mise à jour de la librairie de travail @@ -279,7 +280,7 @@ Lorsque vous simulez un système avec //Modelsim//, que ce soit en simulation co Par défaut, la fenêtre des chronogrammes de //Modelsim// se présente avec un fond noir et des courbes vertes, et le format des signaux est en général hexadécimal. Cependant, à partir d’un certain nombre de signaux à l’écran il devient difficile de tous les discerner. Pour modifier le format, la couleur ou le nom affiché d’un signal, sélectionnez un signal, ou un groupe de signaux, et faites ''click-droit → properties''. Vous obtiendrez la fenêtre de la <imgref fig:format> à partir de laquelle vous pouvez modifier les propriétés qui vous intéressent. -Il est possible de sauvegarder la configuration du chronogramme de façon à pouvoir la réutiliser. Placez le curseur n’importe où sur le chronogramme et faites ''{File → Save Format}''. Le fichier dans lequel vous sauvegardez le format possède l’extension ''.do'' et peut être réutilisé entre l’étape ''vsim'' et l’étape ''run'' avec la commande: ''do''. +Il est possible de sauvegarder la configuration du chronogramme de façon à pouvoir la réutiliser. Placez le curseur n’importe où sur le chronogramme et faites ''File → Save Format''. Le fichier dans lequel vous sauvegardez le format possède l’extension ''.do'' et peut être réutilisé entre l’étape ''vsim'' et l’étape ''run'' avec la commande: ''do''. <imgcaption fig:sighier| Hiérarchie des signaux> {{1_sighier.png?nolink&|Hiérarchie des signaux}} diff --git a/doc/wiki/2_synthese.dwiki b/doc/pages/2_synthese.dwiki similarity index 97% rename from doc/wiki/2_synthese.dwiki rename to doc/pages/2_synthese.dwiki index 1842ba57a334839c9eb22620f73df9dfb3ca4b45..337dbad90ef53bf7d829859a871a42c9bbe6dbe4 100644 --- a/doc/wiki/2_synthese.dwiki +++ b/doc/pages/2_synthese.dwiki @@ -13,7 +13,7 @@ Plusieurs outils de synthèse sont utilisés dans l’industrie. Pour la concept * **Synthèse**: À partir du résultat de l’étape précédente, l’outil remplace chaque porte logique générique par son équivalent dans la librairie spécifiée. Il effectue des optimisations plus poussées qui dépendent du type de cellules standard disponibles dans la librairie. Ici, nous utiliserons la librairie standard de Cadence. -Ce document présente l’utilisation de l’outil de synthèse //**Genus**//, à travers l’exemple du compteur BCD. Le répertoire de travail associé à ce guide se situe à l'emplacement ''~/Tutos/compteur/implementation/syn''. Le code source du compteur se trouve à l’emplacement: ''~/Tutos/compteur/sources/''. +Ce document présente l’utilisation de l’outil de synthèse //**Genus**//, à travers l’exemple du compteur BCD. Le répertoire de travail associé à ce guide se situe à l'emplacement ''~/Labs/tutoriel_numerique/compteur/implementation/syn''. Le code source du compteur se trouve à l’emplacement: ''~/Labs/tutoriel_numerique/compteur/sources/''. ===== Environnement de travail ===== @@ -24,7 +24,7 @@ Ce document présente l’utilisation de l’outil de synthèse //**Genus**//, * Se placer a la racine du projet et configurer l'environnement <code:bash> -[shell]% cd ~/Tutos/compteur/ +[shell]% cd ~/Labs/tutoriel_numerique/compteur/ [shell]% source setup.csh </code> @@ -52,8 +52,12 @@ En complément de ce guide, vous pouvez obtenir de l’aide directement à parti Vous avez également accès à l’intégralité de la documentation de //Genus// à partir de l’aide //Cadence//. Pour lancer l’aide //Cadence// et accéder à toute la documentation, utilisez la commande ''genus_help''. Vous pouvez naviguer dans l’aide en parcourant les différents dossier, comme le montre la <imgref fig:cdnshelp>. +<code:bash> +[shell]% genus_help +</code> + <imgcaption fig:cdnshelp| Documentation de Genus> -{{2_help.png|Documentation de Genus}} +{{2_help.png?nolink&|Documentation de Genus}} </imgcaption> ===== Flot de conception ===== @@ -231,7 +235,7 @@ Une fois votre système synthétisé, vous pouvez l’exporter sous la forme d ==== Rapports ==== -Cette partie présente les commandes permettant d’analyser les résultats de synthèse du système (analyse temporelle, surface occupée, puissance consommée). L’analyse temporelle statique (//Static Timing Analysis (STA)//) permet d’évaluer si le système synthétisé rencontre les contraintes temporelles. Le rapport de surface permet d’évaluer l’aire occupée par le système, et le rapport de portes logiques liste les cellules standards utilisées. Enfin, le rapport de puissance donne une évaluation sommaire de la puissance consommée, compte tenu des propriétés de la technologie, et d’une évaluation de l’activité basée sur la fréquence d’opération du système. Notez que la consommation d'énergie du système est estimée avec plus de détail dans la partie [[tutos:compteur:puissance|analyse de puissance]]. +Cette partie présente les commandes permettant d’analyser les résultats de synthèse du système (analyse temporelle, surface occupée, puissance consommée). L’analyse temporelle statique (//Static Timing Analysis (STA)//) permet d’évaluer si le système synthétisé rencontre les contraintes temporelles. Le rapport de surface permet d’évaluer l’aire occupée par le système, et le rapport de portes logiques liste les cellules standards utilisées. Enfin, le rapport de puissance donne une évaluation sommaire de la puissance consommée, compte tenu des propriétés de la technologie, et d’une évaluation de l’activité basée sur la fréquence d’opération du système. Notez que la consommation d'énergie du système est estimée avec plus de détail dans la partie [[tutoriels:numerique:4_energie|analyse de puissance]]. * Générer un rapport d’analyse temporelle statique: diff --git a/doc/wiki/3_implementation.dwiki b/doc/pages/3_implementation.dwiki similarity index 97% rename from doc/wiki/3_implementation.dwiki rename to doc/pages/3_implementation.dwiki index 9c54dca3b3e88b3d77e7779888dfb262455855fb..90fc64b36dedf2bc2605e9387a0ec0d3fd9e025b 100644 --- a/doc/wiki/3_implementation.dwiki +++ b/doc/pages/3_implementation.dwiki @@ -13,7 +13,7 @@ Ce document présente l’utilisation de l’outil de synthèse //**Innovus**// - **Routage**: Cette étape consiste à effectuer le routage automatique des cellules standards du circuit, en tenant compte des contraintes du système. - **Vérifications**: Les principales étapes de vérification sont le STA (//Static Timing Analysis//) qui garanti le bon fonctionnement du circuit vis-à -vis de ses contraintes temporelles. le DRC (//Design Rule Check//), qui valide le respect des règles de conception liées à la technologie, et le LVS (//Layout Versus Schematic//) qui vérifie que le circuit final (post-PnR) est électriquement identique au circuit original (post-synthèse). -Cette procédure débute en supposant que vous avez suivi le tutoriel sur la [[tutos:compteur:synthese|synthèse]], et que vous possédez une //netlist// du compteur BCD synthétisée avec la technologie ''GPDK45''. Le répertoire de travail associé à ce guide se situe à l’adresse: ''~/Tutos/compteur/implementation/pnr''. +Cette procédure débute en supposant que vous avez suivi le tutoriel sur la [[tutoriels:numerique:2_synthese|synthèse]], et que vous possédez une //netlist// du compteur BCD synthétisée avec la technologie ''GPDK45''. Le répertoire de travail associé à ce guide se situe à l’adresse: ''~/Labs/tutoriel_numerique/compteur/implementation/pnr''. ===== Environnement de travail ===== @@ -24,7 +24,7 @@ Cette procédure débute en supposant que vous avez suivi le tutoriel sur la [[t * Se placer a la racine du projet et configurer l'environnement <code:bash> -[shell]% cd ~/Tutos/compteur +[shell]% cd ~/Labs/tutoriel_numerique/compteur [shell]% source setup.csh </code> @@ -99,6 +99,7 @@ L'exemple suivant montre une configuration simple ''mmmc'' adaptée pour le comp # Fichier : mmmc.tcl # Description : Multi-Mode Multi-Corner # -------------------------------------- +set DESIGN compteur # Librairie des cellules standards set fastlib $::env(FE_TIM_LIB)/fast_vdd1v0_basicCells.lib @@ -142,7 +143,7 @@ Alternativement vous pouvez utiliser l’interface en ligne de commande pour sp === Alimentations === <imgcaption fig:globalnet| Connecter les alimentations> -{{3_GlobalNet.png?nolink|Connecter les alimentations}} +{{3_globalnet.png?nolink|Connecter les alimentations}} </imgcaption> La première étape pour alimenter le circuit consiste à effectuer des connexions //logiques// entre les noeuds d’alimentation (''VDD'' et ''VSS'') et les cellules standards. D’autre part, les constantes sont aussi connectées à cette étape (''tiehi'' connecté à ''VDD'' pour le 1 logique, et ''tielo'' connecté à ''VSS'' pour le 0 logique). Sélectionnez ''Power -> Connect Global Net''. La fenêtre qui s’ouvre (<imgref fig:globalnet>) liste des noeuds à connecter et permet de sélectionner les instances et les pins cibles. @@ -157,7 +158,7 @@ Alternativement vous pouvez utiliser l’interface en ligne de commande pour con </code> <imgcaption fig:stripes| Positionner les alimentations> -{{3_VDD_stripes.png?nolink|Positionner les alimentations}} +{{3_vdd_stripes.png?nolink|Positionner les alimentations}} </imgcaption> La deuxième étape pour alimenter le circuit consiste à positionner des bandes (ou des anneaux) d’alimentations autour du //core//. Ici, nous allons simplement positionner une bande ''VDD'' du côté gauche du //core// et une bande //VSS// du côté droit du //core//, en utilisant la couche ''Metal 1''. Sélectionnez ''Power -> Power Planning -> Add Stripe''. Pour ''VDD'' complétez la fenêtre de configuration comme le montre la <imgref fig:stripes>. Assurez vous de sélectionner: ''Start from -> Left'', puis cliquez sur ''Apply''. Pour ''VSS'', remplacez simplement le nom du noeud par ''VSS''. Assurez vous de sélectionner: ''Start from -> Right'', puis cliquez sur ''Apply''. @@ -173,7 +174,7 @@ Alternativement vous pouvez utiliser l’interface en ligne de commande pour pos </code> <imgcaption fig:routestripes| Router les alimentations> -{{3_PowerRoute.png?nolink|Router les alimentations}} +{{3_powerroute.png?nolink|Router les alimentations}} </imgcaption> Enfin, la dernière étape pour alimenter le circuit consiste à distribuer les alimentations dans le //core// de manière à alimenter les cellules standards. Les zones horizontales définies par le //floorplan// représentent les zones où les cellules standards vont se positionner lors du placement. Pour faciliter cette étape, toutes les cellules standards ont la même hauteur, et sont alimentées de la même manière, avec des connexions à ''VDD'' et à ''VSS'' alternativement en haut et en bas. Distribuer les alimentations consiste donc à router des fils connectés à ''VDD'' et des fils connectés à ''VSS'' le long des lignes horizontales. Sélectionnez: ''Route -> Special Route'' et complétez les champs tels que le montre la <imgref fig:routestripes>. @@ -207,7 +208,7 @@ Alternativement vous pouvez utiliser l’interface en ligne de commande pour pos Finalement, vous devez obtenir un résultat similaire à la <imgref fig:layoutpin>. Notez l’alternance des fils ''VDD'' et ''VSS'' en ''Metal 1'' le long des lignes du //floorplan//. On compte ici 4 zones pour positionner les cellules standards. Notez également les positions des pins d’entrées en haut du dé, et des pins de sortie en bas du dé. <imgcaption fig:layoutpin| Dessin des masques du compteur après le Partitionnement> -{{3_Layout_Pin.png?nolink|Dessin des masques du compteur après le Partitionnement}} +{{3_layout_pin.png?nolink|Dessin des masques du compteur après le Partitionnement}} </imgcaption> ==== Placement ==== @@ -233,7 +234,7 @@ Pour démarrer le placement des cellules standards, sélectionnez ''Place -> Pla <imgcaption fig:layoutplace| Dessin des masques du compteur après le Placement> -{{3_Layout_Place.png?nolink|Dessin des masques du compteur après le Placement}} +{{3_layout_place.png?nolink|Dessin des masques du compteur après le Placement}} </imgcaption> Comme on peut le voir, l’outil a réalisé un premier routage des cellules. Ce routage n’est pas le routage final, il est simplement là pour aider l’outil de placement à placer efficacement les cellules en prenant en compte le routage. Pour voir le détail des cellules, sur la droite de la fenêtre d’//Innovus//, vous pouvez désélectionner ''Net'' et sélectionner ''Cell''. Vous obtiendrez un résultat similaire à la <imgref fig:layoutplace>. @@ -299,7 +300,7 @@ Finalement, nous allons combler les espaces vide entre les cellules avec des //F </code> <imgcaption fig:layoutroute| Dessin des masques du compteur après le Routage> -{{3_Layout_Route.png?nolink|Dessin des masques du compteur après le Routage}} +{{3_layout_route.png?nolink|Dessin des masques du compteur après le Routage}} </imgcaption> ==== Vérifications ==== @@ -348,7 +349,7 @@ Pour lancer la procédure de vérification temporelle complète, sélectionnez: ==== Sauvegardes ==== <imgcaption fig:oa| Création d'une librairie //Open Access//> -{{3_OAlib.png?nolink|Création d'une librairie //Open Access//}} +{{3_oalib.png?nolink|Création d'une librairie //Open Access//}} </imgcaption> À tout moment pendant l’implémentation vous pouvez sauvegarder votre travail dans une librairie OA. Pour ce faire, vous devez dans un premier temps créer cette librairie en sélectionnant: ''File -> Create OA Library''. La librairie doit être attachée aux librairies de la technologie ''GPDK45'', comme le montre la <imgref fig:oa>. diff --git a/doc/wiki/4_energie.dwiki b/doc/pages/4_energie.dwiki similarity index 89% rename from doc/wiki/4_energie.dwiki rename to doc/pages/4_energie.dwiki index 591da2dd74c66293ee8b2408755b85543c4cb230..9fd1df0c1aa7bdb91dfa3df128d679cefc0398b0 100644 --- a/doc/wiki/4_energie.dwiki +++ b/doc/pages/4_energie.dwiki @@ -3,14 +3,14 @@ — //[[mickael.fiorentino@polymtl.ca|Mickael Fiorentino]] 2019/07/10// — -Dans ce tutoriel nous présentons deux méthodes simples pour estimer la consommation d’énergie d’un circuit intégré, à travers l’exemple du compteur BCD. Les étapes de [[tutos:compteur:1_simulation|simulation]], de [[tutos:compteur:2_synthese|synthèse]], et de [[tutos:compteur:3_implementation|placement & routage]], sont des prérequis nécessaires à la poursuite de ce tutoriel. Les méthodes présentées ici supposent que le circuit implémenté est fonctionnel, et que son dessin des masques est sauvegardé dans une librairie //Open Access// (OA). +Dans ce tutoriel nous présentons deux méthodes simples pour estimer la consommation d’énergie d’un circuit intégré, à travers l’exemple du compteur BCD. Les étapes de [[tutoriels:numerique:1_simulation|simulation]], de [[tutoriels:numerique:2_synthese|synthèse]], et de [[tutoriels:numerique:3_implementation|placement & routage]], sont des prérequis nécessaires à la poursuite de ce tutoriel. Les méthodes présentées ici supposent que le circuit implémenté est fonctionnel, et que son dessin des masques est sauvegardé dans une librairie //Open Access// (OA). Ce tutoriel présente ces deux méthodes pour estimer la consommation d’énergie d’un circuit intégré à partir de l’outil **Voltus**: - ** la méthode statique**, où seule la fréquence d’horloge est utilisée pour estimer l’activité du système - **la méthode dynamique**, (aussi appelée //vector-driven//), qui utilise l’activité générée lors de la simulation temporelle du circuit. Cette méthode fournit des résultats plus réalistes que la méthode statique, mais elle est plus longue à mettre en oeuvre. -L’estimation de la consommation d’énergie d’un circuit est fondée sur l’estimation de son activité, et sur l’estimation de la puissance dissipée par son dessin des masques. Pour estimer l’activité du circuit, on utilise les changement de valeurs des signaux durant une simulation temporelle, qui sont sauvegardés dans un fichier VCD. Plus le banc d’essai contient de stimuli différents, plus l’estimation de l’activité sera précise. La procédure pour enregistrer l’activité du compteur (post-PnR) dans un fichier VCD est détaillée dans la partie du tutoriel qui concerne la [[tutos:compteur:1_simulation:#Enregistrement de l’activité|simulation]]. +L’estimation de la consommation d’énergie d’un circuit est fondée sur l’estimation de son activité, et sur l’estimation de la puissance dissipée par son dessin des masques. Pour estimer l’activité du circuit, on utilise les changement de valeurs des signaux durant une simulation temporelle, qui sont sauvegardés dans un fichier VCD. Plus le banc d’essai contient de stimuli différents, plus l’estimation de l’activité sera précise. La procédure pour enregistrer l’activité du compteur (post-PnR) dans un fichier VCD est détaillée dans la partie du tutoriel qui concerne la [[tutoriels:numerique:1_simulation:#Enregistrement de l’activité|simulation]]. L’estimation de la puissance dissipée par le circuit dépend du dessin des masques, qui affecte le nombre et la taille des capacités d’interconnexion, mais également de la technologie utilisée, qui influe sur les fuites de courant et sur la puissance consommée par les cellules standards. On distingue ainsi trois principales contributions à la consommation de puissance d’un circuit intégré: @@ -31,7 +31,7 @@ Avant de débuter ce tutoriel, assurez vous d’avoir un dessin des masques fonc * Se placer a la racine du projet et configurer l'environnement <code:bash> -[shell]% cd ~/Tutos/compteur +[shell]% cd ~/Labs/tutoriel_numerique/compteur [shell]% source setup.csh </code> @@ -73,7 +73,7 @@ Vous pouvez naviguer dans l’aide en parcourant les différents dossier, comme ==== Ouverture du dessin des masques ==== -Avant de débuter les procédures d’estimation de la consommation d’énergie, il faut charger le dessin des masques du compteur dans //Voltus// à partir de de la libraire OA créée lors de [[tutos:compteur:3_implementation|l'implémentation]]. Sélectionnez ''File -> Read Design'' et remplissez les champs comme le montre la <imgref fig:help>. Assurez vous de sélectionner ''Data Type -> OA'', et de cocher la case ''Read Physical Data''. +Avant de débuter les procédures d’estimation de la consommation d’énergie, il faut charger le dessin des masques du compteur dans //Voltus// à partir de de la libraire OA créée lors de [[tutoriels:numerique:3_implementation|l'implémentation]]. Sélectionnez ''File -> Read Design'' et remplissez les champs comme le montre la <imgref fig:help>. Assurez vous de sélectionner ''Data Type -> OA'', et de cocher la case ''Read Physical Data''. <imgcaption fig:restore| Charger le dessin des masques du compteur> {{4_restore.png?nolink|Charger le dessin des masques du compteur}} @@ -156,7 +156,7 @@ La méthode d’estimation //dynamique// donne un aperçu plus réaliste de la p {{4_dynamic_setup.png?nolink|Configuration de la méthode dynamique}} </imgcaption> - * Ensuite sélectionnez ''Power & Rail -> Run Power Analysis''. Ici nous allons choisir ''Activity File -> VCD'', et sélectionner le fichier VCD correspondant à la simulation post-PnR à l’emplacement ''~/Tutos/compteur/simulation/pnr/compteur.pnr.vcd''. Sélectionnez: ''Scope -> compteur_tb/dut'', ''Start -> 0'' et ''End -> 39''. Cliquez sur ''Add'' pour valider l’ajout du fichier d’activité. Enfin, modifiez l’emplacement du répertoire de destination pour ''reports/power''. Sélectionnez ''Apply'' pour lancer l’analyse de puissance. L’analyse dynamique devrait prendre plus de temps que l’analyse statique. Vous obtiendrez finalement un rapport de puissance dans le dossier de destination. + * Ensuite sélectionnez ''Power & Rail -> Run Power Analysis''. Ici nous allons choisir ''Activity File -> VCD'', et sélectionner le fichier VCD correspondant à la simulation post-PnR à l’emplacement ''~/Labs/tutoriel_numerique/compteur/simulation/pnr/compteur.pnr.vcd''. Sélectionnez: ''Scope -> compteur_tb/dut'', ''Start -> 0'' et ''End -> 39''. Cliquez sur ''Add'' pour valider l’ajout du fichier d’activité. Enfin, modifiez l’emplacement du répertoire de destination pour ''reports/power''. Sélectionnez ''Apply'' pour lancer l’analyse de puissance. L’analyse dynamique devrait prendre plus de temps que l’analyse statique. Vous obtiendrez finalement un rapport de puissance dans le dossier de destination. <imgcaption fig:dynamic-run| Lancement de la méthode dynamique> {{4_dynamic_run.png?nolink|Lancement de la méthode dynamique}} diff --git a/doc/sync.py b/doc/sync.py old mode 100644 new mode 100755 index 668d1c0ba86c36b8dfb43047ecfda5624d4cf152..d7850dbefa7d030af043e455a7036c92e64a2ac0 --- a/doc/sync.py +++ b/doc/sync.py @@ -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:numerique:' wiki_url = 'https://intranet.grm.polymtl.ca/wiki' -namespace = ':tutos:compteur:' 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) diff --git a/doc/wiki/start.dwiki b/doc/wiki/start.dwiki deleted file mode 100644 index de046432bda07b52ba6bd602d26c26b108156106..0000000000000000000000000000000000000000 --- a/doc/wiki/start.dwiki +++ /dev/null @@ -1,33 +0,0 @@ - -====== Conception de circuits intégrés numériques ====== - -— //[[mickael.fiorentino@polymtl.ca|Mickael Fiorentino]] 2019/07/10// — - -Ce tutoriel s'adresse aux checheurs du GRM ainsi qu'aux étudiants du cours [[https://www.polymtl.ca/etudes/cours/circuits-integres-tres-grande-echelle|ELE8304]]. Il couvre la conception de circuits intégrés numériques à partir des outils de conception automatisés disponibles aux laboratoires [[https://www.gr2m.polymtl.ca/|GRM]] et [[https://www.gr2m.polymtl.ca/|VLSI]]. - -Il est basé sur un **compteur BCD** décrit en langage VHDL: - - * Sur vos postes de travail du GRM ou du laboratoire VLSI, placez vous dans le répertoire ''Tutos'': - -<code:bash> -[shell]% mkdir -p ~/Tutos/ -[shell]% cd ~/Tutos/ -</code> - - * Téléchargez les sources dans le répertoire ''git'': [[https://git.cmc.ca/mickael.fiorentino/vlsi_numerique|compteur.git]]. - -<code:bash> -[shell]% git clone https://git.cmc.ca/mickael.fiorentino/vlsi_numerique compteur -</code> - - * Téléchargez les sources au format ''zip'': {{tutos:compteur:compteur.zip?linkonly|compteur.zip}} - -<code:bash> -[shell]% unzip compteur.zip -d compteur -</code> - -Le tutoriel est décomposé en plusieurs parties, chacune couvrant une partie du flot de concepion standard en microélectronique: - - [[tutos:compteur:1_simulation|Simulation]] - - [[tutos:compteur:2_synthese|Synthèse]] - - [[tutos:compteur:3_implementation|Placement & Routage]] - - [[tutos:compteur:4_energie|Évaluation de la consommation d'énergie]]