Kịch bản mẫu này cho thấy cách bạn có thể truy cập số phiên bản phần mềm điều khiển phiên bản cho dự án của mình. Bạn có thể ghi số phiên bản trong tệp thiết kế được biên dịch trong thiết kế FPGA của bạn. Với logic thiết kế bổ sung, số phiên bản có thể được báo cáo bởi FPGA. Thông tin này có thể rất hữu ích trong quá trình gỡ lỗi, đặc biệt là nếu bạn chuyển đổi giữa nhiều tệp lập trình. Bạn có thể dễ dàng tìm hiểu phiên bản thiết kế đang chạy trên FPGA, dựa trên số phiên bản trong FPGA.
Ví dụ này sử dụng số hiệu phiên bản Subversion cho dự án của bạn. Nó sử dụng lệnh thông tin svn để nhận thông tin về tập tin được chỉ định. Lệnh svn info in thông tin về các mục trong bản sao làm việc của bạn và nó bao gồm một dòng có số hiệu sửa đổi, dưới hình thức sau:
Bản sửa đổi: < sửa đổi>
Ví dụ này sử dụng hai quy trình để chạy lệnh svn info và phân tích cú pháp đầu ra để lấy số hiệu sửa đổi. Quy trình get_subversion_revision bắt đầu lệnh svn info. Gọi thủ tục với tên tệp để sử dụng với lệnh thông tin svn. Quy trình trả về với lỗi nếu không thể chạy lệnh. Nếu không, quy trình trả về không có gì, nhưng đặt ra một số biến toàn cầu nhất định. Nếu lệnh thông tin svn hết thời gian chờ, giá trị của biến toàn cầu được thực hiện là -1. Nếu tìm thấy số hiệu sửa đổi, giá trị của biến toàn cầu được thực hiện là 1 và số hiệu sửa đổi nằm trong biến revision_number cầu. Bạn có thể hiển thị số hiệu chỉnh trong một tin nhắn, như trong ví dụ này hoặc ghi nó vào một tập tin thiết kế.
Quy get_version_info mềm là một quy trình trợ giúp phân tích cú pháp đầu ra một dòng lệnh tại một thời điểm. Nó bao gồm một biểu thức thông thường khớp với dòng số hiệu chỉnh và trích xuất số hiệu sửa đổi.
proc get_subversion_revision { file_name } { global done # Số giây tối đa để chờ lệnh svn info # hoàn thành đặt timeout_seconds 30 # Lệnh thông tin svn có tên tệp được chạy cmd "svn info ${file_name}" # Nỗ lực để lấy thông tin phiên bản. # Nếu không thể chạy lệnh, hãy trả lại lỗi. # Thiết lập sự kiện tập tin để xử lý đầu ra lệnh. nếu { [lần truy cập {mở "|$cmd"} đầu vào] } { lỗi mã trả lại $input } khác { tệp phát hành $input có thể đọc được [danh sách get_revision_info $input ] # Thiết lập thời gian chờ để quá trình không thể treo nếu kho lưu trữ # bị lỗi. set timeout [after [ expr { $timeout_seconds * 1000 } ] \ [list set done -1] ] # Không tiếp tục cho đến khi tìm thấy số hiệu sửa đổi, # hoặc thời gian hoạt động hết. Vẫn hủy thời gian chờ. vwait được thực hiện sau khi hủy $timeout } } proc get_revision_info { inp } { global done revision_number if { [eof $inp] } { dấu {close $inp} set done 1 } elseif { $done } { gets $inp line } else { gets $inp line # Sử dụng một biểu thức thông thường để khớp với số hiệu phiên bản # nếu { [regexp {^Revision:\s+(\d+)\s*$} $line match revision_number] } { set done 1 } } } set done 0 set revision_number "" # Tên tệp thường là tập tin dự án của bạn .[ qpf set file_name [lindex $quartus(args) 0] nếu { [lượt truy cập { get_subversion_revision $file_name } msg] } { post_message -type critical_warning "Đối tượng không chạy lệnh để nhận\ số phiên bản. $msg" } khác { nếu { -1 == $done } { post_message -type critical_warning "Timeout getting revision number." } elseif { [string equal "" $revision_number] } { post_message post_message -type critical_warning \ "Không tìm thấy số hiệu chỉnh sửa đổi ở đầu ra của svn info $file_name." } khác { post_message "Bản sửa đổi cho $file_name là $revision_number" } }
Bạn có thể chạy kịch bản tại dấu nhắc lệnh hệ thống với lệnh sau (giả định lệnh là trong tệp có tên svn_revision.tcl):
quartus_sh -t svn_revision.tcl myproject.qpf
Kịch bản tạo ra một thông điệp như thế này để hiển thị bản sửa đổi:
Thông tin: Bản sửa đổi cho myproject.qpf là 417
Bạn có thể hiển thị một tin nhắn với số hiệu sửa đổi trong revision_numberbiến toàn cầu , như trong ví dụ này hoặc ghi nó vào một tập tin thiết kế.