Exemple Quartus® II Tcl : numéro de version incrément dans le fichier

author-image

Par

L’une des façons de maintenir un numéro de version de votre projet est d’incrémenter un nombre dans un fichier lors de chaque compilation. Pour effectuer cette tâche, un script doit parse le fichier pour localiser le numéro, l’incrémenter, puis le réécrire avec le nouveau numéro. Si le fichier est court et contient peu d’autre que le nombre, le script peut simplement écrire un nouveau fichier de toutes pièces chaque fois qu’il fonctionne. Cependant, si le fichier est un fichier de conception long, il peut être plus pratique de modifier la ligne avec le numéro de version au lieu d’écrire un nouveau fichier à partir de zéro.

Localiser le numéro

Le script utilise une expression régulière pour localiser le numéro dans le fichier. La ligne avec le numéro doit avoir un format unique, sinon plusieurs lignes peuvent correspondre à l’expression régulière. Un moyen de faire un format unique est d’inclure un commentaire unique sur la ligne avec le numéro. L’expression régulière peut inclure ce commentaire unique. Vous trouverez ci-dessous un exemple de ligne d’un fichier de conception possédant une ligne de numéro de version comprenant un commentaire spécial et l’expression régulière commande Tcl qui la correspond.

Ligne de fichiers de conception

data_out < = 16'h41 ; Numéro de version de la conception

Expression régulière

regexp {^\s+data_out <= \d+'h ([[:x≥it:]]+) ; // Design Version Number$} \ $line match version_number

Le([:xituit:]]+) correspond à un numéro hexociétique avec au moins un chiffre et le enregistre dans une variable de correspondance appelée version_number.

Incrément du numéro

Vous pouvez incrémenter les nombres hexculocys dans Tcl. Dans Tcl, les nombres hexculociaux sont indiqués avec un numéro 0x en tête. Si votre numéro de version ne commence pas par 0x, il peut être plus facile de convertir le numéro en base 10 avant de l’incrémenter. Pour un nombre hexocidique, les commandes suivantes montrent un exemple de conversion d’une chaîne hexocidique à la base 10, en l’incrémentant et en la convertissant en hexocidique.

définissez hex_value analyse « AA »
$hex_value « %x » decimal_value
incr
decimal_value définie new_hex_value [format « %X » $decimal_value]
# $new_hex_value est maintenant « AB »

Réécriture du fichier

Si le fichier de conception est court et contient des informations uniquement sur le numéro de version, vous pouvez utiliser une série de commandes puts pour écrire un nouveau fichier avec le numéro incrémenté.

Si le fichier de conception est long, il est généralement plus facile de ne modifier que la ligne avec le numéro de version, car le codage dur du contenu du fichier dans le script Tcl serait peu pratique.

La procédure suivante analyse un fichier de conception et met à jour la ligne avec les informations de version. Les lignes qui ne correspondent pas à l’expression régulière sont écrites dans un nouveau fichier, non modifié. La ligne correspondant à l’expression régulière est incrémentée par le numéro de version, puis écrite dans le nouveau fichier.

proc update_version_number { input_file output_file} {

    Si le fichier d’entrée ne peut pas être ouvert, retournez une erreur.
    si {[capture {open $input_file} ] }
        {erreur de retour de code $input
    } } Si le fichier de sortie ne peut pas être

    ouvert, renvoyez une erreur
    si {capture {open $output_file w} output] } { erreur de retour de code $output } # Lisez à la fois dans le fichier d’entrée une ligne
    tandis que {-1 != [obtient $input ligne] } { {Cette expression régulière est spécifique à la ligne de

        fichiers # de conception située en haut de la page
        Web.
        Nb. Vous devez le modifier selon les besoins de votre fichier.
        si {[regexp {^\s+data_out <= \d+'h([[:x≥it:]]+) ; // Design Version Number$} \ $line match version_number] } { { # Convert the hex≥ciiku version number to base ten and increment it. scan $version_number « %x » decimal_value incr decimal_value défini new_version_number [format « %X » $decimal_value] # Se faire une place dans le nouveau numéro de version de l’ancien fichier régresseur h{version_number} $line ligne h{new_version_number} } # Écrire la ligne dans le nouveau fichier met $output $line } fermez $input fermez $output   }</pré>

Dans un script Tcl, vous pouvez appeler la procédure comme illustré dans l’exemple suivant. L’exemple est écrit en supposant que vous exécutez le script Tcl à une invite de commande système et fournissez le nom du fichier à mettre à jour en tant qu’argument pour le script.

set file_name [$quartus(args) 0]
définissez output_file_name ${file_name}.updated_version_number

si {capture {{update_version_number $file_name $output_file_name } res] } { post_message -type critical_warning « Impossible de mettre à jour le numéro de
    version : $res » }
d’autre {

    si {[catch {file renommez -force $output_file_name $file_name } res ] } {
        post_message -type critical_warning \ « Impossible de
            mettre à jour le numéro de version :  } $res
    »

Le contenu de cette page est une combinaison de traduction humaine et informatique du contenu original en anglais. Ce contenu vous est fourni pour votre commodité et à titre informatif seulement et ne saurait être totalement exact ou complet. En cas de contradiction entre la version anglaise de cette page et la traduction, c'est la version anglaise qui prévaut. Afficher la version anglaise de cette page.