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 } }