Contoh Quartus® II Tcl: Tingkat Laporan Logika

author-image

Oleh

Ketika Anda mengoptimalkan desain, berguna untuk melihat informasi tentang tingkat logika di antara register. Skrip berikut menghasilkan Comma Separated Value (. csv) dengan jumlah jalur dengan tingkat logika yang berbeda dalam desain Anda. Anda dapat membuat bagan data ini atau membuat histogram di Excel yang menunjukkan distribusi jalur berdasarkan tingkat logika.

Jika dua register memiliki beberapa jalur logika di antaranya, hanya jalur dengan tingkat logika terbanyak yang dihitung oleh skrip ini. Misalnya, dua register dengan satu jalur empat tingkat dan satu dua tingkat akan dihitung sebagai satu jalur empat tingkat.

Skrip menghasilkan berkas CSV dengan namarevisi< >.levels_of_logic.csv.

Dengan asumsi Anda menyimpan skrip dalam file yang bernama report_levels_of_logic.tcl, Anda dapat menjalankannya dengan perintah berikut:

quartus_tan -t report_levels_of_logic.tcl -project <project name> [-<revision name>] [-name_pattern <string to match>]

Anda dapat menggunakan opsi -name_pattern untuk membatasi penghitungan jalur ke hierarki tertentu dalam desain Anda. Tentukan string yang cocok dengan pencocokan wildcard tool command language (Tcl). Jika Anda tidak menentukan nilai untuk opsi -name_pattern, asalinya adalah *. Misalnya, jika Anda ingin melaporkan tingkat logika di antara register dalam hierarki mult:inst6|lpm_mult:lpm_mult_component desain Anda, tentukan mult:inst6|lpm_mult:lpm_mult_component* untuk nilai opsi -name_pattern.

load_package advanced_timing paket
memerlukan pilihan set cmdline

{\
    { "project.arg" "" "Project name" } \
    { "revisi.arg" "" "Revisi nama" } \
    { "name_pattern.arg" "*" "Restrict to registers matching this pattern"}
} array set

opts [:cmdline::getoptions quartus(args) $options]
array set num_levels [list]

# Buka proyek dan dapatkan nama revisi
jika { [string equal "" $opts(revisi)] } {
    project_open $opts(project) -current_revision
} else {
    project_open $opts(project) -revisi $opts(revisi)
}
set rev [get_current_revision]

# Persiapkan netlist waktu
jika { [menangkap { create_timing_netlist; create_p2p_delays } res] } {
    post_message -type error $res project_close
    qexit -error
} #

Iterate through every register in the design
foreach_in_collection dest [get_timing_nodes -type reg] {

    # Dapatkan daftar keeper (register,  pin, clock)
    # yang disalurkan ke set node register
    delays_from_keepers [get_delays_from_keepers $dest]
    
    # Jika nama register tujuan tidak cocok dengan polanya, # cukup lanjutkan ke yang
    berikutnya.
    set dest_name [nama -get_timing_node_info -info $dest] jika
    {! [string yang cocok dengan $opts(name_pattern) $dest_name] } {
        continue } # Walk through all
    keeper feeding the register node
    foreach delay $delays_from_keepers {

        set src [lindex $delay 0]

        # Keeper dapat menyertakan pin dan clock, dan kami hanya ingin  mendaftar.
        jika { ! [string sama dengan "reg" [get_timing_node_info -info jenis $src]] } {
            continue } # Jika nama register sumber tidak cocok dengan

        polanya,
        # cukup lanjutkan ke set berikutnya src_name
        [get_timing_node_info -info name $src]
        jika {! [string yang cocok dengan $opts(name_pattern) $src_name] } {
            continue } # Pada titik

        ini, baik nama sumber dan tujuan #
        cocok dengan pola, dan ini adalah jalur register-to-register.
        # Perintah get_delay_path mengembalikan daftar node pada
        # sebuah jalur. Panjang jalur adalah panjang daftar.
        # Daftar ini mencakup register sumber dan tujuan,
        # sehingga tingkat logika antar register adalah -
  
  


2 set path
        [get_delay_path -type longest -from $src -to $dest]
        set levels_of_logic [expr { [llength $path] - 2 } ]
        
        # Simpan informasi dalam array jika {
        [info exists num_levels($levels_of_logic)] } {
            incr num_levels($levels_of_logic)
        } else { set
            num_levels($levels_of_logic) 1
        } } }

project_close

# Tulis informasi ke file
jika { [menangkap {open ${rev}.levels_of_logic.csv w} fh] } {
    post_message -type error $fh } else {
# Tulis header

    deskriptif ke file yang
    dimasukkan $fh "Tingkat logika untuk project $opts(() $rev revisi project)
    menempatkan $fh "File yang dihasilkan oleh Quartus® II $quartus(versi) pada \
        [clock format [clock seconds]]"
    menempatkan $fh "\nReporting paths untuk nama register yang cocok $opts(name_pattern)"
    menempatkan $fh "Tingkat logika,Angka dalam desain"

    tingkat foreach [lsort -integer [nama array num_levels]] {

        if { [catch { puts $fh "$level,$num_levels($level)" } res] } { post_message
            -type error $res break } }
    tangkapan { close $fh
} }

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.