Skrip ini membuat file SDO dengan parameter waktu gabungan dari dua file SDO yang dihasilkan oleh perangkat lunak Quartus® II selama analisis waktu maksimum dan minimum.
Perangkat lunak Quartus II menghasilkan file SDO terpisah yang menggunakan nilai tunda minimum atau maksimum untuk tiga nilai tunda di setiap triplet. Triplet dalam file SDO mendukung nilai tunda minimum, umum, dan maksimum seperti ini: (min:typ:max). File SDO yang dihasilkan oleh perangkat lunak Quartus II untuk analisis waktu maksimum memiliki triplet keterlambatan yang hanya mencakup nilai tunda maksimum, seperti ini: (maks:maks:maks). File SDO yang dihasilkan selama analisis waktu minimum berisi triplet keterlambatan yang hanya mencakup nilai tunda minimum, seperti ini: (menit:menit:menit).
Skrip ini memadukan file SDO dengan nilai minimum dan maksimum untuk membuat satu file dengan triplet yang memiliki angka minimum dan maksimum, seperti ini: (min:maks:maks). Perhatikan bahwa nilai tunda maksimum juga diduplikasi untuk nilai tunda pada umumnya. File yang dihasilkan oleh skrip ini tidak dijamin oleh Altera berfungsi untuk analisis minimum/maksimum campuran.
Jalankan skrip seperti ini: quartus_sh -t combine_sdo.tcl -min_sdo <min sdo file> -max_sdo <max sdo file> -new_sdo <new sdo file>
paket memerlukan variabel cmdline ::argv0 $::quartus(args) set options { \ { "min_sdo.arg" "" "Nama file SDO dengan waktu min" } \ { "max_sdo.arg" "" "Nama file SDO dengan waktu maksimal" } \ { "new_sdo.arg" "" "File nama SDO dengan waktu min/maks" } \ } array set opts [:cmdline::getoptions ::argv0 $options "Bad option"] set min [open $opts(min_sdo)] set maks [open $opts(max_sdo)] set baru [open $opts(new_sdo) w] # Lacak nomor baris di set file line_num 1 sementara { 1 } { # Baca baris berikutnya dari set file sdo menit dan maks more_min [mendapatkan $min min_line] yang diatur more_max [gets $max max_line] # Selesaikan ketika tidak ada lagi data dalam file jika { $more_min < 0 || $more_max < 0 } { # Ada kemungkinan bahwa satu file dapat memiliki lebih banyak baris # daripada yang lain. Peringatkan tentang hal itu di sini. jika { $more_min >= 0 } { post_message -type warning \ "Garis yang dilewati dimulai dengan baris $line_num di $opts(min_sdo)" } jika { $more_max >= 0 } { post_message -type warning \ "Melewati baris yang dimulai dengan line $line_num in $opts(max_sdo)" } # Karena setidaknya salah satu file tidak memiliki data lagi, # loop harus dihentikan. break } jika { [regexp {\(\d+:\d+:\\)} $min_line] } { # Jika baris memiliki triplet tunda di dalamnya, nilai # harus digabungkan # new_line mengumpulkan teks untuk dicetak. # line_differences diatur jika ada perbedaan pada garis # di samping kelambatan triplet. atur new_line "" set line_differences 0 # Meskipun ada triplet tertunda di baris... sementara { [regexp {\(\d+:\d+:\d+)} $min_line] } { # Ekstrak semuanya hingga triplet tunda, nilai # tunda itu sendiri, dan semuanya setelah #delay triplet regexp {^(.*?\()(\d+):\d+:\d+(\*$)} $min_line \ cocok min_start min_value min_line regexp {^((.*?\()\d+:\d+:(\d+)(\).*$)} $max_line \ match max_start max_value max_line # Atur flag jika ada perbedaan di baris # selain triplet tunda jika { ! [string sama $min_start $max_start] } { set line_differences 1 } # Letakkan triplet tunda gabungan bersama-sama dalam lampiran baris baru new_line $min_start \ $min_value : $max_value : $max_value } # Periksa teks apa pun di baris tersisa untuk selisih #. jika { ! [string sama $min_line $max_line] } { set line_differences 1 } jika { $line_differences } { post_message -type warning \ [join [list \ "Bagian baris $line_num ini berbeda." \ " $opts(min_sdo): $min_line" \ " $opts(max_sdo): $max_line"] \ "\n"] } Letakkan sisa baris, setelah triplet tunda terakhir, # bersama-sama di baris baru tambahkan new_line $min_line } else { # Jika baris tidak memiliki triplet tunda di dalamnya, # baris dari file menit dan maks harus # identik (kecuali misalnya jika ada stempel tanggal # di file). Lakukan pemeriksaan singkat untuk memastikan garis # sama dan cetak peringatan jika berbeda. jika { ! [string sama $min_line $max_line] } { post_message -type warning \ [join [list \ "Line $line_num is different." \ " File baru berisi baris pertama di bawah ini." \ " $opts(min_sdo): $min_line" \ " $opts(max_sdo): $max_line"] \ "\n"] } set new_line $min_line } # Tulis baris ke file gabungan $new $new_line incr line_num } # Selesai mengulang file. Tutup semua $min dekat $max dekat $new post_message "Selesai menggabungkan file ke $opts(new_sdo)"