Instance et entité de l’analyseur de synchronisation dans les scripts

author-image

Par

Lorsque vous écrivez des scripts personnalisés pour l’Analyseur de synchronisation, vous devez savoir comment les différentes fonctions de l’API Tcl gèrent et retournent les noms des entités et des instances dans les noms de nœuds. Il existe un paramètre dans le logiciel Quartus® II appelé Nom de l’entité d’affichage pour le nom de nœud qui contrôle si les noms de nœud sont affichés avec ou sans noms d’entité.
La fonction Tcl API get_registers peut toujours accepter les noms qui incluent des entités pour son filtre, quel que soit le paramètre du nom de l’entité Display pour le nomde nœud . La fonction get_registers renvoie toujours des noms en fonction du paramètre Nom de l’entité d’affichage pourle nom de nœud .
Le Tableau 1 montre des exemples du nom de nœud retourné par la commande get_registers <filter>,où une conception comprend un registre nommé ram:my_ram|ctrl:ctrl_1|addr[0]».

Tableau 1. Exemple de comportement get_registers

nom de nœud du nom de nœud filtre
Nom de l’entité d’affichage pourla valeur deretourné
SUR ram:my_ram|ctrl:ctrl_1|addr[0] ram:my_ram|ctrl:ctrl_1|addr[0]
SUR my_ram|ctrl_1|addr[0] ram:my_ram|ctrl:ctrl_1|addr[0]
DÉSACTIVÉ ram:my_ram|ctrl:ctrl_1|addr[0] my_ram|ctrl_1|addr[0]
DÉSACTIVÉ my_ram|ctrl_1|addr[0] my_ram|ctrl_1|addr[0]

L’API Tcl fonctionne get_pins et get_cells se comportent différemment des get_registers. Les fonctions get_pins et get_cells acceptent et retournent uniquement les noms contenant des noms d’instance. Ils n’acceptent pas et ne renvoient pas de noms avec des entités, quelle que soit la valeur du nom de l’entité Display pour le nom de nœud.
Le Tableau 2 présente des exemples du nom de nœud retourné par get_pins <filter>,dans lequel un modèle comprend un registre nommé ram:my_ram|ctrl:ctrl_1|addr[0] avec une broche d’horloge appelée clk. La get_cells se comporte de la même manière, bien qu’elle accepte et renvoie les noms des cellules.

Tableau 2. Exemple de comportement get_pins

nom de nœud du nom de nœud filtre
Nom de l’entité d’affichage pourla valeur deretourné
SUR ram:my_ram|ctrl:ctrl_1|addr[0]|clk Aucune1
SUR my_ram|ctrl_1|addr[0]|clk my_ram|ctrl_1|addr[0]|clk
DÉSACTIVÉ ram:my_ram|ctrl:ctrl_1|addr[0]|clk Aucune1
DÉSACTIVÉ my_ram|ctrl_1|addr[0]|clk my_ram|ctrl_1|addr[0]|clk

Note:

  1. La fonction get_pins produit un avertissement indiquant que le filtre spécifié ne pouvait pas être apparié avec une broche.

Lorsque vous êtes conscient de la différence dans la façon dont get_registers, get_pinset get_cells traiter et renvoyer les noms de nœuds qui incluent des entités, vous pouvez éviter les problèmes subtils qui peuvent se produire lorsque vous combinez les fonctions. L’exemple suivant montre le code qui fonctionne lorsque le nom de l’entité d’affichage du nom de nœud est désactivé, mais qui échoue lorsqu’il est activé.

foreach_in_collection reg_id [get_registers foo*] { définir
    reg_name [get_node_info -name $reg_id]
    # ...
    définissez pin_id [get_pins {reg_name}|clk] # Si reg_name comprend
    des entités, l’appel get_pins échoue toujours
}

Lorsque le nom de l’entité d’affichage du nom de nœud est désactivé, la reg_name variable n’inclut pas les noms des entités, de sorte que l’appel get_pins réussi. Lorsque le nom de l’entité d’affichage du nom de nœud est activé, le reg_name variable inclut les noms des entités, de sorte que l’appel get_pins ne fonctionne pas.

Solutions

Le moyen le plus simple d’éviter des problèmes potentiels est d’désactiver le nom de l’entité d’affichage pour le nom de nœud et d’utiliser uniquement les noms d’instance pour se référer aux nœuds. Cette solution garantit que les noms retournés par get_registers sont des noms contenant uniquement des instances et fonctionnent avec get_pins et les get_cells.

Si vous n’éteignez pas le nom de l’entité d’affichage pourle nom de nœud et que vous passez les noms retournés par get_registers à get_pins ou à get_cells, vous devez vous assurer que vous supprimez tous les noms d’entité. Vous pouvez utiliser une simple expression de régsub pour supprimer la plupart des noms d’entités. La commande Tcl suivante supprime tous les noms d’entités d’un nom de nœud, tant que les noms de l’entité ne contiennent que des lettres, des chiffres et des traits de soulignement (caractères de la classe de caractères \w).

regsub -all {\w*:} $reg_name {} reg_name

Le schéma d’expression normal indiqué ne traite pas tous les caractères valides des identifiants HDL. Il ne gère pas les noms d’entités générés qui incluent des backslashes (\), le caractère des signes en dollars ($) dans de simples identifiants Verilog HDL, des identifiants verilog HDL à l’avant-champ ou des identifiants étendus dans VHDL. Vous pouvez construire des expressions régulières plus avancées pour traiter les noms d’entités avec ces caractères, mais il est plus simple de désactiver le nom de l’entité d’affichage pourle nom de nœud .
L’exemple suivant montre comment intégrer l’expression de régsub dans l’exemple de non fonctionnement ci-dessus. Dans l’exemple suivant, l’expression de réinscription supprime les noms des entités du nom du registre (sous réserve des exclusions de caractère décrites), de sorte que l’appel get_pins ne échoue pas. L’exemple fonctionne quelle que soit la valeur du nom de l’entité d’affichage pour le nom de nœud.

foreach_in_collection reg_id [get_registers foo*]
    {set reg_name [get_node_info -name $reg_id]
    résub -all {\w*:} $reg_name {} reg_name
    # reg_name n’inclut plus d’entités
    # ...
    définissez pin_id [get_pins {reg_name}|clk]
    #reg_name n’inclut plus d’entités, afin que get_pins réussisse
}

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.