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