Vivado 2014.1 ermöglicht die Verwendung von .tcl-Skripten, um Projekte neu zu generieren.
Gehen Sie dazu bei geöffnetem Projekt zu Datei -> Projekt schreiben tcl.
Grundlegende Projekte
Normalerweise speichere ich meine Quellen und mein .tcl-Skript an einem Ort außerhalb des Projektverzeichnisses. Die im Rahmen des Projekts generierten xilinx-IP-Cores können an eine andere Stelle kopiert werden, indem Sie mit der rechten Maustaste auf den Core klicken und "IP kopieren" auswählen. Und das Original löschen. Wenn das tcl-Skript generiert wird, werden relative Links zu diesen Dateien erstellt. So sieht meine Verzeichnisstruktur normalerweise aus:
base_project/
srcs/
project.v
ip/
ip1/
ip1.xml
ip1.xci
genproject.tcl
Es müssen nur die IP-XML- und -XCI-Dateien festgeschrieben werden. (Und selbst das ist technisch nicht notwendig, siehe Anmerkungen am Ende).
Dies ist, was zu Git verpflichtet wird, beachten Sie das Fehlen von project.xpr oder Projektverzeichnissen.
Beim Ausführen genproject.tcl
wird ein anderes Verzeichnis für das Projekt erstellt.
base_project/
srcs/
ip/
genproject.tcl
projectdir/
project.runs/
project.cache/
project.xpr
Dieser neue Ordner ist vollständig wegwerfbar. Um diese Struktur zu erstellen, ändere ich das tcl-Skript folgendermaßen.
Ich ändere die ersten 3 Zeilen wie folgt:
# Set the reference directory for source file relative paths (by default the value is script directory path)
set origin_dir [file dirname [info script]]
# Set the directory path for the original project from where this script was exported
set orig_proj_dir "[file normalize "$origin_dir/projectdir"]"
# Create project
create_project project $projectdir/project
Dadurch wird ein neues Projektverzeichnis und das neue Projekt in diesem Verzeichnis erstellt.
Dann ändere ich die Pfade, um auf die richtigen Stellen zu zeigen. Möglicherweise müssen Sie diese Pfade an anderen Stellen im Skript ändern.
# Set 'sources_1' fileset object
set obj [get_filesets sources_1]
set files [list \
"[file normalize "$origin_dir/srcs/project.v"]"\
"[file normalize "$origin_dir/ip/ip1/ip1.xci"]"\
]
add_files -norecurse -fileset $obj $files
Ich ändere auch die Entwurfsabläufe für IP-Kerne, wie in dieser Antwort zu sehen .
Die .wcfg-Dateien können auf ähnliche Weise wie die Dateien ip und srcs eingefügt werden.
Hier endet die Verarbeitung für einfachere Projekte (die nur Quellen und IP enthalten, keine Blockdiagramme). Das Folgende muss ebenfalls durchgeführt werden, um die Blockdiagrammdaten zu speichern.
Blockdiagramm-Projekte
Um das Blockdiagramm zu speichern, gehen Sie bei geöffnetem Blockdiagramm zu Datei -> Exportieren -> Blockdiagramm in Tcl und speichern Sie es im selben Verzeichnis wie die andere Tcl-Datei.
Dann habe ich ein Generate_Wrapper.tcl
Skript erstellt, das die Wrapper-Dateien für Blockdiagramme erstellt, sodass Sie dies nicht manuell tun müssen. Der Ordner project / project.srcs wird zum Speichern der BD-Daten verwendet, ist jedoch immer noch vollständig verfügbar, da die BD im tcl-Skript gespeichert ist. Speichern Sie dies mit den anderen beiden.
set origin_dir [file dirname [info script]]
make_wrapper -files [get_files $origin_dir/project/project.srcs/sources_1/bd/design_1/design_1.bd] -top
add_files -norecurse -force $origin_dir/project/project.srcs/sources_1/bd/design_1/hdl/design_1_wrapper.v
update_compile_order -fileset sources_1
update_compile_order -fileset sim_1
Am Ende von my genproject.tcl
füge ich die folgenden Zeilen hinzu, um das Blockdiagramm und die Wrapper zu generieren:
source $origin_dir/Create_bd.tcl
source $origin_dir/Generate_Wrapper.tcl
regenerate_bd_layout
Für Projekte ohne Quelle (nur Blockdiagramm) lautet mein git-Commit wie folgt:
base_project/
Generate_Wrapper.tcl
Create_Bd.tcl
genproject.tcl
Führen Sie aus, um alles zu generieren genproject.tcl
.
Sie können all dies sogar zu einem kombinieren, wenn Sie besonders effizient sind. Darauf bin ich noch nicht gekommen.
Benutzerdefinierte Komponenten: Das Komponentenprojekt
Noch ein kurzer Hinweis zum Erstellen einer benutzerdefinierten Komponente. Wenn Sie eine component.xml haben, fügen Sie diese Ihrer tcl-Quellenliste hinzu:
"[file normalize "$origin_dir/component.xml"]"\
Fügen Sie dann auch den folgenden Abschnitt hinzu:
set file "$origin_dir/component.xml"
set file [file normalize $file]
set file_obj [get_files -of_objects [get_filesets sources_1] [list "*$file"]]
set_property "file_type" "IP-XACT" $file_obj
Dies schließt das Komponentendesign für eine einfache Anpassung in das Projekt ein.
Benutzerdefinierte Komponenten: Verweisen auf Ihre Komponente
Sie können Ihren benutzerdefinierten Komponenten-Repo-Pfad folgendermaßen einteilen:
# Set IP repository paths
set obj [get_filesets sources_1]
set_property "ip_repo_paths" "[file normalize "$origin_dir/path/to/repository"]" $obj
In meinem Repo-Ordner befinden sich einzelne Ordner mit XML-Dateien. Sie verweisen also nicht auf den Ordner mit der XML-Datei, sondern auf den übergeordneten Ordner. Z.B:
repository/
component1/component1.xml
component2/component2.xml
Wie führen wir diese Tcl-Skripte aus?
Öffnen Sie Vivado und ohne Projekte zu öffnen, wählen Sie Extras -> TCL-Skript ausführen und navigieren Sie zu Ihrem Skript.
Zusätzliche TCL-Notizen
Jeder Befehl, den Sie in Vivado ausführen, wird in der tcl-Konsole als tcl-Befehl angezeigt. Wenn ich zum Beispiel eine neue Xilinx-IP über die GUI generiert habe, wurde dies in der tcl-Konsole angezeigt:
create_ip -name floating_point -vendor xilinx.com -library ip -module_name floating_point_0
set_property -dict [list CONFIG.Operation_Type {Fixed_to_float} CONFIG.A_Precision_Type {Custom} CONFIG.C_A_Exponent_Width {38} CONFIG.C_A_Fraction_Width {0} CONFIG.Result_Precision_Type {Custom} CONFIG.C_Result_Exponent_Width {8} CONFIG.C_Result_Fraction_Width {16} CONFIG.Flow_Control {NonBlocking} CONFIG.Has_ARESETn {true}] [get_ips floating_point_0]
Das bedeutet ein paar Dinge:
Sie müssen nicht einmal wirklich xilinx-IP-Kerne speichern. Kopieren Sie die Befehle in das tcl-Skript, sobald sie Ihren Wünschen entsprechen, und Sie müssen ip / nicht mehr festschreiben.
Geben Sie das IP-Verzeichnis mit dem Argument -dir nach -module_name an, um es an der gewünschten Stelle abzulegen (standardmäßig in project.srcs).
Fast alles, was Sie in der GUI tun, können Sie in tcl tun. Der einfachste Weg, um zu sehen, wie Xilinx etwas tut, ist, es in der GUI zu tun und sich anschließend anzusehen, was sich in der TCL-Konsole befindet.
In diesem umfangreichen PDF werden alle vivado tcl-Befehle detailliert beschrieben.