Exemple de Quartus® II Tcl : rendre toutes les broches virtuelles

author-image

Par

Si vous utilisez un flux de conception modulaire dans la région de verrouillage logique de votre projet, vous pouvez choisir de faire toutes les broches d’E/S d’un module virtuel d’E/S afin de pouvoir facilement l’importation du module dans une conception de haut niveau. De plus, si vous voulez compiler un cœur IP pour voir le nombre de ressources qu’il utilise mais qu’il utilise trop de broches pour votre périphérique cible, la virtualiser les broches peut permettre au cœur de s’adapter.

La procédure simple suivante fait toutes les broches de votre conception broches d’E/S virtuelles. Tout d’abord, la conception est synthétisée pour déterminer quels nœuds sont des broches. Ensuite, une collection d’ID de noms est configurée pour correspondre aux broches de la conception, puis une VIRTUAL_PIN cession est appliquée à chaque broche. Enfin, la commande export_assignments écrit toutes les nouvelles affectations au fichier de paramètres Quartus II (.qsf) du projet.

L’exemple utilise les commandes get_names et get_name_info, disponibles à partir de la version 4.0 du logiciel Quartus II (version 2.0 du package ::quartus::p roject). Reportez-vous au dernier exemple de cette page pour obtenir un code qui fonctionnera à partir de la version 3.0 du logiciel Quartus II et qui possède des capacités plus avancées.

load_package flow

