Beispiel für Quartus® II Tcl: Alle Pins virtuell gestalten

author-image

Von

Wenn Sie in Ihrem Projekt einen modularen Logik-Lock-Region-Designablauf verwenden, können Sie wählen, alle I/O-Pins in einem Modul virtuelle I/O-Pins zu verwenden, um das Modul einfach in ein erstklassiges Design zu importieren. Wenn Sie einen IP-Kern kompilieren möchten, um zu sehen, wie viele Ressourcen er verwendet, aber zu viele Pins für Ihr Zielgerät verwendet, kann es sein, dass die Pins virtuell sind, sodass der Kern passen kann.

Mit dem folgenden einfachen Verfahren werden alle Pins in Ihrem Design zu virtuellen I/O-Pins. Zunächst wird das Design syntheseisiert, um zu bestimmen, welche Knoten Pins sind. Als Nächstes ist eine Sammlung von Namens-IDs so eingestellt, dass sie den Pins im Design entspricht, dann wird jeder Stiftkontakt mit einer VIRTUAL_PIN zugewiesen. Schließlich schreibt der Befehl export_assignments alle neuen Zuweisungen in die Quartus II Settings File (.qsf) des Projekts.

Das Beispiel verwendet die get_names und get_name_info Befehle, die ab Version 4.0 der Quartus II Software (Version 2.0 des Pakets ::quartus::p roject) verfügbar sind. Lesen Sie das letzte Beispiel auf dieser Seite für Code, der ab Version 3.0 der Quartus II Software funktioniert und erweiterte Funktionen bietet.

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 -info full_path $name_id] post_message
        "Making VIRTUAL_PIN assignment to $pin_name" set_instance_assignment
        -to $pin_name -name VIRTUAL_PIN ON } export_assignments
}

Verbesserung des Beispielcodes

Es gibt eine Vielzahl von Möglichkeiten, wie der Beispielcode verbessert werden kann.

Vorhandene VIRTUAL_PIN-Zuweisungen entfernen

Sie können zu Beginn des Verfahrens den folgenden Befehl hinzufügen, um alle bestehenden VIRTUAL_PIN Zuweisungen zu entfernen. Dies ist ein nützlicher Schritt, um sicherzustellen, dass sich die Zuweisungen in einem bekannten Zustand befinden. Fügen Sie diesen Befehl vor dem Befehl execute_module hinzu.

remove_all_instance_assignments -name VIRTUAL_PIN

Schließen Sie bestimmte Stiftkontakte wie Taktfrequenzen manuell aus

Damit die Quartus II Software die Timing-Optimierung durchführen kann, während sie auf ein Design passt, müssen die Taktfrequenzen mit I/O-Pins der obersten Ebene im Zielgerät verbunden sein, und auf die Takteinstellungen müssen die Takteinstellungen angewendet werden. Dies gilt auch, wenn alle anderen Pins in einem Design virtuelle I/O-Pins sind. Daher hindert das obige grundlegende Beispiel die Quartus II Software daran, das Timing während der Kompilierung zu optimieren, da auf alle Pins, einschließlich Taktfrequenzen, eine VIRTUAL_PIN Zuweisung angewendet wird.

Sie können dem Verfahren einen Parameter hinzufügen, der eine Liste von Signalen akzeptiert, die von den VIRTUAL_PIN Zuweisungen ausgeschlossen werden sollen. Diese Liste würde in der Regel die Namen der Taktstifte in Ihrem Design sein. Im folgenden Beispiel wird eine Liste von Namen akzeptiert, die ausgeschlossen werden müssen. Dazu gehört auch der Befehl zur Entfernung bestehender VIRTUAL_PIN Zuweisungen, die oben besprochen werden.

load_package
Flusspaket erfordert cmdline

proc make_all_pins_virtual { args } { set

    options {\ {
        "exclude.arg" "" "List of signals to exclude" } \
    } array set
    opts [::cmdline::getoptions quartus(args) $options]

    remove_all_instance_assignments -name VIRTUAL_PIN 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 -info full_path $name_id]

        if { -1 == [lsearch -exact $opts(excludes) $pin_name] } {
            post_message "Making VIRTUAL_PIN assignment to $pin_name"
            set_instance_assignment -to $pin_name -name VIRTUAL_PIN ON
        } else { post_message
            "VIRTUAL_PIN Assignment to $pin_name" } }
        export_assignments
}

