Quartus® II Tcl จัดเก็บโครงการถาวรโดยอัตโนมัติ

author-image

โดย

เมื่อคุณทําการคอมไพล์จํานวนมากและเปลี่ยนการตั้งค่าที่แตกต่างกันระหว่างการคอมไพล์แต่ละครั้ง เป็นเรื่องยากที่จะจดจําว่าการตั้งค่าและผลลัพธ์ของคุณมาจากการคอมไพล์เป็นอย่างไร ด้วยการเก็บถาวรโครงการ คุณสามารถเก็บรักษาสําเนาทั้งหมดของโครงการรวมถึงไฟล์ที่สร้างขึ้นในระหว่างการคอมไพล์ คุณสามารถเก็บถาวรโครงการด้วยคําสั่งเดียวที่พร้อมท์คําสั่งของระบบ แต่สร้างสคริปต์ Tcl และเพิ่มการตั้งค่าเพื่อดําเนินการโดยอัตโนมัติทําให้กระบวนการง่ายขึ้น

หากต้องการให้สคริปต์ทํางานโดยอัตโนมัติเมื่อสิ้นสุดการคอมไพล์ทุกครั้ง ให้ใช้สคริปต์ต่อไปนี้ และเพิ่มการบ้านใหม่ให้กับโครงการของคุณ ชื่อการมอบหมายจะถูกPOST_FLOW_SCRIPT_FILE สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการบ้านนี้ โปรดดู ตัวอย่าง การดําเนินการสคริปต์อัตโนมัติ โดยสมมติให้ตั้งชื่อสคริปต์ autoqar.tcl เพิ่มการบ้านต่อไปนี้ไปยังไฟล์การตั้งค่า Quartus II (.qsf):

set_global_assignment -name POST_FLOW_SCRIPT_FILE quartus_sh:autoqar.tcl

สคริปต์จะสร้างชื่อไฟล์ตามวันที่และเวลาปัจจุบัน สําหรับข้อมูลเกี่ยวกับการเปลี่ยนการแสดงวันที่และเวลา โปรดดูหน้าการจัดรูปแบบวันที่และเวลา

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

เนื้อหาในหน้านี้เป็นการผสมผสานระหว่างการแปลเนื้อหาต้นฉบับภาษาอังกฤษโดยมนุษย์และคอมพิวเตอร์ เนื้อหานี้จัดทำขึ้นเพื่อความสะดวกของคุณและเพื่อเป็นข้อมูลทั่วไปเท่านั้นและไม่ควรอ้างอิงว่าสมบูรณ์หรือถูกต้อง หากมีความขัดแย้งใด ๆ ระหว่างเวอร์ชันภาษาอังกฤษของหน้านี้กับคำแปล เวอร์ชันภาษาอังกฤษจะมีผลเหนือกว่าและควบคุม ดูเวอร์ชันภาษาอังกฤษของหน้านี้