Knoten in der Quartus II Timing-Netliste werden mit IDs bezeichnet, die positive Integer sind. Jeder Knoten hat einen Namen, den Namen in der Netzliste nach der Installation. Wenn Sie mit der Timing-Netliste mit Befehlen im Paket ::quartus::advanced_timing arbeiten, ist es üblich, einen Knoten basierend auf seinem Namen zu suchen. Beispielsweise können Sie den Lüfter eines bestimmten I/O-Pins verfolgen. Um dies zu tun, müssen Sie die Knoten-ID finden, die den Pin-Namen hat, von dem Sie verfolgen möchten. Das nachstehende Beispielverfahren sucht alle Timing-Knoten in der Netliste nach dem Namen, den Sie angeben, und gibt die ID des passenden Knotens zurück, oder -1, falls dieser nicht vorhanden ist.
Paket erfordert::quartus::advanced_timing proc find { name } { foreach_in_collection node_id [get_timing_nodes -type all] { set node_name [get_timing_node_info -info name $node_id] if { [string equal $name $node_name ] } { return $node_id } return -1 }
In einem Tcl-Skript können Sie dieses Verfahren aufrufen, wie im folgenden Beispiel gezeigt:
set id [find clk_33MHz] if { $id == -1 } {post_message -type warning "Couldn't find clock pin node" }
Verbesserung des Beispielcodes
Es gibt eine Vielzahl von Möglichkeiten, wie der Beispielcode verbessert werden kann.
- Hinzufügen von Wildcard-Unterstützung und mehrere zurückgesandten IDs
- Hinzufügen der Filterung mit Knotentyp
Hinzufügen von Wildcard-Unterstützung und mehrere zurückgesandten IDs
Die Anforderung einer genauen Übereinstimmung wird bei Namen mit langen Hierarchiepfaden unpraktisch. Durch Änderung des Beispiels zur Unterstützung von Wildcard-Übereinstimmungen wird es einfacher, nach Knoten mit langen Hierarchiepfaden zu suchen. Mit einer zusätzlichen Änderung zur Rückgabe mehrerer Knoten-IDs für alle Übereinstimmungen können Sie das Skript verwenden, um Gruppen von Knoten-IDs zurückzugeben. Dies erleichtert es z. B., alle Bits in einem Bus zu iterieren.
Da ein Platzhalter mit mehr als einem Namen übereinstimmen kann, ist es erforderlich, mehrere zurückgegebene IDs zu unterstützen. Eine einfache Möglichkeit dazu ist die Rückgabe einer Liste aller Knoten-IDs mit Namen, die dem Muster entsprechen. Wenn keine Namen mit dem Muster übereinstimmen, wird eine leere Liste zurückgegeben.
Das nachstehende Beispiel sucht alle Knoten in der Timing-Netliste und gibt eine Liste mit jeder Knoten-ID zurück, die einen zum Muster passenden Namen hat. Dieses Beispiel verwendet eine Übereinstimmung im Tcl-Formvergleich, mit Unterstützung für Sternchen (*), Fragezeichen (?) und eckigen Halterungen ([]).
Paket erfordern::quartus::advanced_timing proc find { pattern } { set return_ids {} foreach_in_collection node_id [get_timing_nodes -type all] { set node_name [get_timing_node_info -info name $node_id] if { [string match $pattern $node_name ] } { lappend return_ids $node_id } return $return_ids }
Denken Sie daran, dass Tcl eckige Halterungen verwendet, um Zeichen zu begrenzen, die mit dem String-Match-Befehl übereinstimmen. Der Aufruf des Find-Befehls, wie im folgenden Beispiel gezeigt, entspricht addr1 und addr0, nicht addr[10]!
Übereinstimmungen einstellen [Addr finden[10]]
Da Busnamen eckige Halterungen verwenden, um auf einzelne Bits hinzuweisen, sollten Sie Muster mit eckigen Halterungen, die als Bus-Bit-Se Selectors verwendet werden, verwenden. Der Aufruf des Find-Befehls wie im folgenden Beispiel mit dem befehl escape_brackets gibt die Knoten-ID für den Knoten namens addr[10] zurück.
Übereinstimmungen einstellen [suchen [escape_brackets Addr[10]]]
Sie sollten immer den Befehl escape_brackets verwenden, um Muster zu erkennen, die Sie in den Befehl find eingeben, es sei denn, Sie möchten quadratische Halterungen verwenden, um einen entsprechenden Zeichenbereich erreichen.
Hinzufügen der Filterung mit Knotentyp
Möglicherweise möchten Sie die Arten von Knoten beschränken, die nach einem passenden Namen gesucht werden. Dies kann die Suche in einem Design mit einer großen Timing-Netlist beschleunigen. Sie können die Option -Typ für den Befehl get_timing_nodes verwenden, um die Knoten in der zurückgesandten Sammlung auf Pins, Register, Takte und verschiedene andere Arten von Knoten ensprechen.
Das nachstehende Beispiel baut auf dem vorherigen Beispiel der Musterübereinstimmung auf. Wenn kein Muster angegeben ist, ist die Standardeinstellung*, um alles zu entsprechen. Es gibt eine Option zur Einschränkung des Knotentyps, der standardmäßig auf alle eingestellt ist.
In diesem Beispiel wird das cmdline Tcl-Paket verwendet, das in der Quartus II Software enthalten ist, um eine einfache Möglichkeit einzurichten, das Verfahren auf selbstdokumentierende Weise zu durchlaufen.
Paket erfordert::quartus::advanced_timing Paket erfordert cmdline proc find { args } { set options {\ { "pattern.arg" "*" "Pattern to search for" } \ { "type.arg" "all" "Node type to search" } \ } array set opts [::cmdline::: getoptions args $options] setzen return_ids {} foreach_in_collection node_id [get_timing_nodes -type $opts(type)] { set node_name [get_timing_node_info -info name $node_id] wenn { [string match $opts(muster) $node_name ] } { lappend return_ids $node_id } } rückgabe $return_ids }
Der folgende Code zeigt einige Möglichkeiten, das vorherige Beispiel zu verwenden.
# Gibt jede Knoten-ID in der Timing-Netliste zurück. # Pattern defaults to * # Type defaults to all find # Returns node IDs aller Pins in der Timing-Netlist # Pattern standards to * find -type pin # Gibt Knoten-IDs von Pins zurück, die mit addr find -pattern addr* -type pin # gibt Knoten-IDs in Bit 0 eines Bus-Find-Musters zurück [escape_brackets *[0]] -type reg]