Contoh Tcl Quartus® II: Menguraikan Node dalam Grup Waktu

author-image

Oleh

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

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.