Progetti di archiviazione automatica Quartus® II Tcl

author-image

di

Quando si esegue molte compilazioni e si variano diverse impostazioni durante ciascuna compilazione, può essere difficile ricordare quali sono state le impostazioni e i risultati dalla compilazione alla compilazione. Archiviando un progetto, è possibile conservarne una copia completa, inclusi i file generati durante una compilazione. È possibile archiviare un progetto con un singolo comando al prompt dei comandi di sistema, ma la creazione di uno script Tcl e l'aggiunta di un'impostazione per eseguirlo automaticamente semplifica il processo.

Per eseguire automaticamente lo script alla fine di ogni compilazione, utilizzare il seguente script e aggiungere una nuova assegnazione al progetto. Il nome dell'assegnazione è POST_FLOW_SCRIPT_FILE. Per ulteriori informazioni su questa assegnazione, fare riferimento agli esempi di esecuzione automatica degli script. Supponendo che lo script sia denominato autoqar.tcl, aggiungere la seguente assegnazione al file delle impostazioni di Quartus II (.qsf):

set_global_assignment -name POST_FLOW_SCRIPT_FILE quartus_sh:autoqar.tcl

Lo script crea un nome di file in base alla data e all'ora correnti. Per informazioni sulla modifica della rappresentazione di data e ora, fare riferimento alla pagina Formattazione data e ora.

# 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"
    }
}

Il contenuto di questa pagina è il risultato della combinazione tra la traduzione umana e quella automatica del contenuto originale in lingua inglese. Questo contenuto è fornito soltanto a titolo di informazione generale e non ha pretese di completezza o accuratezza. In presenza di contraddizioni tra la versione in lingua inglese di questa pagina e la sua traduzione, fa fede la versione inglese. Visualizza la versione in lingua inglese di questa pagina.