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 } }