Quartus® II Tcl Beispiel: Alle Knoten in Timegroups

author-image

Von

Timegroups sind eine effiziente Möglichkeit, Zeitzuweisungen zu erstellen. Sie können Platzhalter angeben, die Knoten umfassen, die dem Muster in der Gruppe entsprechen, und Platzhalter angeben, die Knoten ausgeschlossen haben, die dem Muster aus der Gruppe entsprechen. Möglicherweise müssen Sie eine Liste aller Knoten in der Zeitgruppe sehen, um zu überprüfen, ob Sie die richtigen Platzhaltermuster angegeben haben.

Diese Skripts definieren die Knoten in einer Timegroup in Ihrem Design. Das Skript iteriert über jeden Timing-Knoten in Ihrem Design, vergleicht den Namen des timing-Knotens mit jedem Timegroup-Einschlussmuster und dann jedes Timegroup-Ausschlussmuster.

Für dieses Skript besteht eine Einschränkung; es verarbeitet keine verschachtelten Zeitgruppen. Die Einbeziehung oder der Ausschluss einer Timegroup als Element einer anderen Zeitgruppe ist gültig, wird von diesem Skript jedoch nicht unterstützt.

Um alle Bits eines Bus in eine Zeitgruppe aufzunehmen, verwenden Sie in Versionen 4.2 und unten der Software Quartus II ein Sternchen nach dem Busnamen. Ab Version 5.0 können Sie einen Busnamen ohne Sternchen angeben. Das Skript enthält eine Überprüfung auf dieses Verhalten basierend auf der Software-Versionsnummer.

Globaler Quartus
load_package advanced_timing
load_package

Projektnummer Bestimmen Sie, ob das Skript in 4.2 und vor,
# oder 5.0 und neuer ausgeführt wird. 5.0 und neuer erkennt <bus-Name> als 
gültigen Timegroup-Eintrag, während 4.2 und vor dem Erfordern
<bus-Name>* als Timegroup-Eintrag verwendet werden.
regexp {^Version (\d)} $quartus(version) match qver
if { $qver < 5 } { set
    need_asterisk 1 } else { set
need_asterisk
    0 } project_open

[$quartus(args) 0]

create_timing_netlist set tg_name

[bmcx $quartus(args) 1]

post_message "Die folgenden Knoten sind Mitglieder der Timegroup $tg_name:"

festgelegt tg_name [escape_brackets $tg_name]
festgelegt tg_members [timegroup -get_members $tg_name]
festgelegt tg_exceptions [timegroup -get_exceptions $tg_ name]

# Diese Schleife durchläuft jeden timing-Knoten im 
Design-foreach_in_collection node_id [get_timing_nodes -type all] {

    set node_name [get_timing_node_info -info name $node_id] # Wenn sich der

    Knotenname nicht in einem Bus befindet, löschen Sie die bus_name.
    Nr. Setzen Sie sie andernfalls.
    wenn { ! [regexp {(.*?) \[\d+\]} $node_name match bus_name] } {
        set bus_name "" } #
    
    Jetzt, da wir den Knotennamen haben, überprüfen Sie, ob es  
    mit #beliebigen Mustern im angegebenen  
    Zeitgruppensatz übereinstimmt, 0  
    foreach_in_collection Member $tg_members {

        set esc_name [escape_brackets [$member 2]]
        wenn { [string match $esc_name $node_name] } {
            set matches 1
        } elseif { ! $need_asterisk && \
            [string match $esc_name $bus_name] } {
            set matches 1
        } } # Wenn $matches hier

    1 ist, stimmte der Zeitknoten mit einer Mitgliedernamennummer  
    in der Zeitgruppe überein. Allerdings könnte es trotzdem mit einer Ausnahme übereinstimmen.  
    # Überprüfen Sie hier, ob dies der Grund dafür ist.
    wenn { $matches } {
        
        foreach_in_collection Exception $tg_exceptions {
            
            set esc_name [escape_brackets [$exception 2]]
            wenn { [string match $esc_name $node_name] } {
                set matches 0
            } elseif { ! $need_asterisk && \
                [string match $esc_name $bus_name] } {
                set matches 0
            } } } # Wir haben alle Ausnahmen

    angesehen. Wenn $matches immer noch 1 ist,
    stimmte der Knotenname mit dem Mitgliedermuster überein und stimmte nicht
    mit einem Ausnahmemuster überein. Drucken Sie also den Knotennamen aus.
    wenn { $matches } {
        post_message $node_name
    }
}

project_close

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.