Contoh skrip ini menunjukkan bagaimana Anda dapat mengakses nomor versi versi kontrol perangkat lunak untuk proyek Anda. Anda dapat menulis nomor versi dalam file desain yang dikompilasi dalam desain FPGA Anda. Dengan logika desain tambahan, nomor versi dapat dilaporkan oleh FPGA. Informasi ini dapat sangat berguna selama debugging, terutama jika Anda beralih antara beberapa file pemrograman. Anda dapat dengan mudah mengetahui versi desain mana yang berjalan pada FPGA, berdasarkan nomor versi di FPGA.
Contoh ini menggunakan nomor revisi Subversi untuk proyek Anda. Ini menggunakan perintah info svn untuk mendapatkan informasi tentang berkas yang ditentukan. Perintah info svn mencetak informasi tentang item dalam salinan kerja Anda, dan perintah berisi baris dengan nomor revisi, dalam bentuk berikut:
Revisi: nomor <revisi>
Contoh ini menggunakan dua prosedur untuk menjalankan perintah info svn dan menguraikan keluaran untuk mendapatkan nomor revisi. Prosedur get_subversion_revision memulai perintah info svn. Hubungi prosedur dengan nama file yang akan digunakan dengan perintah info svn. Prosedur akan kembali dengan galat jika perintah tidak dapat dijalankan. Jika tidak, prosedur ini tidak mengembalikan apa pun, tetapi menetapkan variabel global tertentu. Jika perintah info svn habis waktunya, nilai variabel global yang dilakukan adalah -1. Jika nomor revisi ditemukan, nilai variabel global yang dilakukan adalah 1 dan nomor revisi berada dalam variabel revision_number global. Anda dapat menampilkan nomor revisi dalam pesan, seperti dalam contoh ini, atau menuliskannya ke file desain.
Prosedur get_version_info adalah prosedur pembantu yang mengurai keluaran perintah suatu baris pada satu waktu. Ini termasuk ekspresi reguler yang cocok dengan baris nomor revisi dan mengekstrak nomor revisi.
proc get_subversion_revision { file_name } { global done # Jumlah maksimum detik untuk menunggu perintah svn info # selesaikan set timeout_seconds 30 # Perintah info svn dengan nama file yang dijalankan cmd "svn info ${file_name}" # Coba dapatkan informasi versi. # Jika perintah tidak dapat dijalankan, kembalikan galat. # Jika tidak mengatur peristiwa file untuk memproses keluaran perintah. if { [catch {open "|$cmd"} input] } { return -code error $input } else { fileevent $input dapat dibaca [list get_revision_info $input ] # Mengatur waktu habis sehingga proses tidak dapat hang jika repositori # sedang down. atur waktu habis [setelah [ expr { $timeout_detik * 1000 } ] \ [set daftar selesai -1] ] # Jangan lanjutkan hingga nomor revisi ditemukan, # atau waktu operasi habis. Tetap batalkan waktu habis. vwait dilakukan setelah pembatalan $timeout } } proc get_revision_info { inp } { global done revision_number if { [eof $inp] } { catch {close $inp} set done 1 } elseif { $done } { gets $inp line } else { gets $inp line # Gunakan ekspresi reguler untuk mencocokkan baris dengan nomor revisi #. jika { [regexp {^Revisi:\s+(\d+)\s*$} $line cocok revision_number] } { set done 1 } } set selesai 0 set revision_number "" # Nama file biasanya file proyek Anda .. qpf set file_name [lindex $quartus(args) 0] jika { [catch { get_subversion_revision $file_name } msg] } { post_message -type critical_warning "Tidak dapat menjalankan perintah untuk mendapatkan\ nomor revisi. $msg" } lain { if { -1 == $done } { post_message -type critical_warning "Timeout getting revision number." } elseif { [string equal "" $revision_number] } { post_message -type critical_warning \ "Tidak dapat menemukan nomor revisi dalam output info svn $file_name." } else { post_message "Revisi untuk $file_name is $revision_number" } }
Anda dapat menjalankan skrip di prompt perintah sistem dengan perintah berikut (dengan asumsi skrip ada di file yang bernama svn_revision.tcl):
quartus_sh -t svn_revision.tcl myproject.qpf
Skrip menghasilkan pesan seperti ini untuk menunjukkan revisi:
Info: Revisi untuk myproject.qpf adalah 417
Anda dapat menampilkan pesan dengan nomor revisi dalam variabel global revision_number, seperti dalam contoh ini, atau menuliskannya ke file desain.