Exception de synchronisation Vivado

Anomalie de temps

Le nom anglais est Timing Exception, qui peut être considérée comme une exception de timing ou une exception de timing (le terme dans cette série d'articles). "Exception" ou "Exception" signifie que cette partie de l'analyse de timing est différente de l'analyse de timing la plus conventionnelle. Le tableau suivant présente les commandes et fonctions d'exception de synchronisation prises en charge par Vivado:

commander Fonctionnalités
set_multicycle_path Définissez le nombre de cycles d'horloge requis pour transférer les données du point de départ au point d'arrivée sur le chemin
set_false_path Indiquez à un certain chemin logique dans la conception de ne pas effectuer d'analyse de synchronisation
set_max_delay 、 set_min_delay La définition des valeurs de délai de chemin minimum et maximum remplacera les contraintes d'établissement et de maintenance par défaut
set_case_analysis Utilisez des constantes logiques ou des conversions logiques sur les ports ou les broches pour l'analyse temporelle afin de limiter le transfert de signal entre les conceptions

Vivado ne prend pas en charge l'analyse en temps réel des exceptions de temporisation contradictoires. Vous devez exécuter report_exceptions pour une analyse complète et signaler toutes les exceptions de temporisation. Il existe de nombreux cas de pistes cyclables, qui sont plus compliqués, et ils sont décrits séparément au chapitre 35. Cet article présente la connaissance des trois autres anomalies de synchronisation.


Faux chemin

Certains chemins qui existent dans la conception en termes de structure topologique, mais qui ne fonctionnent pas ou n'ont pas besoin d'être chronométrés, sont appelés faux chemins. Les faux chemins doivent être ignorés lors de l'analyse temporelle. Les situations suivantes sont toutes de faux chemins:

  • Là où il y a une logique de synchronisation double, il y a un croisement de domaine d'horloge
  • Registres qui ne peuvent être écrits qu'une seule fois à la mise sous tension
  • Réinitialiser ou tester la logique
  • Le chemin entre le port d'écriture de la RAM distribuée asynchrone et l'horloge de lecture asynchrone

Donnez un exemple spécifique pour approfondir la compréhension du faux chemin, comme le montre la figure ci-dessous:
Insérez la description de l'image ici
Deux multiplexeurs MUX contrôlent la transmission des données entre les deux registres, mais les deux MUX utilisent le même signal de sélection. Une analyse minutieuse constatera que les données du terminal Q ne peuvent pas être transmises de toute façon au terminal D. Bien qu'il semble y avoir un chemin entre Q et D sur le diagramme de structure, il ne remplit aucune fonction, il doit donc être défini comme un faux chemin.

Pourquoi supprimer les faux chemins dans l'analyse temporelle? Les raisons sont les suivantes:

  • Réduire le temps de fonctionnement : l'outil n'a pas besoin de chronométrer et d'optimiser ces faux chemins, ce qui peut réduire beaucoup de temps de fonctionnement.
  • Augmenter la qualité des résultats : la suppression des faux chemins peut considérablement augmenter la qualité des résultats QOR (Quality of Results). La qualité de la synthèse, de la mise en page et de la conception d'optimisation est largement affectée par les problèmes de synchronisation, car les outils essaieront toujours de résoudre ces problèmes. L'inclusion de faux chemins peut conduire à des résultats indésirables (par exemple, les outils se concentrent trop sur la résolution de faux chemins. en violation, tout en ignorant le vrai problème qui doit être résolu).

Le faux chemin est défini par la commande set_false_path , le modèle de commande est le suivant:

set_false_path [-setup] [-hold] [-from <node_list>] [-to <node_list>] [-through <node_list>]
  •  

Les significations de plusieurs options de liste de nœuds sont les suivantes:

  • -de : une liste de points de départ valides , y compris les objets d'horloge, les broches d'horloge des éléments de synchronisation, les ports maîtres d'entrée ou les ports maîtres bidirectionnels.
  • -to : une liste de points de terminaison autorisés, y compris les objets d'horloge, les broches d'entrée de données des éléments de synchronisation, les ports maîtres de sortie ou les ports maîtres bidirectionnels.
  • -through : Un ensemble de broches ou de ports légaux Il est important de faire attention à l'ordre des nœuds. Si seul -through est utilisé dans la contrainte et que les options -from et -to ne sont pas utilisées, Vivado supprimera tous les chemins à travers la liste de l'analyse temporelle. Soyez prudent lorsque vous l'utilisez.

Voici quelques exemples de définition de faux chemins:

#-through的顺序表示路径穿过节点的顺序,因此下面是两条不同的约束
set_false_path -through cell1/pin1 -through cell2/pin2
set_false_path -through cell2/pin2 -through cell1/pin1

#上图中的虚假路径应该用下面这条命令约束
set_false_path -through [get_pins MUX1/a0] -through [get_pins MUX2/a1]
#使用-through而不用-from和-to的好处是可以确保所有通过此节点的路径都会被移除,而不用考虑起点和终点

#移除复位端口到所有寄存器间的时序路径
set_false_path -from [get_port reset] -to [all_registers]

#禁用两个异步时钟域间的时序路径,从CLKA到CLKB
set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]
#注意,上述命令并没有禁用从CLKB到CLKA的路径,还需要补充如下约束
set_false_path -from [get_clocks CLKB] -to [get_clocks CLKA]
  •  