proc make_all_pins_virtual {} {

    execute_module-tool map

    set name_ids [get_names -filter * -node_type pin]

    foreach_in_collection name_id $name_ids { set
        pin_name [get_name_info full_path $name post_message
        « Effectuer une affectation de VIRTUAL_PIN sur $pin_name »
        set_instance_assignment -à $pin_name-name VIRTUAL_PIN activé
    } export_assignments
}

Améliorer l’exemple de code

Il existe différentes façons d’améliorer le code d’exemple.

Supprimer les affectations de VIRTUAL_PIN existantes

Vous pouvez ajouter la commande suivante au début de la procédure pour supprimer toutes les affectations de VIRTUAL_PIN existantes. Il s’agit d’une étape utile pour s’assurer que les affectations sont dans un état connu. Ajoutez cette commande avant la commande execute_module.

VIRTUAL_PIN de nom remove_all_instance_assignments

Exclure manuellement certaines broches, telles que les horloges

Pour que le logiciel Quartus II puisse optimiser la synchronisation selon sa conception, les horloges doivent être connectées à des broches d’E/S de haut niveau dans le périphérique cible, et les paramètres d’horloge doivent être appliqués aux horloges. Cela est vrai même si toutes les autres broches d’une conception sont des broches d’E/S virtuelles. Par conséquent, l’exemple de base ci-dessus empêche le logiciel Quartus II d’optimiser la synchronisation pendant la compilation, car toutes les broches, y compris les horloges, ont une VIRTUAL_PIN affectation appliquée.

Vous pouvez ajouter un paramètre à la procédure qui accepte une liste de signaux à exclure des affectations de VIRTUAL_PIN. Cette liste serait généralement le nom des broches d’horloge de votre conception. L’exemple suivant accepte une liste de noms à exclure. Il comprend également la commande de supprimer toutes les affectations de VIRTUAL_PIN existantes, expliquées ci-dessus.

load_package package de flux
nécessitent des proc cmdline

make_all_pins_virtual { args } {

    options de jeu {\ { «
        exclude.arg » » « Liste des signaux à exclure » } \
    } ensemble de batterie
    opts [::cmdline::getoptions quartus(args) $options]

    remove_all_instance_assignments -nom VIRTUAL_PIN
    execute_module-tool
    map set name_ids [get_names-filter * -node_type pin]

    foreach_in_collection name_id $name_ids {
        définir pin_name [get_name_info -info full_path $name_id]

        si {-1 == [lsearch -exact $opts(exclut) $pin_name] }
            {post_message « Assignation VIRTUAL_PIN à $pin_name »
            set_instance_assignment - à $pin_name -name VIRTUAL_PIN on }
        {d’autre part {
            post_message « l’affectation de l’VIRTUAL_PIN à $pin_name »
        } } export_assignments
}

Vous pouvez appeler la procédure avec cette commande. Cet exemple suppose que vous avez deux horloges dans votre conception, nommées clk_a et clk_b.

make_all_pins_virtual -exclure { clk_a clk_b }

Identifier et gérer automatiquement les horloges

L’exemple précédent d’exclusion de certains signaux présente le inconvénient qu’ils doivent être entrés à la main. Il est possible de déterminer les signaux d’horloge avec des commandes dans le package : ::quartus:advanced_timing. Ce package étant disponible pour le chargement uniquement dans le quartus_tan exécutable, vous devez utiliser quartus_tan pour exécuter des scripts avec l’exemple suivant. Les commandes de cet exemple sont toutes prises en charge à partir de la version 3.0 du logiciel Quartus II.

L’identification automatique des horloges a l’avantage de vous permettre d’automatiser l’application de la USE_CLK_FOR_VIRTUAL_PIN affectation. Vous pouvez utiliser la cession de USE_CLK_FOR_VIRTUAL_PIN en conjonction avec l’affectation de VIRTUAL_PIN à associer les paramètres d’horloge aux horloges de votre conception. Cela fournit au Fitter Quartus II des informations précises sur les exigences de synchronisation lorsque vous compilez une conception à l’aide de broches d’E/S virtuelles. Pour plus d’informations sur cette affectation, reportez-vous à la rubrique Option logique de l’horloge virtuelle des broches dans l’aide Quartus II.

L’exemple suivant fait toutes les broches d’E/S de votre conception virtuelles. Elle permet également la répartition des paramètres de l’horloge des broches virtuels, le cas échéant.

L’exemple de code synthétise d’abord votre conception. Ensuite, il tente de supprimer toute liste de netlist de synchronisation existante avant de créer une nouvelle. Les commandes get_timing_nodes créent deux collections de nœuds à partir de la netlist de synchronisation : pin_ids et clk_ids. Les deux collections sont exclusives ; nœud de la collection clk_ids se trouve dans la collection pin_ids, même si l’horloge peut être sur une broche d’E/S.

La première boucle foreach_in_collection obtient le nom de chaque broche dans la conception (à l’exclusion des broches d’horloge) et effectue une affectation VIRTUAL_PIN à celle-ci.

La deuxième boucle foreach_in_collection obtient le nom de chaque horloge dans la conception. La commande get_instance_assignment récupère le paramètre d’horloge correspondant, s’il existe. Si un paramètre d’horloge pour l’horloge existe (la chaîne n’est pas vide), le script effectue une USE_CLOCK_FOR_VIRTUAL_PIN cession au nom de l’horloge avec la valeur du nom du paramètre d’horloge.

load_package make_all_pins_virtual de load_package advanced_timing synchronisation du load_package de flux load_package

proc { { {

    remove_all_instance_assignments
    -name VIRTUAL_PIN remove_all_instance_assignments -name

    USE_CLK_FOR_VIRTUAL_PIN execute_module -tool map
    catch { delete_timing_netlist } create_timing_netlist
    -post_map set pin_ids
    
    [broche de type
    get_timing_nodes] réglée clk_ids [get_timing_nodes -type clk]
    
    # Faites des affectations de VIRTUAL_PIN à chaque broche de la broche design
    foreach_in_collection pin_id $pin_ids {

        définissez pin_name [get_timing_node_info -info name $pin_id]
        post_message « Assignation VIRTUAL_PIN à $pin_name »
        set_instance_assignment à $pin_name -name VIRTUAL_PIN activé } Nb
    pour chaque horloge de la

    conception, vérifiez s’il dispose d’un 
    numéro de affectation de CLOCK_SETTINGS correspondant.
    foreach_in_collection clk_id $clk_ids {

        définissez clk_name [get_timing_node_info -info name $clk_id] défini
        clk_stgs [get_instance_assignment -à $clk_name -name \ 
           CLOCK_SETTINGS]

        # S’il existe un paramètre d’horloge pour cette horloge, effectuez la
        affectation # USE_CLK_FOR_VIRTUAL_PIN si {
        ![ string equal « » $clk_stgs] } {
            post_message « Making USE_CLK_FOR_VIRTUAL_PIN assignment \ to
                $clk_name with value $clk_stgs »
            set_instance_assignment -to $clk_name \
                -name USE_CLK_FOR_VIRTUAL_PIN $clk_stgs
        } } export_assignments
}

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.