Quartus® II Tcl Tự động lưu trữ các dự án

author-image

Bởi

Khi bạn biên dịch nhiều và thay đổi các cài đặt khác nhau trong mỗi lần biên dịch, bạn sẽ khó có thể nhớ được cài đặt và kết quả của bạn là gì từ biên dịch đến biên dịch. Bằng cách lưu trữ một dự án, bạn có thể duy trì một bản sao hoàn chỉnh của dự án, bao gồm các tệp được tạo trong quá trình biên dịch. Bạn có thể lưu trữ một dự án với một lệnh duy nhất tại dấu nhắc lệnh hệ thống, nhưng tạo lệnh Tcl và thêm cài đặt để thực thi nó tự động giúp quá trình này trở nên dễ dàng hơn.

Để lệnh được tự động chạy vào cuối mỗi tập biên dịch, hãy sử dụng kịch bản sau và thêm một tác vụ mới vào dự án của bạn. Tên bài tập là tên POST_FLOW_SCRIPT_FILE. Để biết thêm thông tin về tác vụ này, hãy tham khảo các ví dụ Thực thi Lệnh Tự động. Giả định lệnh có tên autoqar.tcl, thêm bài tập sau vào Tập tin Cài đặt Quartus II (.qsf) của bạn):

set_global_assignment -name POST_FLOW_SCRIPT_FILE quartus_sh:autoqar.tcl

Tập lệnh tạo ra một tên tệp dựa trên ngày và giờ hiện tại. Để biết thông tin về việc thay đổi đại diện ngày và giờ, hãy tham khảo trang Định dạng Ngày & Thời gian.

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

Nội dung gốc bằng tiếng Anh trên trang này vừa do con người vừa do máy dịch. Nội dung này chỉ để cung cấp thông tin chung và giúp quý vị thuận tiện. Quý vị không nên tin đây là thông tin hoàn chỉnh hoặc chính xác. Nếu có bất kỳ mâu thuẫn nào giữa bản tiếng Anh và bản dịch của trang này, thì bản tiếng Anh sẽ chi phối và kiểm soát. Xem phiên bản tiếng Anh của trang này.