Exemple de Quartus® II Tcl : nœuds de grâce dans les timegroups

author-image

Par

Les timegroups sont un moyen efficace d’effectuer des affectations de synchronisation. Vous pouvez spécifier les wildcards qui incluent des nœuds correspondant au schéma dans le groupe, et spécifier les wildcards qui excluent les nœuds correspondant au schéma du groupe. Il est possible que vous deviez voir une liste de tous les nœuds dans le timegroup pour vérifier que vous avez spécifié les bons modèles de wildcard.

Ces scripts éliminent les nœuds dans un ensemble de temps dans votre conception. Le script itère sur chaque nœud de synchronisation de votre conception, comparant le nom du nœud de synchronisation à chaque schéma d’inclusion du timegroup, puis à chaque schéma d’exclusion de timegroup.

Ce script présente des limites ; elle ne traite pas les timegroupes imbriqués. L’inclusion ou l’exclusion d’un timegroup comme élément d’un autre timegroup est valide, mais n’est pas prise en charge par ce script.

Pour inclure tous les bits d’un bus dans un timegroup, utilisez un astérisque après le nom du bus dans les versions 4.2 et ci-dessous du logiciel Quartus II. À partir de la version 5.0, vous pouvez spécifier un nom de bus sans astérisque. Le script comprend une vérification de ce comportement, basée sur le numéro de version du logiciel.

global quartus
load_package advanced_timing
project load_package

Déterminez si le script est exécuté en 4.2 et avant,
# ou 5.0 et ultérieurement. 5.0 et versions ultérieures reconnaît le nom <bus> comme 
un numéro d’entrée de timegroup valide, tandis que 4.2 et avant exigent
# <bus nom>* comme entrée timegroupe.
regexp {^Version (\d)} $quartus(version) match qver
if { $qver < 5 }
    {set need_asterisk 1
} d’autre {
    set need_asterisk 0 } project_open

[$quartus(args) 0]

create_timing_netlist défini tg_name

[lelx $quartus(args) 1]

post_message « Les nœuds suivants sont membres du timegroup $tg_name: »

défini tg_name [escape_brackets $tg_name]
défini tg_members [timegroup -get_members $tg_name]
défini tg_exceptions [timegroup -get_exceptions $tg_

nom] # Cette boucle passe à travers chaque nœud de synchronisation dans le foreach_in_collection node_id de conception 
[get_timing_nodes -type tout] {

    défini node_name [get_timing_node_info -info name $node_id]

    # Si le nom de nœud n’est pas dans un bus, effacez le bus_name.
    Nb. Sinon, définissez-le.
    si { ! [régexp {(.*?) \[\d+\]} $node_name match bus_name] }
        {set bus_name « »
    } } Maintenant que nous avons le nom de
    
    nœud, vérifiez qu’il correspond à  
    n°1 des modèles du jeu de temps spécifié correspond à  
    0 foreach_in_collection membre  
    $tg_members {

        set esc_name [escape_brackets [$member $member 2]
        si { [string match $esc_name $node_name] }
            {set matches 1
        } elseif { ! $need_asterisk &&
            \[string match $esc_name $bus_name] }
            {set matches
        1} } } Si $matches est

    1 ici, le nœud de synchronisation correspond à un nom de membre  
    # dans le timegroup. Cependant, elle pourrait toujours faire correspondre une exception.  
    Nb. Vérifiez cela ici.
    si { $matches }
        
        {foreach_in_collection exception $tg_exception $tg_exceptions {
            
            définissez esc_name [escape_brackets [$exception $exception 2]]
            si {[string match $esc_name $node_name] }
                {set matches 0
            } elseif { ! $need_asterisk &&
                \[string match $esc_name $bus_name] } {
                set matches 0
            } } } } # Nous avons examiné toutes les

    exceptions. Si $matches est toujours 1,
    nº, alors le nom de nœud correspond au modèle de membre et ne correspond pas
    à un modèle d’exception, alors imprimez le nom du nœud.
    si { $matches } {
        post_message $node_name
    } }

project_close

Le contenu de cette page est une combinaison de traduction humaine et informatique du contenu original en anglais. Ce contenu vous est fourni pour votre commodité et à titre informatif seulement et ne saurait être totalement exact ou complet. En cas de contradiction entre la version anglaise de cette page et la traduction, c'est la version anglaise qui prévaut. Afficher la version anglaise de cette page.