Exemplo de Quartus® II Tcl: nós elaborados em grupos de tempo

author-image

Por

Os grupos de tempo são uma maneira eficiente de fazer tarefas de sincronização. Você pode especificar curinga que incluem nós correspondentes ao padrão no grupo e especificar curinga que exclui nós que correspondam ao padrão do grupo. Você pode precisar ver uma lista de todos os nós no grupo de tempo para verificar se você especificou os padrões de caracteres curinga corretos.

Esses scripts elabom os nós em um grupo de tempo em seu design. O script itera sobre cada nó de sincronização em seu design, comparando o nome do nó de sincronização com cada padrão de inclusão de grupo de tempo e, em seguida, cada padrão de exclusão de grupo de tempo.

Há uma limitação com este script; ele não lida com grupos de tempo aninhados. Incluir ou excluir um grupo de tempo como elemento de outro grupo de tempo é válido, mas não é suportado por este script.

Para incluir todos os bits de um barramento em um grupo de tempo, use um asterisco após o nome do barramento nas versões 4.2 e abaixo do software Quartus II. A partir da versão 5.0, você pode especificar um nome de barramento sem um asterisco. O script inclui uma verificação para esse comportamento, com base no número da versão do software.

Projeto global quartus load_package advanced_timing load_package # Determine se o script está sendo executado em

4.2 e antes,
nº ou 5.0 e mais recente, 5.0 e mais tarde reconhece o nome <bus> como uma entrada de grupo de tempo válida, enquanto 
4.2 e antes de exigir o nome
# <bus>*
como uma entrada de grupo de tempo. regexp {^Version (\d)} $quartus(versão) corresponde qver se { $qver < 5 } { definir need_asterisk 1 } outra { definir
    need_asterisk
    0 } project_open

[lindex $quartus(args) 0]

create_timing_netlist conjunto tg_name

[lindex tg_name $quartus(args) 1] post_message "Os seguintes nós são membros do grupo de

tempo $tg_name:" conjunto

tg_name conjunto escape_brackets $tg tg_members
[timegroup -get_members $tg_name] definido tg_exceptions
[timegroup -get_exceptions $tg_ nome] # Este loop percorre cada nó de sincronização no design 
foreach_in_collection node_id [get_timing_nodes -type all] { definir

    node_name [get_timing_node_info -info name $node_id] # Se o nome do nó não estiver em um barramento, limpe o

    bus_name.
    # De outra forma, defina-o.
    se { ! [regexp {(.*?)) \[\d+\\]} $node_name match bus_name] } { definir bus_name "" } # Agora que temos o nome do nó, verifique se ele corresponde a # qualquer padrão no conjunto de tempo especificado corresponde a 0 membros
    foreach_in_collection  
    $tg_members { definir esc_name

        [escape_brackets [lindex $member 2]] se
        { [string match $esc_name $node_name] } { definir corresponde a
            1
        } elseif { ! $need_asterisk && \
            [string match $esc_name $bus_name] } { set matches 1 } } } # Se $matches for

    1 aqui, o nó de sincronização correspondeu a um nome de membro # no grupo  
    de tempo. No entanto, ele ainda pode corresponder a uma exceção.  
    Verifique isso aqui.
    se { $matches } { foreach_in_collection exceção
        
        $tg_exceptions {
            
            definir esc_name [escape_brackets [lindex $exception 2]] se
            { [string match $esc_name $node_name] } { definir corresponde
                a 0 }
            elseif { ! $need_asterisk && \
                [string match $esc_name $bus_name] } { definir corresponde
                a 0 } } }

    # Nós olhamos para todas as exceções. Se $matches ainda é 1, o nome do nó correspondeu ao padrão do membro e não correspondeu a um padrão de exceção, então imprima o
    nome do nó.
    se { $matches } {
        post_message $node_name
    } }

project_close

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.