Exemple de Quartus® II Tcl : trouver un nœud de synchronisation

author-image

Par

Les nœuds de la liste de synchronisation de Quartus II sont mentionnés avec les ID, qui sont des entiers positifs. Chaque nœud a un nom, le nom dans la liste de netlist post-montage. Lorsque vous travaillez sur la liste de synchronisation avec les commandes dans le package ::quartus::advanced_timing, il est courant de rechercher un nœud basé sur son nom. Par exemple, vous pouvez suivre le ventilateur d’une broche d’E/S particulière. Pour ce faire, vous devez trouver l’ID de nœud don’t le nom de broche est à suivre. La procédure suivante, par exemple, recherche tous les nœuds de synchronisation de la netlist pour le nom que spécifiez et retourne l’ID du nœud correspondant, ou -1 s’il n’existe pas.

package nécessite ::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]
           
        si {[string equal $name $node_name] } {
            Return $node_id
        } } Return   
    
    -1
}

Dans un script Tcl, vous pouvez appeler cette procédure comme illustré dans l’exemple suivant :

définir l’id [trouver clk_33MHz]
si { $id == -1 } { avertissement de type post_message « Impossible de trouver le nœud de broche
    d’horloge »
}

Améliorer l’exemple de code

Il existe différentes façons d’améliorer le code par exemple.

Ajouter la prise en charge des cartes génériques et plusieurs ID retournés

Le fait d’avoir besoin d’un correspondance exacte devient un peu plus encombrant pour les noms ont de longs chemins hiérarchiques. La modification de l’exemple pour prendre en charge les correspondances de wildcard permet de rechercher plus facilement des nœuds possédant de longs chemins de hiérarchie. Avec une modification supplémentaire pour retourner plusieurs ID de nœud pour toutes les correspondances, vous pouvez utiliser le script pour retourner des groupes d’ID de nœud. Cela facilite l’ération sur tous les bits d’un bus, par exemple.

Comme une carte wildcard peut correspondre à plusieurs noms, il est nécessaire de prendre en charge plusieurs ID retournés. Un moyen facile de le faire est de retourner une liste de tous les ID de nœud avec des noms correspondant au schéma. Si aucun nom ne correspond au schéma, une liste vide est retournée.

L’exemple suivant recherche tous les nœuds de la liste de synchronisation et renvoy une liste à chaque ID de nœud don’t le nom correspond au schéma. Cet exemple utilise la correspondance de type tcl et de style acl, avec prise en charge des astérisques (*), des marques d’interrogation (?) et des supports carrés ([]).

le package nécessite ::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] } {
            lall return_ids $node_id
        } retourner   
    
    $return_ids
}

N’oubliez pas que Tcl utilise des supports carrés pour délimiter les caractères pour correspondre à la commande de match de chaîne. Appeler la commande de recherche comme illustré dans l’exemple suivant correspondent à addr1 et addr0, pas à addr[10] !

définir les correspondances [trouver l’addr[10]]

Les noms des bus utilisant des supports carrés pour indiquer des bits individuels, vous devez éviter les modèles avec des supports carrés utilisés comme sélecteurs de bits de bus. Appeler la commande find (Trouver) comme indiqué dans l’exemple suivant, avec la commande escape_brackets, retourne l’ID de nœud pour le nœud nommé addr[10].

définir les correspondances [trouver [escape_brackets addr[10]]

Vous devez toujours utiliser la commande escape_brackets pour éviter les modèles que vous passez dans la commande de recherche, sauf si vous prévoyez d’utiliser des supports carrés pour indiquer une plage de caractères à correspondre.

Ajouter le filtrage de type nœud

Vous pouvez limiter les types de nœuds qui sont recherchés pour un nom correspondant. Cela peut accélérer la recherche dans un design avec une grande liste de netlist de synchronisation. Vous pouvez utiliser l’option de type -type pour la commande get_timing_nodes afin de limiter les nœuds de la collection retournée aux broches, registres, horloges et à divers autres types de nœuds.

L’exemple suivant’s appuie sur l’exemple précédent de mise en correspondance de modèles. Si aucun schéma n’est spécifié, *, il correspond par défaut à tout. Il existe une option permettant de limiter le type de nœud par défaut à tous.

Cet exemple utilise le package cmdline Tcl, inclus avec le logiciel Quartus II, pour configurer un moyen facile de transférer les arguments dans la procédure de manière autonome.

le package nécessite ::quartus::advanced_timing
package nécessite cmdline

proc find { args }
    
    {set options {\
        { « pattern.arg » » « * » « Pattern to search for » }
        { { « tape.arg » « all » « node type to search » }
    \} array set
    opts [::cmdline:::) $options getoptions args]

    un défini return_ids {} foreach_in_collection node_id
    [get_timing_nodes -type $opts(type)] {

        définissez node_name [get_timing_node_info -nom d’info $node_id]
           
        {[string match $opts(pattern) $node_name ] } {
            laïnd return_ids $node_id }   
    
    retourner $return_ids
}

Le code suivant montre moyens quelques d’utiliser l’exemple précédent.

# Retourne chaque ID de nœud dans la netlist de synchronisation.
# Pattern par défaut * # Tapez par défaut tous les ID de retour de retour de toutes les broches de la liste de
synchronisation # Pattern par défaut *
trouvez-type broche # ID de nœud de retour des

broches commençant par addr
find -pattern addr* -type pin

# Returns node ID of registers in bit 0 d’un bus
find -pattern [escape_brackets *[0]] -type reg]

Le contenu de cette page est une combinaison de traduction humaine et informatique du contenu original en anglais. Ce contenu vous est fourni pour votre commodité et à titre informatif seulement et ne saurait être totalement exact ou complet. En cas de contradiction entre la version anglaise de cette page et la traduction, c'est la version anglaise qui prévaut. Afficher la version anglaise de cette page.