Grup waktu adalah cara efisien untuk membuat penetapan waktu. Anda dapat menentukan wildcard yang menyertakan node yang cocok dengan pola dalam grup, dan menentukan wildcard yang mengecualikan node yang cocok dengan pola dari grup. Anda mungkin perlu melihat daftar semua node dalam grup waktu untuk memverifikasi bahwa Anda menentukan pola wildcard yang tepat.
Skrip ini menguraikan node dalam suatu grup waktu dalam desain Anda. Skrip ini akan terhapus pada setiap node waktu dalam desain Anda, membandingkan nama node waktu dengan pola inklusi setiap grup waktu, kemudian setiap pola pengecualian grup waktu.
Ada batasan dengan skrip ini; tidak menangani grup waktu yang ditumpuk. Termasuk atau tidak termasuk grup waktu sebagai elemen grup waktu lain valid, tetapi tidak didukung oleh skrip ini.
Untuk menyertakan semua bit bus dalam suatu grup waktu, gunakan tanda bintang setelah nama bus di versi 4.2 dan di bawah perangkat lunak Quartus II. Dimulai dengan versi 5.0, Anda dapat menentukan nama bus tanpa tanda bintang. Skrip ini mencakup pemeriksaan perilaku ini, berdasarkan pada nomor versi perangkat lunak.
global quartus load_package advanced_timing load_package project # Menentukan apakah skrip berjalan di versi 4.2 dan sebelum, # atau 5.0 dan yang lebih baru. 5.0 dan yang lebih baru mengenali nama <bus> sebagai entri grup waktu yang valid, sementara 4.2 dan sebelumnya memerlukan nama # <bus>* sebagai entri grup waktu. regexp {^Version (\d)} $quartus(versi) cocok dengan qver jika { $qver < 5 } { set need_asterisk 1 } else { set need_asterisk 0 } project_open [lindex $quartus(args) 0] create_timing_netlist set tg_name [lindex tg_name [lindex project_open [lindex $quartus(args) 0] create_timing_netlist set tg_name [lindex tg_name $quartus(args) 1] post_message "Node berikut adalah anggota grup waktu $tg_name:" set tg_name [escape_brackets $tg_name] set tg_members [timegroup -get_members $tg_name] set tg_exceptions [timegroup -get_exceptions $tg_ name] # Loop ini melewati setiap node waktu dalam foreach_in_collection node_id desain [get_timing_nodes -type all] { set node_name [get_timing_node_info -info name $node_id] # Jika nama node tidak ada di bus, kosongkan bus_name. # Jika tidak mengaturnya. jika { ! [regexp {(.*?) \[\d+\]} $node_name cocok bus_name] } { set bus_name "" } # Sekarang kita memiliki nama node, periksa untuk melihat apakah cocok dengan # pola apa pun dalam rangkaian grup waktu yang ditentukan cocok dengan 0 anggota $tg_member foreach_in_collection { set esc_name [escape_brackets [lindex $member 2]] jika { [string cocok $esc_name $node_name] } { set cocok dengan 1 } elseif { ! ! $need_asterisk && \ [string cocok $esc_name $bus_name] } { set cocok 1 } } # Jika $matches 1 di sini, node waktu cocok dengan nama anggota # di grup waktu. Namun, masih bisa mencocokkan pengecualian. # Periksa untuk itu di sini. jika { $matches } { foreach_in_collection exception $tg_exceptions { set esc_name [escape_brackets [lindex $exception 2]] jika { [string cocok dengan $esc_name $node_name] } { set kecocokan 0 } elseif { ! $need_asterisk && \ [string match $esc_name $bus_name] } { set cocok dengan 0 } } } # Kami telah melihat semua pengecualian. Jika $matches masih 1, # maka nama node cocok dengan pola anggota dan tidak # cocok dengan pola pengecualian, jadi cetak nama node. jika { $matches } { post_message $node_name } } project_close