Sie können das Verfahren mit diesem Befehl aufrufen. Dieses Beispiel nimmt an, dass Sie zwei Takte in Ihrem Design haben, die clk_a und clk_b genannt werden.

make_all_pins_virtual -exclude { clk_a clk_b }

Taktfrequenzen automatisch identifizieren und handhaben

Das vorherige Beispiel, um bestimmte Signale auszuschließen, hat den Nachteil, dass sie von Hand eingegeben werden müssen. Es ist möglich, Taktsignale mit Befehlen im Paket ::quartus::advanced_timing zu bestimmen. Dieses Paket kann nur in der quartus_tan ausführbaren Datei geladen werden. Daher müssen Sie quartus_tan verwenden, um Skripts mit dem folgenden Beispiel auszuführen. Die Befehle in diesem Beispiel werden ab Version 3.0 der Quartus II Software alle unterstützt.

Das automatische Identifizieren von Taktfrequenzen hat den Vorteil, dass Sie die Anwendung der USE_CLK_FOR_VIRTUAL_PIN Zuweisung automatisieren können. Sie können die USE_CLK_FOR_VIRTUAL_PIN zuweisung in Verbindung mit der VIRTUAL_PIN Zuweisung verwenden, um Takteinstellungen mit Taktfrequenzen in Ihrem Design zu verknüpfen. Dies bietet dem Quartus II Accelerator genaue Informationen über die Zeitablaufsanforderungen, wenn Sie ein Design mit virtuellen I/O-Pins kompilieren. Weitere Informationen zu dieser Zuweisung finden Sie im Option-Thema "Virtual Pin Clock Logic" in der Quartus II Hilfe.

Im folgenden Beispielverfahren werden alle I/O-Pins in Ihrem Design zu virtuellen I/O-Pins. Darüber hinaus werden ggf. Zuweisungen zur Einstellung virtueller Pin-Takte erstellt.

Der Beispielcode niert zuerst Ihr Design. Dann wird versucht, jede bestehende Timing-Netlist zu löschen, bevor eine neue erstellt wird. Die get_timing_nodes Befehle erstellen zwei Knoten aus der Timing-Netzliste: pin_ids und clk_ids. Die beiden Exklusivitäten sind exklusiv; kein Knoten in der clk_ids-Sammlung befindet sich in der pin_ids-Sammlung, selbst wenn die Taktfrequenz möglicherweise auf einem I/O-Pin liegt.

Die erste foreach_in_collection-Schleife erhält den Namen jedes Pins im Design (außer Taktstifte) und wird diesem VIRTUAL_PIN zugewiesen.

Die zweite foreach_in_collection-Schleife erhält den Namen jeder Taktfrequenz im Design. Der get_instance_assignment Befehl holt die entsprechende Takteinstellung ab, falls vorhanden. Wenn eine Takteinstellung für die Taktfrequenz vorhanden ist (die Zeichenkette ist nicht leer), wird vom Skript eine USE_CLOCK_FOR_VIRTUAL_PIN Zuweisung an den Taktnamen mit dem Wert des Takteinstellungsnamens vergeben.

load_package Flow
load_package Timing load_package advanced_timing
proc make_all_pins_virtual

{ } { 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
    
    [get_timing_nodes -type pin]
    set clk_ids [get_timing_nodes -type clk]
    
    # Make VIRTUAL_PIN Assignments zu jeder Pin im design
    foreach_in_collection pin_id $pin_ids {

        set pin_name [get_timing_node_info -info name $pin_id]
        post_message "Making VIRTUAL_PIN assignment to $pin_name" set_instance_assignment
        -to $pin_name -name VIRTUAL_PIN ON } #
    Für jede

    Taktfrequenz im Design überprüfen Sie, ob es eine 
    entsprechende CLOCK_SETTINGS Zuweisung gibt.
    foreach_in_collection clk_id $clk_ids {

        set clk_name [get_timing_node_info -info name $clk_id] set
        clk_stgs [get_instance_assignment -to $clk_name -name \ 
           CLOCK_SETTINGS] # Wenn für diese

        Taktfrequenz eine Takteinstellung vorhanden ist, stellen Sie die
        Nummer USE_CLK_FOR_VIRTUAL_PIN Zuweisung
        ein, wenn { ![ 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
}

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.