Quartus® II Tcl Dapatkan Nomor Revisi Subversi

author-image

Oleh

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.

Isi halaman ini adalah kombinasi terjemahan manusia dan komputer dari konten berbahasa Inggris. Konten ini diberikan hanya untuk kenyamanan Anda serta sebagai informasi umum dan tidak bisa dianggap sebagai lengkap atau akurat. Jika terdapat kontradiksi antara versi bahasa Inggris halaman ini dan terjemahannya, versi bahasa Inggris akan didahulukan. Lihat versi bahasa Inggris halaman ini.