À partir du dernier exemple, nous devons désactiver le chemin de synchronisation dans les deux sens, mais s'il existe plusieurs domaines d'horloge asynchrones dans la conception, il est très difficile d'écrire. Je ne sais pas si vous vous souvenez de la méthode de contrainte d’horloge mentionnée au chapitre 31. Dans ce cas, il est préférable d’utiliser set_clock_groups pour définir différents groupes d’horloge asynchrones.

Le cas de la RAM distribuée asynchrone a également été évoqué plus haut, voici également un exemple de contraintes. Dans l'hypothèse d'une RAM distribuée asynchrone à deux ports, son opération d'écriture est synchronisée avec l'horloge de la RAM, mais l'opération de lecture est asynchrone. Dans ce cas, un faux chemin doit être défini entre les horloges d'écriture et de lecture. Les contraintes sont les suivantes:

#在RAM前的写寄存器和RAM后的读寄存器间设置虚假路径
set_false_path -from [get_cells <write_registers>] -to [get_cells <read_registers>]
  •  

Analyse de cas

Dans la conception, certains signaux sont des valeurs constantes dans des modes spécifiques, tels que: (1). Certains signaux de test ne changeront pas et sont directement connectés à VSS ou VDD; (2). Certains signaux ne se produiront plus après la mise sous tension. on Change; (3) Si la conception a plusieurs modes fonctionnels, certains signaux sont actifs dans certains modes, mais inactifs dans d'autres modes. Ces situations relèvent de «l'analyse de cas».

Nous devons indiquer au moteur d'analyse de synchronisation statique quels signaux sont des valeurs constantes, réduisant ainsi la plage d'analyse, le temps de fonctionnement et le taux d'occupation interne, et n'avons pas à signaler ces chemins non fonctionnels et non pertinents. Habituellement, le concepteur utilise la commande set_case_analysis pour déclarer les signaux (broches et ports) comme inactifs. La syntaxe de cette commande est la suivante:

set_case_analysis <value> <pins or ports objects>
  •  

La valeur du paramètre peut être 0, 1, zéro, un, monter, monter, descendre ou descendre. L'objet de fonction peut être un port, une broche d'une sous-unité (cellule feuille en anglais) ou une broche d'un module hiérarchique. Voici deux exemples pour renforcer la compréhension de cette anomalie de synchronisation.

