此範例腳本顯示您如何存取專案的版本控制軟體版本編號。您可以在FPGA設計中編譯的設計檔案中寫入版本編號。透過額外的設計邏輯,FPGA可以報告版本編號。此資訊在除錯期間可能非常有用,特別是如果您切換多個程式設計檔案。您可以根據FPGA中的版本編號,輕鬆找出FPGA上執行哪一個版本的設計。
此範例使用您專案的顛覆修訂編號。它使用 svn 資訊 命令來取得特定檔案的相關資訊。 svn 資訊 命令會將有關專案的資訊列印到您的工作複本中,並且其中包含一行附有修訂編號,表單如下:
修訂版:<revision 編號>
此範例使用兩個程式執行 svn 資訊 指令,並解析輸出以取得修訂編號。 get_subversion_revision 程式會啟動 svn 資訊 指令。使用檔案名稱呼叫程式,以使用 svn 資訊 命令。如果無法執行命令,程式會以錯誤退回。否則,程式不會退回任何功能,但會設定特定的全球變數。如果 svn 資訊 指令超時,全球變數 的價值 是 -1。如果找到修訂編號,全球變數 的價值 為 1, 而修訂版本編號為 revision_number 全球變數。您可以在訊息中顯示修訂版編號,例如在此範例中,或將其寫入設計檔案中。
get_version_info程式是一種協助程式,可解析命令一次輸出一行。它包含一個與修訂編號行相符的定期表達,並播取修訂版編號。
proc get_subversion_revision { file_name { global 完成 # 等待 svn 資訊 # 命令完成設定timeout_seconds 30 #執行的 svn 資訊命令與檔案名稱的最大秒數 設定為 cmd「svn 資訊 ${file_name\」# 嘗試取得版本資訊。 # 如果無法執行命令,請退回錯誤。 # 以其他方式設定檔事件以處理命令輸出。 如果 { [擷取 {開啟「|$cmd」[ 輸入] \ { 退回代碼錯誤 $input \ 否則 { fileevent $input可讀 [清單get_revision_info $input] # 設定超時,使程式無法在 # 儲存庫關閉時掛斷。 設定超時 [在 [expr { $timeout_秒 * 1000 [ [清單集完成 -1] 之後 ]# 請勿繼續,直到找到修訂編號 、# 或操作時間完成。反正取消超時。 vwait 在 取消後完成$timeout ® proc get_revision_info { inp = { global 完成revision_number 如果 { [eof $inp] { catch {close $inp® 設定完成 1 [ elseif { $done \ 得到$inp行 [ 其他 { 得到$inp行 # 使用一般表達來符合 修訂編號的行號。 如果 { [RegExp {^修訂版:\s+(\d+)\s*$® $line比 revision_number] { { set done 1 = \ = 設定完成 0 設定revision_number「」# 檔案名稱通常是您的專案檔案 。 qpf 設定 file_name [lindex $quartus (args) 0],如果 { [捕捉 { get_subversion_revision $file_name [ msg] { { post_message -類型 critical_warning「無法執行命令以取得\ 修訂編號。 $msg」\ 其他 { 如果 { -1 =$done = { post_message -type critical_warning「超時取得修訂編號 」。[ elseif { [字串等於」$revision_編號] { { post_message $file類型critical_warning \ 「無法找到 svn 資訊輸出$file_name 的修訂編號。」 { 其他 { post_message「$file_name 的修訂版是$revision_編號 」。
您可以在系統命令提示下使用下列命令執行腳本 (假設腳本位於 svn_revision.tcl)的檔案中):
quartus_sh -t svn_revision.tcl myproject.qpf
腳本會產生這樣的訊息,以顯示修訂版:
資訊:myproject.qpf 修訂版為 417
您可以在全球變數 revision_number中顯示具有修訂編號的訊息,例如在此範例中,或將其寫入設計檔案中。