Ce script crée un fichier SDO avec des paramètres de synchronisation associés à partir de deux fichiers SDO générés par le logiciel Quartus® II pendant l’analyse de synchronisation maximale et minimale.
Le logiciel Quartus II génère des fichiers SDO distincts qui utilisent la valeur de retard minimale ou maximale pour les trois valeurs de retard de chaque triplet. Les triplets des fichiers SDO prennent en charge les valeurs de retard minimales, typiques et maximales comme celle-ci : (min:typ:max). Un fichier SDO généré par le logiciel Quartus II pour l’analyse de synchronisation maximale comporte des triplets de retard qui ne comprennent que des valeurs de retard maximales, comme celle-ci : (max:max:max). Un fichier SDO généré pendant l’analyse de synchronisation minimale contient des triplets de retard qui comprennent uniquement des valeurs de retard minimales, comme ceci : (min:min:min).
Ce script combine des fichiers SDO avec des valeurs minimales et maximales pour créer un fichier avec des triplets qui ont à la fois le nombre minimum et le nombre maximal, comme celui-ci : (min:max:max). Notez que la valeur maximale de retard est également dupliquée pour la valeur de retard typique. Le fichier généré par ce script n’est pas garanti par Altera de fonctionner pour une analyse minimale mixte/maximale.
Exécutez le script comme celui-ci : quartus_sh -t combine_sdo.tcl -min_sdo <min sdo file> -max_sdo <max sdo file> -new_sdo <nous fichier sdo>
package nécessite la variable cmdline ::argv0 $::quartus(args) options de jeu { { « min_sdo.arg » « » « Nom de fichier de SDO avec min timing » } \ { « max_sdo.arg » « » « Nom de fichier de SDO avec synchronisation max » } { « new_sdo.arg » » « Nom de fichier de SDO avec synchronisation min/max » } \ } array set opte [::cmdline::getoptions ::argv0 $options « Bad option »), set min [open $opts(min_sdo)] set max [open $opts(max_sdo)] set new [open $opts(new_sdo) w] # Suivre le numéro de ligne dans le fichier défini line_num 1 tandis que { 1 } { # Lisez la ligne suivante à partir de la minute et les fichiers sdo max réglés more_min [obtient $min min_line] réglée more_max [obtient $max max_line # Terminer lorsqu’il n’y a plus de données dans les fichiers si { $more_min < 0 || $more_max < 0 } { # Il est possible qu’un fichier ait plus de lignes #que l’autre. Vous ne vous en soucierez pas ici. si { $more_min >= 0 } { avertissement de type post_message \ « Lignes de type éradage en commençant par la ligne $line_num dans $opts(min_sdo) » } si { $more_max >= 0 } {post_message -type d’avertissement \ « Lignes de bardage en commençant par la ligne $line_num in $opts(max_sdo) » } Car au moins un des fichiers n’a plus de données, # la boucle doit s’arrêter. break } si {regexp {\(\d+:\d+:\d+\d+\)} $min_line] } { Si la ligne présente un triplet de retard, le # de valeurs doit être combiné # new_line de supprimer le texte pour l’imprimer. # line_differences est défini s’il y a des différences dans les lignes #, en plus des triplets de retard. définissez new_line « » défini line_differences 0 # Alors qu’il y a des triplets de retard dans la ligne... tandis que {[regexp {\(\d+:\d+:\d+\d+\)} $min_line] } { # Extraire tout jusqu’au triplet de retard, le # delay value lui-même, et tout après le triplet de retard #regexp {^(.*?\()(\d+):\d+:\d+(\).*$)} $min_line \ match min_start min_value min_line réexp {^(.*) ?\()\d+:\d+:(\d+)(\).*$)} $max_line \ match max_start max_value max_line # Définissez un drapeau s’il y a des différences dans le numéro de ligne en plus du triplet de retard si { ! [chaîne égale $min_start $max_start] } {set line_differences 1 } # Placez le triplet de retard combiné dans la nouvelle annexe de ligne new_line $min_start \ $min_value : $max_value : $max_value } # Vérifiez le texte restant pour n’importe quelle différence. si { ! [chaîne égale $min_line $max_line] } { définir line_differences 1 } si { $line_differences } { post_message -type d’avertissement \ [rejoindre [liste \ « Ces parties de la ligne $line_num sont différentes ». \ « $opts (min_sdo) : $min_line » \ « $opts (max_sdo) : $max_line »] \ « \n»] } # Mettez le reste de la ligne, après le dernier triplet de retard, # ensemble dans le nouvel appendice de ligne new_line $min_line } d’autre {Si la ligne n’a pas de triplet de retard, Nb. Les lignes des fichiers min et max doivent être # identiques (sauf par exemple s’il y a un numéro de tampon de date dans le fichier). Vérifiez rapidement si les lignes #sont les mêmes et imprimez un avertissement s’ils sont différents. si { ! [chaîne égale $min_line $max_line] } { post_message -type d’avertissement \ [liste [liste \ « Line $line_num est différent ». \ « Le nouveau fichier contient la première ligne ci-dessous ». $opts (min_sdo) : $min_line » \ « $opts(s) max_sdo) : $max_line]] \ « \n »] } réglé new_line $min_line } # Écrivez la ligne vers le fichier combiné met $new $new_line incr line_num } #Done en boucle dans les fichiers. Fermez tout ce que vous voulez, $min fermez $max fermez $new post_message « Combiner des fichiers dans $opts (new_sdo) »