Le premier exemple est comme illustré dans la figure ci-dessous. Clock_sel est un sélecteur d'horloge. Les deux horloges d'entrée clk_1 et clk_2 sont sélectionnées et sorties en sélectionnant la broche s:
Insérez la description de l'image ici
si nous ne voulons analyser qu'un cas, par exemple, analyser uniquement la situation lorsque clk_2 est sélectionné. En définissant la broche s comme constante, seul clk_2 peut être passé au port de sortie o. Les contraintes sont les suivantes:

set_clock -name -clk_1 -period 10.0 [get_pins clock_sel/I0]
set_clock -name -clk_2 -period 15.0 [get_pins clock_sel/I1]
set_case_analysis 1 {get_pins clock_sel/S}
  •  

La définition d'une analyse de cas pour une certaine broche entraînera la désactivation de l'analyse de synchronisation sur le chemin passant par la broche, et aucune information associée ne sera rapportée. Le deuxième exemple est illustré dans la figure ci-dessous. BUFG_GT a une broche de contrôle de division d'horloge dynamique DIV [2: 0], qui est pilotée par une autre logique au lieu d'être directement connectée à VCC / GND:
Insérez la description de l'image ici
Par défaut, Vivado prendra la pire sortie possible Situation d'horloge, à savoir 1 division de fréquence (équivalent à aucune division de fréquence, la fréquence est la plus élevée à ce moment). Cependant, s'il n'y a pas de DIV prenant 1 dans la conception, cela devient une contrainte excessive. Afin de restreindre la conception de manière plus raisonnable, nous pouvons effectuer des contraintes d'analyse de cas individuels sur le bus DIV [2: 0]. Par exemple, le pire des cas qui peut se produire est que DIV prend 3, et les contraintes sont les suivantes:

set_case_analysis 0 {get_pins bufg_gt_pclk/DIV[0]}
set_case_analysis 1 {get_pins bufg_gt_pclk/DIV[1]}
set_case_analysis 0 {get_pins bufg_gt_pclk/DIV[2]}
  •  

Retard min / max

La contrainte de retard maximum set_max_delay est utilisée pour réécrire les exigences de temps de configuration par défaut (ou temps de récupération) du chemin ; la contrainte de retard minimum set_min_delay est utilisée pour réécrire le temps de maintien par défaut (ou temps de suppression) du chemin. Le modèle de syntaxe des deux commandes de contrainte est le suivant:

set_max_delay <delay> [-datapath_only] [-from <node_list>] [-to <node_list>] [-through <node_list>]
set_min_delay <delay> [-from <node_list>] [-to <node_list>] [-through <node_list>]
  •  

L'utilisation de -from, -to et -through est la même que dans le faux chemin. Si -datapath_only est ajouté à la commande set_max_delay, la pente d'horloge ne sera pas prise en compte lors du calcul de la marge. Faites attention aux trois points suivants lors de l'utilisation de la contrainte de délai minimum / maximum:

  • Seule la contrainte de délai maximum est définie sur le chemin (l'option -datapath_only n'est pas utilisée) et le délai minimum requis sur le chemin ne sera pas modifié. La vérification du temps de maintien utilise toujours la valeur par défaut et l'inverse est vrai. Cependant, si -datapath_only est ajouté, l'exigence de temps de maintien sur le chemin sera ignorée.
  • Habituellement, la contrainte entre le port d'entrée et le registre de premier niveau utilise la commande set_input_delay; la contrainte entre le registre de dernier niveau et le port de sortie utilise la commande set_output_delay (voir le chapitre 32 pour plus de détails). Mais le chemin de logique combinatoire pure entre le port d'entrée et le port de sortie peut être contraint avec les commandes set_max_delay et set_min_delay (généralement appelé chemin d'E / S d'entrée-sortie).
  • Il n'y a pas de relation d'horloge entre certains signaux asynchrones, mais une contrainte de retard maximum est requise. Par exemple, nous utilisons généralement set_clock_groups pour diviser deux domaines d'horloge asynchrones, mais nous devons parfois nous assurer que le délai de chemin entre les deux domaines d'horloge n'est pas trop élevé. Dans ce cas, nous devons utiliser la combinaison de commandes set_max_delay et set_false_path (car set_clock_groups a une priorité plus élevée et remplacera set_max_delay, il ne peut donc pas être utilisé ensemble).

