Combiner les données de fichiers SDO

author-image

Par

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) »

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.