在專案中保留版本編號的一種方法是在每次編譯期間增加檔案中的編號。若要執行此任務,腳本必須解析檔案以找到數位、遞增編號,然後用新號碼重寫檔案。如果檔案短,而且除了數位外,幾乎沒有其他內容,則腳本每次執行時都可以從頭開始寫入新檔案。然而,如果檔案是一個較長的設計檔案,則用版本編號編輯該行可能更為實用,而不是從頭寫出新檔案。
找到號碼
腳本使用一般表達方式來找出檔案中的號碼。編號的行應具有獨特的格式,否則多行可與一般表達方式相符。採用獨特格式的方式之一,就是在行號上加上一個獨特的評論。一般表達方式可以包含該獨特評論。以下為設計檔案中的一行範例,其中包含特別評論的版本編號行,以及與之相符的一般表達 Tcl 命令。
設計檔行
data_out <= 16'h41;設計版本編號
一般表達方式
RegExp {^\s+data_out <= \d+'h ([[:xdigit:]]+);// 設計版本編號$\ $line相符version_number
([*:xdigit:]]+)模式將六極數位與至少一個數位相符,並將它儲存在version_number命名的變數中。
遞增數量
您可以在 Tcl 中增加六倍數位。在 Tcl 中,六倍數位以領先 0 倍表示。如果您的版本編號不是以 0x 開頭,則在遞增數位之前,將數位轉換為基本 10 可能更容易。若為六倍數位,下列指令顯示將十六進位字串轉換為基本 10、遞增字串並將其轉換回十六進位的範例。
設定hex_value「AA」 掃描$hex_value 「%x」decimal_value incr decimal_value 設定為new_hex_value [格式化」$decimal_value] # $new_hex_value 現為「AB」
重新寫入檔案
如果設計檔案短且僅包含版本編號的相關資訊,則可以使用一系列 的放入 命令,以增增編號寫出新檔案。
如果設計檔案很長,通常只能變更版本編號的行號會更容易,因為在 Tcl 腳本中硬編碼檔案內容是不切實際的。
下列程式會透過設計檔案進行解析,並透過版本資訊更新線路。不符合一般表達方式的線條會寫入新檔案,但未經修改。符合一般表達方式的行有版本編號遞增,然後寫到新檔案。
proc update_version_number { input_file output_file\ \ # 如果輸入檔案無法開啟,請退回錯誤。 如果 { [捕捉 {open $input_file™ 輸入] { { 退回代碼錯誤 $input ] # 如果無法開啟輸出檔案, 如果 { [捕捉 {open $output_file w® 輸出] [ { 返回 -代碼錯誤 $output ] # 一次透過輸入檔案讀取一行錯誤, 而 {-1 != [取得$input行]\ \ # 此一般表達方式是特定 于網頁頂部附近的設計 # 檔行。 # 您必須酌情變更檔案。 如果 { [RegExp {^\s+data_out <= \d+'h ([[:xdigit:]]+); // 設計版本編號$\ $line相符 version_number] { \ # 將六進製版本編號轉換為基本 10 並遞增。 掃描$version_編號「%x」decimal_value incr decimal_value設定為new_version_number [格式化」$decimal_value] # 將新版本編號替換為舊的一個 regsub h${version_number® $line h${new_version_number® 行 [ # 寫出一行到新檔案中,$output $line關閉$input關閉$output [</pre>
在 Tcl 腳本中,您可以呼叫下列範例中的程式。假設您在系統命令提示下執行 Tcl 腳本,並提供檔案名稱以作為參數更新到腳本,則是寫入範例。
設定file_name [lindex $quartus (args) 0] 設定為 output_file_name ${file_name\.updated_version_number 如果 { [捕捉 { update_version_number $file_name $output_file_name [ res] { { { post_message -類型 critical_warning「無法更新版本編號:$res」\ 其他 { 如果 { [catch { 檔案重命名 -force $output_file_name $file_name [ res ] { { post_message -類型 critical_warning \ 「無法更新版本編號: $res 吋』