Cet exemple de script montre comment vous pouvez accéder au numéro de version du logiciel de contrôle de version de votre projet. Vous pouvez écrire le numéro de version dans un fichier de conception compilé dans votre FPGA conception. Avec une logique de conception supplémentaire, le numéro de version peut être signalé par le FPGA. Ces informations peuvent être très utiles lors du débogage, surtout si vous passez entre plusieurs fichiers de programmation. Vous pouvez facilement savoir quelle version de la conception fonctionne sur le FPGA, en fonction du numéro de version dans le FPGA.
Cet exemple utilise le numéro de révision Subversion pour votre projet. Elle utilise la commande svn info pour obtenir des informations sur le fichier spécifié. La commande svn info s’étend sur les articles de votre copie de travail et inclut une ligne indiquant le numéro de révision, sous la forme suivante :
Révision : numéro de <revision>
Cet exemple utilise deux procédures pour exécuter la commande svn info et parse la sortie pour obtenir le numéro de révision. La procédure get_subversion_revision démarre la commande svn info. Appelez la procédure utilisant le nom du fichier à utiliser avec la commande svn info. La procédure revient avec une erreur si la commande ne pouvait pas être exécutée. Sinon, la procédure ne renvoie rien, mais définit certaines variables globales. Si la commande svn info est expirée, la valeur de la variable globale effectuée est -1. Si le numéro de révision a été trouvé, la valeur de la variable globale effectuée est de 1 et le numéro de révision se trouve dans la variable revision_number globale. Vous pouvez afficher le numéro de révision dans un message, comme dans cet exemple, ou l’écrire dans un fichier de conception.
La procédure get_version_info est une procédure d’aide qui examine la sortie de commande une ligne à la fois. Il comprend une expression régulière qui correspond à la ligne de nombre de révision et extrait le numéro de révision.
proc get_subversion_revision { file_name } { global done # Le nombre maximum de secondes à attendre que la commande svn info # remplisse timeout_seconds 30 # La commande svn info avec nom de fichier qui est exécuté cmd « svn info ${file_name} » # Tentative d’obtenir les informations de version. # Si la commande ne peut pas être exécutée, retournez une erreur. # Sinon, configurez un événement de fichier pour traiter la sortie de commande. si {[capture {open « |$cmd"} input] } {erreur de retour de code $input } {fileevent $input lisible [liste get_revision_info $input ] # Configurez un délai de mise à l’arrêt afin que le processus ne puisse pas être suspendu si le référentiel #est désactivé. définir le délai d’expiration [après [expr { $timeout_secondes * 1000 } ] \ [list set done -1] ] # Ne continuez pas tant que le numéro de révision n’est pas trouvé, # ou les temps d’exploitation désactivés. Annuler le délai d’expiration de toute façon. s’appuyant sur l’annulation $timeout } } proc get_revision_info { inp } { global done revision_number if {[eof $inp] } { catch {close $inp} set done 1 } elseif { $done } { gets $inp line } else { obtient $inp ligne # Utiliser une expression régulière pour correspondre à la ligne avec le numéro de révision #. si {[regexp {^Revision:\s+(\d+)\s*$} $line match revision_number] } {set done 1 } } set done 0 set revision_number « » # Le nom du fichier est généralement votre fichier de projet .qpf set file_name [cplex $quartus(args) 0] si {[catch {get_subversion_revision $file_name} msg] } { post_message -type critical_warning « Impossible d’exécuter la commande pour obtenir\ numéro de révision. $msg » } d’autre { si {-1 == $done } { post_message -type critical_warning « Timeout getting revision number ». } elseif {[chaîne égale « » $revision_number] } { post_message $revision critical_warning de type $file \ « Impossible de trouver le numéro de révision en sortie de svn info $file_name ». } d’autre { post_message « Révision pour $file_name is $revision_number » } }
Vous pouvez exécuter le script à l’invite de commande du système avec la commande suivante (en supposant que le script se trouve dans un fichier nommé svn_revision.tcl):
quartus_sh -t svn_revision.tcl myproject.qpf
Le script produit un message comme celui-ci pour afficher la révision :
Infos : révision pour myproject.qpf est 417
Vous pouvez afficher un message avec le numéro de révision dans la variable globale revision_number, comme dans cet exemple, ou l’écrire dans un fichier de conception.