Contoh Quartus® II Tcl: Nomor Versi Tambahan dalam File

author-image

Oleh

Salah satu cara mempertahankan nomor versi dalam proyek Anda adalah dengan menambah angka dalam file selama setiap kompilasi. Untuk melakukan tugas ini, skrip harus menguraikan berkas untuk menemukan nomor, menambahnya, lalu tulis ulang berkas dengan nomor baru. Jika file pendek dan berisi hal lain selain nomor, skrip dapat menulis file baru dari nol setiap kali berjalan. Namun, jika file adalah file desain yang panjang, mungkin lebih praktis untuk mengedit baris dengan nomor versi alih-alih menulis file baru dari nol.

Temukan Nomornya

Skrip menggunakan ekspresi reguler untuk menemukan nomor di file. Baris dengan angka harus memiliki format unik, jika tidak, beberapa baris dapat mencocokkan ekspresi reguler. Salah satu cara untuk membuat format unik adalah dengan menyertakan komentar unik pada baris dengan nomor tersebut. Ekspresi reguler dapat mencakup komentar unik tersebut. Berikut adalah contoh baris dalam file desain dengan baris nomor versi yang menyertakan komentar khusus, dan perintah Tcl ekspresi reguler yang cocok.

Garis File Desain

data_out <= 16'h41; Nomor Versi Desain

Ekspresi Reguler

regexp {^\s+data_out <= \d+'h([[:xdigit:]]+); // Design Version Number$} \ $line cocok version_number

Pola ([[:xdigit:]]+)cocok dengan angka heksadesimal dengan setidaknya satu digit dan menyimpannya dalam variabel yang cocok dengan nama version_number.

Kenaikan Angka

Anda dapat menaikkan angka heksadesimal dalam Tcl. Dalam Tcl, angka heksadesimal ditunjukkan dengan 0x terdepan. Jika nomor versi Anda tidak dimulai dengan 0x, mungkin lebih mudah untuk mengonversi angka menjadi dasar 10 sebelum Anda menambahnya. Untuk angka heksadesimal, perintah berikut menunjukkan contoh mengonversi string heksadesimal ke base 10, menambahnya, dan mengonversinya kembali ke heksadesimal.

set hex_value "AA"
scan $hex_value "%x" decimal_value
incr decimal_value set new_hex_value
[format "%X" $decimal_value] #
$new_hex_value kini "AB"

Tulis Ulang File

Jika file desain pendek dan berisi informasi hanya tentang nomor versi, Anda dapat menggunakan serangkaian perintah puts untuk menulis file baru dengan nomor yang disertakan.

Jika file desain panjang, biasanya lebih mudah untuk mengubah hanya baris dengan nomor versi, karena mengkoding keras konten file dalam skrip Tcl akan menjadi tidak praktis.

Prosedur berikut mengurai file desain dan memperbarui baris dengan informasi versi. Baris yang tidak cocok dengan ekspresi reguler ditulis ke berkas baru, tidak dimodifikasi. Baris yang cocok dengan ekspresi reguler memiliki nomor versi yang mengalami peningkatan, kemudian ditulis ke file baru.

proc update_version_number { input_file output_file} {

    # Jika berkas input tidak dapat dibuka, kembalikan galat.
    jika { [menangkap {open $input_file} input] } {
        return -code error $input
    } # Jika file output tidak dapat

    dibuka, mengembalikan galat jika {
    [menangkap {open $output_file w} output] } {
        return -code error $output } #
    Membaca file input suatu baris
    sekaligus sementara {-1 != [mendapatkan $input baris] } {

        # Ekspresi reguler ini khusus untuk
        rangkaian file desain # di dekat bagian atas halaman web.
        # Anda harus mengubahnya sebagaimana sesuai untuk file Anda.
        jika { [regexp {^\s+data_out <= \d+'h([[:xdigit:]]+); // Design Version Number$} \ $line cocok version_number] } { # Konversi nomor versi heksadesimal menjadi sepuluh dasar dan menambahnya. scan $version_number "%x" decimal_value incr decimal_value set new_version_number [format "%X" $decimal_value] # Ganti nomor versi baru pada regsub lama h${version_number} $line h${new_version_number} line } # Tuliskan baris ke file baru yang dimasukkan $output $line } tutup $input tutup $output   }</pra>

Dalam skrip Tcl, Anda dapat menghubungi prosedur seperti yang ditunjukkan dalam contoh berikut. Contohnya ditulis dengan asumsi bahwa Anda menjalankan skrip Tcl di prompt perintah sistem, dan memberikan nama file untuk diperbarui sebagai argumen ke skrip.

set file_name [lindex $quartus(args) 0]
set output_file_name ${file_name}.updated_version_number

jika { [catch { update_version_number $file_name $output_file_name } res] } {
    post_message -type critical_warning "Tidak dapat memperbarui nomor versi: $res"
} else { if

    {[catch { file rename -force $output_file_name $file_name } res ] } {
        post_message -type critical_warning \
            "Tidak dapat memperbarui nomor versi:  $res"
    }
}

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.