Combinar dados de arquivo SDO

author-image

Por

Este script cria um arquivo SDO com parâmetros de sincronização combinados de dois arquivos SDO gerados pelo software Quartus® II durante a análise de tempo máximo e mínimo.
O software Quartus II gera arquivos SDO separados que usam o valor mínimo ou máximo de atraso para os três valores de atraso em cada tríplice. Os trigêmeos nos arquivos SDO suportam valores mínimos, típicos e máximos de atraso como este: (min:typ:max). Um arquivo SDO gerado pelo software Quartus II para análise de tempo máximo tem trigêmeos de atraso que incluem apenas valores máximos de atraso, como este: (max:max:max). Um arquivo SDO gerado durante a análise de tempo mínimo contém trigêmeos de atraso que incluem apenas valores mínimos de atraso, como este: (min:min:min).
Este script combina arquivos SDO com valores mínimos e máximos para criar um arquivo com trigêmeos que têm números mínimos e máximos, como este: (min:max:max). Observe que o valor máximo de atraso também é duplicado para o valor de atraso típico. O arquivo gerado por este script não é garantido Altera funcionar para análise mista mínima/máxima.

Execute o script assim: arquivo sdo quartus_sh -t combine_sdo.tcl -min_sdo <min> -max_sdo <max sdo file> -new_sdo <new sdo>

pacote requer a variável

cmdline::argv0 $::quartus(args) set options { \ { "min_sdo.arg" "" "Nome do arquivo do SDO com tempo de tempo mínimo" } \ { "max_sdo.arg" "" "Nome do arquivo do SDO com tempo máximo" } \ { "new_sdo.arg" "" "Nome do arquivo" "Nome do arquivo" de SDO com tempo mínimo/máximo" } \ } opções de conjunto de matriz
[:cmdline::getoptions::argv0 $options "Opção ruim"),

set min [abrir $opts(min_sdo)] definir
o máximo [abrir $opts(max_sdo)] definir novo
[abrir $opts(new_sdo) w]

# Mantenha o controle do número de linha no conjunto de arquivos line_num 1 enquanto { 1 } { # Leia a próxima linha dos arquivos sdo mínimo e máximo definido more_min [fica $min min_line] definido more_max [fica $max max_line] # Termine quando não houver mais dados nos arquivos se

{
    $more_min < 0 || $more_max < 0 } {

        É
        possível que um arquivo possa ter mais linhas # do que o outro. Alerte sobre isso aqui.
        se { $more_min >= 0 } { aviso tipo post_message \ "Linhas ignoradas que começam com a linha
                $line_num em $opts(min_sdo)"
        } se {
        $more_max >
            $line post_message_num em
                $opts(max_sdo)"
        }

        Porque
        pelo menos um dos arquivos não tem mais dados, # o loop tem que parar. break } se

    { [regexp {\(\d+:\d+:\d+\)} $min_line] } { # Se a linha tiver um trigêmeo de atraso, os valores # devem ser combinados # new_line acumula o texto para

        imprimir.
        # line_differences é definido se houver diferenças nas
        linhas # além dos   trigêmeos de atraso.
        definir new_line ""
        line_differences 0 #

        enquanto houver trigêmeos de atraso na linha...
        enquanto { [regexp {\(\d+:\d+:\d+\)} $min_line] } { # Extrair tudo até o tríplice de atraso, o valor de #delay em si, e tudo após o
            # delay 
            triplet
            regexp {.*?\()(\d+):\d+:\d+(\.*$)} $min_line \ corresponder
                min_start min_value min_line
            regexp {^(.*?\\\d+:\d+:(\d+)(\.*$)} $max_line \
                corresponder max_start max_value max_line
            
            #
            Definir uma bandeira se houver diferenças na linha # além do tríplice de atraso se { ! [string equal $min_start $max_start] } { definir line_differences 1 } # Juntar o triplet de atraso combinado no apêndice de linha
            new_line $min_start \
                $min_value: $max_value: $max_value
        } #
        Verifique o que quer que o texto na linha seja deixado para diferenças #. se { ! [string igual $min_line $max_line] } { definir line_differences 1 } se { $line_differences } { aviso tipo post_message \ [juntar [lista \ "Essas partes da linha
        $line_num são
                           diferentes." \
                           " $opts(min_sdo): $min_line" \
                           " $opts(max_sdo): $max_line"] \
                     "\n"] }
        #
        Coloque o resto da linha, após o último tríplice de atraso, # juntos no apêndice da nova linha new_line $min_line } outra { # Se a linha não tiver um trigêmeo de atraso, # as linhas dos arquivos min e max devem ser # idênticas (exceto por exemplo, se houver um carimbo 
        de data # no
        arquivo). Faça uma verificação rápida para certificar-se de que as linhas # são as mesmas e 
        imprima um aviso se elas são diferentes.
        se { ! [string igual $min_line $max_line] } { post_message -type warning \ [join [list \ "Line $line_num é diferente." \ " O novo arquivo contém a primeira linha
                           abaixo." \
                           "  $opts(min_sdo): $min_line" \
                           " $opts  max_sdo): $max_line"] \
                     "\n"] } set new_line $min_line }
        #

Gravar a linha no arquivo combinado coloca $new $new_line incr line_num } # Feito looping através dos arquivos. Feche tudo $min fechar $max fechar $new post_message "Feito a combinação de arquivos em

$opts(new_sdo)"

O conteúdo desta página é uma combinação de tradução humana e por computador do conteúdo original em inglês. Este conteúdo é fornecido para sua conveniência e apenas para informação geral, e não deve ser considerado completo ou exato. Se houver alguma contradição entre a versão em inglês desta página e a tradução, a versão em inglês prevalecerá e será a determinante. Exibir a versão em inglês desta página.