Archivage automatique des projets par Quartus® II Tcl

author-image

Par

Lorsque vous effectuez de nombreuses compilations et que vous modifiez des paramètres différents au cours de chaque compilation, il peut être difficile de se souvenir quels étaient vos paramètres et résultats de la compilation à la compilation. En archivant un projet, vous pouvez en préserver une copie complète, y compris les fichiers générés au cours d’une compilation. Vous pouvez archiver un projet avec une seule commande à l’invite de commande d’un système, mais la création d’un script Tcl et l’ajout d’un paramètre pour l’exécuter facilitent le processus.

Pour exécuter automatiquement le script à la fin de chaque compilation, utilisez le script suivant et ajoutez une nouvelle affectation à votre projet. Le nom de la affectation est POST_FLOW_SCRIPT_FILE. Pour plus d’informations sur cette affectation, reportez-vous aux exemples d’exécution automatique du script. En supposant que le script soit nommé autoqar.tcl, ajoutez la cession suivante à votre fichier de paramètres Quartus II (.qsf) :

set_global_assignment -name POST_FLOW_SCRIPT_FILE quartus_sh:autoqar.tcl

Le script crée un nom de fichier en fonction de la date et de l’heure actuelles. Pour plus d’informations sur la modification de la date et de la représentation de l’heure, reportez-vous à la page Date et heure de mise en forme.

# Use these options to control what files get archived.
# -include_outputs: Includes Quartus II output files, including the
#     db directory and programming files
# -include_libraries: Includes system libraries referenced in your
#     project

set options "-include_outputs"
#set options "-include_libraries"
#set options "-include_outputs -include_libraries"

# Subdirectory to put the automatically created qars into
set qar_directory autoqar

# Generates a name for the qar based on the name of the revision
# and the current time.
proc generateQarName { project revision } {

    # time_format_string controls how the qar is named.
    # These values give the value month_dd_yyyy-hh.mm.ss.
    # For example, Jan_28_2004-13.00.05

    set time_format_string "%b_%d_%Y-%H_%M_%S"
    set time_value [clock format [clock seconds] \
      -format $time_format_string]

    # The name of the qar is based on the revision name and the time
    return $revision-$time_value
}

global quartus

set module_or_flow [lindex $quartus(args) 0]
set project [lindex $quartus(args) 1]
set revision [lindex $quartus(args) 2]

# If a qar is made, set this to 1 and attempt to move it later on
set ran_qar 0

# Add any modules or flows to the list in the switch statement
# As is, it'll make a qar after each compile, compile and simulate,
# and incremental fit.
switch -exact -- $module_or_flow {

    compile -
    compile_and_simulate -
    incremental_fitting {

    if { [catch {
        project_open -revision $revision $project
        set qar_name [generateQarName $project $revision]
        project_archive $options $qar_name
        project_close
    } res ] } {
        post_message -type warning $res
    } else {
        set ran_qar 1
    }
    }

}

# If a qar was made, try to move it to the right directory
if { $ran_qar } {

    if { [catch {

    file mkdir $qar_directory
    file copy $qar_name.qar $qar_directory
    file copy $qar_name.qarlog $qar_directory
    file delete $qar_name.qar
    file delete $qar_name.qarlog

    } res ] } {
    post_message -type warning $res
    } else {
         set qname [file join $qar_directory $qar_name]
    post_message "Successfully archived your project in $qname.qar"
    }
}

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.