De plus, lors de la limitation du délai minimum et du délai maximum, si la sélection de nœud entre -from et -to est déraisonnable, une segmentation de chemin se produira . La partie 34 donne des exemples spécifiques et des explications sur la segmentation des chemins.


Désactiver les arcs de synchronisation

Enfin, je présenterai un cas particulier d'anomalies temporelles: les arcs temporels, littéralement traduits par arcs temporels. La raison pour laquelle il n'est pas répertorié séparément comme anomalie temporelle est qu'il est inextricablement lié à d'autres anomalies temporelles. En fait, dans de nombreux cas, la minuterie désactivera automatiquement certains arcs de synchronisation afin de gérer certaines situations particulières, telles que:

  • La boucle de rétroaction de logique combinatoire ne peut pas être chronométrée correctement (ce n'est donc pas recommandé), et la minuterie interrompra la boucle en désactivant un certain arc de synchronisation dans la boucle.
  • Selon ce qui précède, toutes les données d'entrée du MUX seront transmises au port par défaut, mais le signal de sélection du MUX est réglé sur une valeur constante dans l'analyse de cas, à ce moment, un seul port d'entrée de données sera transmis à le port de sortie. En fait, ceci est réalisé par le temporisateur interrompant l'arc de synchronisation de l'autre port de données au port de sortie.

Vivado fournit la commande set_disable_timing , qui peut interrompre artificiellement l'arc de synchronisation du port d'entrée au port de sortie d'une unité. Considérez les scénarios d'application suivants:

  • Par exemple, dans le cas du premier exemple ci-dessus, vous pouvez définir manuellement l'arc de synchronisation dans la boucle de rétroaction combinée à interrompre, au lieu de laisser l'outil le terminer automatiquement.
  • Supposons que plusieurs horloges arrivent à la broche d'entrée de la LUT en même temps, mais qu'une seule horloge peut être transmise au port de sortie de la LUT. A ce moment, les arcs de synchronisation liés à d'autres horloges doivent être interrompus.

Lorsqu'un arc de synchronisation est désactivé, tous les chemins de synchronisation à travers l'arc de synchronisation ne seront pas signalés dans l'analyse de synchronisation. Par conséquent, soyez extrêmement prudent lorsque vous l'utilisez pour éviter de désactiver les arcs de synchronisation nécessaires, ce qui entraînerait des violations de synchronisation cachées ou des problèmes de synchronisation qui empêchent la conception de fonctionner correctement sur le matériel. La syntaxe et les exemples de set_disable_timing sont les suivants:

#语法,-from和-to只能设置为库单元的管脚名称(不是设计管脚名称)
set_disable_timing [-from <arg>] [-to <arg>] [-quiet] [-verbose] <objects>

#禁用所有基于LUTRAM的异步FIFO的WCLK到O之间的时序弧
set_disable_timing -from WCLK -to O [get_cells inst_fifo_gen/ gdm.dm/gpr1.dout_i_reg[*]]

#指定对象的所有以O管脚为终点的时序弧都被禁用
set_disable_timing -to O <objects>

#指定对象的所有以WCLK管脚为起点的时序弧都被禁用
set_disable_timing -from WCLK <objects>

#指定对象内的所有时序弧都被禁用
set_disable_timing <objects>
  •  

Utilisez la commande report_disable_timing pour afficher tous les arcs de synchronisation automatiquement désactivés et désactivés manuellement. Notez que cette liste peut être très volumineuse, il est préférable d'ajouter l'option -file pour enregistrer les résultats dans un fichier pour les visualiser.

Je suppose que tu aimes

Origine blog.csdn.net/yundanfengqing_nuc/article/details/110624628
conseillé
Classement