Menggabungkan Data File SDO

author-image

Oleh

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)"

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.