Exemplo de analisador de sincronização: relatório de resumo de clocks com falha

author-image

Por

O script nesta página executa a análise de tempo de configuração, espera, recuperação e remoção em todos os clocks do seu projeto em todas as suas condições operacionais suportadas. O script cria uma tabela que lista informações sobre todas as análises que falharam no timing. O script escreve a tabela em um arquivo chamado <revision>.failing_clock_domains. Se nenhuma análise falhar, o script escreve uma mensagem ao arquivo que nenhuma análise falhou.

Você pode usar o script para obter uma visão geral rápida e simples dos resultados de análise de temporizado falhando para um projeto. Se você salvar o script em um arquivo chamado failing_clock_domains.tcl,use o comando a seguir para execute-o.

quartus_sta --report_script=failing_clock_domains.tcl <project name> [-c <revision name>]

Aqui está um exemplo da tabela que o script gera se alguma análise falhar no timing. A tabela inclui a pior folga, a folga negativa total (TNS), o nome do clock, a condição operacional em que ocorreu a falha e o tipo de análise que falhou.

Falha no tempo de sincronização dos domínios do clock

+--------+---------------+------------+-----------------------+-----------------+
; Slack  ; End Point TNS ; Clock      ; Operating conditions  ; Timing analysis ;
+--------+---------------+------------+-----------------------+-----------------+
; -0.113 ; -0.321        ; IF_RXCLK   ; Slow 1100mV 85C Model ; Setup           ;
; -0.098 ; -0.223        ; core_clk   ; Fast 1100mV 0C Model  ; Hold            ;
+--------+---------------+------------+-----------------------+-----------------+

Copie e colar o seguinte código TCL e salve-o em um arquivo para usar o script.

# Informe se um design tem domínios de clock com folga negativa.
# Se houver domínios de clock com folga negativa, coloque essas informações
em # uma tabela e escreva-as em um arquivo.
# Mude o nome do arquivo aqui se o conjunto adequado output_file_name [get_current_revision].failing_clock_domains pacote exigir struct::pacote de matriz requer relatório # Crie uma matriz para manter informações sobre os caminhos failing_paths_matrix
[:struct::matrix];
$failing_paths_matrix add columns 5 # Analysis tem que ser executada para todas as condições operacionais definidas all_operating_conditions_col [get_available_operating_conditions] # Execute esses tipos de análise para cada conjunto de domínios de
clock analysis_list
[lista "configuração" "segurar" "recuperação" "remoção"] # Ande por todas as condições operacionais
foreach_in_collection operating_conditions_obj $all_operating_conditions_col {

   # Definir a condição operacional,  atualize o timing netlist set_operating_conditions $operating_conditions_obj update_timing_netlist # Obtenha o nome do texto em inglês do conjunto de condições operacionais
   operating_conditions_display_name   [get_operating_conditions_info -display_name $operating_conditions_obj] # Faça cada tipo de análise

   foreach analysis_type $analysis_list { # Obtenha o nome do tipo de análise se tiver que imprimi-lo   
   definir analysis_display_name
      [string totitle $analysis_ digite] # Obtenha informações sobre todos os domínios de clock definidos clock_domain_info_list [get_clock_domain_info -${analysis_type}] # Ande por todos os domínios do clock e retire qualquer um que tenha # folga negativa
      foreach domain_info $clock_domain_info_list {

         #
         O domain_info tem o nome do clock, sua folga e sua TNS. # Extraia esses.      
         foreach { clock_name slack endpoint_tns edge_tns } $domain_info { break } # Se a folga for negativa, montar uma linha de informações para # relatar na tabela se
         {
         0 > $slack } {
            $failing_paths_matrix add row [list $slack $endpoint_tns $clock_name \
               $operating_conditions_display_name $analysis_display_name] } # Concluído passando por todos os domínios do clock para uma análise
         de tempo
      #específica (configuração,  hold, etc.)  
   }
   # Terminei de analisar todos os tipos de análise para uma determinada condição operacional # } # Terminado passando por todas as condições operacionais # Prepare-se para escrever um arquivo com o resumo dos resultados # Se houver alguma linha na matriz, há caminhos que estão falhando na

sincronização.
# Temos que imprimir a tabela com essas informações. Se não houver # linhas na tabela, nenhum caminho falhará na sincronização, então escreva uma mensagem de sucesso se
{ 0 == [$failing_paths_matrix rows] } { # Imprima uma mensagem rápida post_message "Não há domínios de clock falhando na sincronização" # Se houver um erro abrindo o arquivo, imprima uma mensagem dizendo
   nº disso. Caso contrário, dizem que não há falha de sincronização de domínios se { [catch { open $output_file_name w } fh] } { erro de tipo post_message "Não foi possível abrir o arquivo: $fh" } outra { coloca $fh captura "Não há domínios de clock falhando no timing" { fechar $fh } } } else { # Classificar as linhas de matriz para que a pior folga seja a primeira $failing_paths_matrix sort -aumentando 0 # Coloque em uma linha de cabeçalho
   $failing_paths_matrix insert row 0[list "Slack" "End Point TNS" "Clock" \
      "Condições operacionais" "Análise de temporização" ] # Precisamos de um estilo definido para imprimir a tabela de captura de resultados
   { ::report::rmstyle basicrpt }
   ::report::d efstyle basicrpt {{cap_rows 1}} { conjunto de dados
      [divisão "[string repeat" [colunas];"]
      top set [split "[string repeat "+ - " [columns]+"] set inferior
      [top get] topcapsep set [top get] topdata set [data get] top enable topcapsep enable tcaption bottom enable tcaption $cap_rows } # Crie o relatório, defina as colunas para ter um espaço de preenchimento e # imprima a matriz com a captura de formato especificado
      { r destroy
      }
   ::report::report r 5 style basicrpt para
   { set col 0 } { $col < [r colunas]} { incr col } {
      r pad $col " "
   } post_message "Clock domains failing timing\n[r printmatrix $failing_paths_matrix]" # Salve o relatório em um arquivo se { [catch { abrir $output_file_name w } fh] } { erro do tipo post_message "Não foi possível abrir o arquivo: $fh" } outra { coloca $fh
      "Clock domains failing
      timing"
      r printmatrix2channel $failing_paths_matrix $fh
      catch {
fechar $fh } }

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.