Quartus® II Tcl Mengarsip Proyek Secara Otomatis

author-image

Oleh

Ketika Anda melakukan banyak kompilasi dan berbagai pengaturan berbeda selama setiap kompilasi, sulit untuk mengingat pengaturan dan hasil dari kompilasi hingga kompilasi. Dengan mengarsip proyek, Anda dapat mempertahankan salinan lengkapnya, termasuk file yang dihasilkan selama kompilasi. Anda dapat mengarsipkan proyek dengan satu perintah pada prompt perintah sistem, tetapi membuat skrip Tcl dan menambahkan pengaturan untuk menjalankannya secara otomatis membuat proses menjadi lebih mudah.

Untuk membuat skrip berjalan secara otomatis di akhir setiap kompilasi, gunakan skrip berikut, dan tambahkan tugas baru ke proyek Anda. Nama penugasan POST_FLOW_SCRIPT_FILE. Untuk informasi lebih lanjut tentang penetapan ini, lihat contoh Eksekusi Skrip Otomatis. Dengan asumsi skrip diberi nama autoqar.tcl, tambahkan tugas berikut ke File Pengaturan Quartus II Anda (.qsf):

set_global_assignment -name POST_FLOW_SCRIPT_FILE quartus_sh:autoqar.tcl

Skrip membuat nama file berdasarkan tanggal dan waktu saat ini. Untuk informasi tentang mengubah representasi tanggal dan waktu, lihat halaman Pemformatan Tanggal & Waktu.

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

Isi halaman ini adalah kombinasi terjemahan manusia dan komputer dari konten berbahasa Inggris. Konten ini diberikan hanya untuk kenyamanan Anda serta sebagai informasi umum dan tidak bisa dianggap sebagai lengkap atau akurat. Jika terdapat kontradiksi antara versi bahasa Inggris halaman ini dan terjemahannya, versi bahasa Inggris akan didahulukan. Lihat versi bahasa Inggris halaman ini.