Introduction
Lorsqu'un design FPGA n'atteint pas la convergence temporelle (timing closure), c'est-à-dire ne satisfait pas ses contraintes temporelles (timing constraints), la démarche naturelle consiste à examiner attentivement les chemins critiques (critical paths). Cet examen se fait sur la base d'un rapport d'analyse temporelle qui indique les délais introduits par les différents éléments logiques le long de chaque chemin (path).
Si vous n'êtes pas un utilisateur intensif des FPGA d'Intel, savoir comment obtenir ce rapport peut ne pas sembler évident. Pire encore, il est possible de consulter, sans le savoir, le mauvais rapport.
La première chose à clarifier est le concept d'analyse temporelle multi-corner. La pratique courante consiste à vérifier la validité des performances temporelles d'un FPGA en s'assurant que les contraintes temporelles sont satisfaites dans quatre cas : températures minimale et maximale, combinées à un modèle de délais « lent » (slow) ou « rapide » (fast). L'analyse est donc menée pour quatre combinaisons, que l'on appelle les quatre coins de fonctionnement (four corners).
Il est donc important d'examiner les rapports d'analyse temporelle des quatre coins lorsqu'on étudie les chemins critiques. Ce point est souvent négligé. TimeQuest, par exemple, ne génère généralement un rapport d'analyse temporelle que pour un seul coin.
Cet article explique donc comment obtenir un rapport qui soit réellement exploitable. Les exemples se rapportent à Quartus Prime 17.1 Lite.
Deux autres articles méritent d'être mentionnés : l'un examine la relation entre les contraintes d'entrée/sortie et le rapport d'analyse temporelle, tandis qu'un autre fait quelques essais avec les scripts Tcl dans TimeQuest.
Important : cette page explique comment obtenir le rapport d'analyse temporelle pour la vérification du temps de préparation (setup). Il existe par ailleurs des rapports pour le temps de maintien (hold), la récupération (recovery) et le retrait (removal). Ces rapports peuvent également révéler un non-respect des contraintes temporelles.
Créer un rapport multi-corner : méthode rapide avec des scripts
Commencez par copier le script Tcl suivant dans un fichier, par exemple timing.tcl :
create_timing_netlist
read_sdc
update_timing_netlist
foreach_in_collection op [get_available_operating_conditions] {
set_operating_conditions $op
report_timing -setup -npaths 20 -detail full_path -multi_corner \
-panel_name "Critical paths"
}
Notez que le rapport d'analyse temporelle est limité à la seule vérification du temps de préparation (setup).
Ne vous laissez pas tromper par l'option « multi_corner » : chaque appel à report_timing ne couvre qu'un seul coin. Il n'est d'ailleurs pas évident que cette option ait le moindre effet.
C'est pourquoi le script boucle sur les quatre options (avec foreach_in_collection) et génère un rapport séparé pour chaque coin.
Passons à l'action :
- Dans Quartus, déployez le groupe TimeQuest du volet Tasks (tâches), puis ouvrez TimeQuest Timing Analyzer.
- Dans TimeQuest Timing Analyzer, choisissez Script > Run Tcl Script… dans la barre de menus, puis sélectionnez le script Tcl (par exemple timing.tcl).
- Une entrée nommée « Critical paths » (chemins critiques) est ajoutée au volet Report (rapport) de TimeQuest Timing Analyzer. Cliquez sur Multi-Corner Summary. Une liste des chemins, accompagnée de leurs détails, remplit alors les volets principaux.
- Pour exporter toutes les informations sur les chemins dans un fichier texte, faites un clic droit sur Multi-Corner Summary et choisissez « Export… ». Donnez un nom au fichier de sortie avec l'extension .rpt. Les rapports HTML ne sont pas pris en charge (ils seraient vides).
Quatre rapports séparés apparaîtront également dans la même entrée, un pour chaque coin. Dans les versions antérieures de Quartus, seuls ces derniers sont affichés (c'est-à-dire pas de Multi-Corner Summary).
Générer uniquement des rapports HTML / texte
Les outils peuvent générer de jolis rapports HTML, nettement plus agréables à lire que l'interface graphique de TimeQuest. Malheureusement, chacun de ces rapports ne couvre qu'un seul coin. Le script ci-dessous génère quatre rapports HTML distincts, un pour chaque coin (cela fait beaucoup de fichiers : scripts JQuery, CSS et autres. Tout le tralala, mais pas un rapport multi-corner).
Prenons par exemple le script suivant, à sauvegarder sous timing-html.tcl :
#project_open myproj
create_timing_netlist
read_sdc
update_timing_netlist
foreach_in_collection op [get_available_operating_conditions] {
set_operating_conditions $op
report_timing -setup -npaths 20 -detail full_path -multi_corner \
-file "timing_paths_$op.html" \
-panel_name "Critical paths for $op"
}
Pour obtenir un simple rapport texte, modifiez l'argument de l'option -file de façon à ce que l'extension soit .rpt ou .txt au lieu de .html.
Remarquez la commande « project_open » qui est mise en commentaire en haut du script. Si on la décommente et qu'on remplace « myproj » par le nom réel du projet, une simple ligne de commande shell permet de générer les rapports HTML, par exemple :
$ /path/to/quartus/bin/quartus_sta -t timing-html.tcl
Je n'ai toutefois pas trouvé de moyen de générer ainsi un rapport multi-corner.
Pour que ces rapports soient générés à chaque implémentation (ce qui est recommandé), ajoutez une ligne comme celle-ci au fichier QSF :
set_global_assignment -name TIMEQUEST_REPORT_SCRIPT relative/path/to/timing-html.tcl
Lorsque le script Tcl est inclus de cette façon dans un fichier QSF, le script ne doit pas utiliser project_open.
En passant uniquement par l'interface graphique
On peut également obtenir un rapport multi-corner en cliquant simplement :
- Dans Quartus, déployez le groupe TimeQuest du volet Tasks (tâches), puis ouvrez TimeQuest Timing Analyzer.
- Dans le volet Tasks du Timing Analyzer, double-cliquez sur « Update Timing Netlist ».
- Dans le même volet, faites défiler jusqu'à « Custom Reports » et double-cliquez sur « Report Timing… ».
- Une boîte de dialogue s'ouvre. Choisissez le type de vérification : temps de préparation (setup), temps de maintien (hold), récupération (recovery) ou retrait (removal). Pour le reste, conservez les valeurs par défaut et cliquez sur « Report Timing » en bas.
- Dans le volet Report, une entrée intitulée « Report Timing » est ajoutée. Déployez cette entrée, puis faites un clic droit dessus. Dans le menu qui s'ouvre, cliquez sur « Generate in All Corners ».
- Cliquez ensuite sur le groupe « Multi Corner Summary ». Vous pouvez éventuellement exporter le rapport comme expliqué plus haut.