Forum: FPGA, VHDL & Co. Digilent-FPGA-Projekte mit TCL


von New-User (Gast)


Lesenswert?

Wer verwendet TCL um Projekte aufzusetzen und kann erklären wie man das 
macht? Ich habe von Digilent einige Demo-Projekte geladen und diese 
liegen als Sourcen mit TCL vor, das in der Lage sein soll ein XPR zu 
erzeugen. Leider gelingt das nicht.

Ich bin im Vivado in das Unterverzeichnis navigiert, in dem das 
make_project.tcl liegt und habe es ausführen wollen. V hat es beim 
Tippen offenbar gefunden und ergänzt. Dabei kam die Fehlermeldung, dass 
kein Name vorliegt. Also habe ich "make_project meinprojektname" 
eingegeben und V erzeugt ein Projekt. Allerdings ist es leer. Das TCl 
hingegeben hat eine Menge an Commandos, linkt offenbar die Sourcen - 
u.a. das *.bd ud die IPs. Sieht insgesamt plausibel aus.

Laut dem Digilent-Sript wird das Projekt neben diesem Verzeichnis 
erzeugt. ist aber nicht.

1) wie führe ich das richtig aus?
2) von wo macht man das ?

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Hast du einen Link zu dem Beispielprojekt?

New-User schrieb:
> Wer verwendet TCL um Projekte aufzusetzen und kann erklären wie man das
> macht?

Das werden die meisten hier machen, zumindest alle die ihren Build 
Prozess automatisiert haben.

: Bearbeitet durch User
von New-User (Gast)


Lesenswert?

Es geht um einige zum Basys Board. also z.B. das hier:
https://github.com/Digilent/Basys-3-Keyboard/releases/download/v2016.4-1/Basys-3-Keyboard-2016.4-1.zip

Gelinkt werden die ZIP files von GIT. Angeblich kann man die TCL von 
Vivado direkt aus starten. Das TCL sieht z.B. so aus:
1
# Run this script to create the Vivado project files NEXT TO THIS script
2
# If ::create_path global variable is set, the project is created under that path instead of the working dir
3
4
# Project specific settings. These must be updated for each project.
5
set proj_name "Keyboard"
6
7
if {[info exists ::create_path]} {
8
  set dest_dir $::create_path
9
} else {
10
  set dest_dir [file normalize [file dirname [info script]]]
11
}
12
puts "INFO: Creating new project in $dest_dir"
13
cd $dest_dir
14
15
16
set part "xc7a35tcpg236-1"
17
set brd_part "digilentinc.com:basys3:part0:1.1"
18
19
# Set the reference directory for source file relative paths (by default the value is script directory path)
20
set origin_dir ".."
21
22
# Set the directory path for the original project from where this script was exported
23
set orig_proj_dir "[file normalize "$origin_dir/proj"]"
24
25
set src_dir $origin_dir/src
26
set repo_dir $origin_dir/repo
27
28
# # Set the board repo
29
# # Uncomment if distributing board files with project in the "repo/board_files" folder.
30
# # This is currently untested. It intends to also keep any existing board repo paths, since this is a global Vivado setting (not project specific.
31
# # Ideally, if the project is closed, and then a new project is created (without closing Vivado), this should still be able to see a board repo specified in init.tcl.
32
#set_param board.repoPaths "[file normalize "$repo_dir/board_files"]"
33
34
# Create project
35
create_project $proj_name $dest_dir

Aufruf mit make_project.tcl (projektname). Wie gesagt, legt er ein 
Projekt an, startet es in Vivado - es ist aber leer. Das Script läuft 
ins Leere ...

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Also hier funktioniert das wunderbar.

Zuerst musst du das Board ausm XHUB installieren (Tools -> XHUB). Dann 
wechselst du in den Ordner in dem create_project.tcl liegt und startest 
das Script in der Kommandozeile via:
1
vivado -mode batch -notrace -source create_project.tcl

Sollte die Meldung kommen, dass das Board nicht gefunden werden kann, 
dann einfach in das Script noch folgende Zeile ganz am Anfang einfuegen:
1
set_param board.repoPaths {$HOME/.Xilinx/Vivado/2020.1/xhub/board_store/xilinx_board_store/}

$HOME mit deinem Homeverzeichnis ersetzen.

Alternativ kannst du die heruntergeladenen Board Files auch ins Vivado 
Installationsvereichnis kopieren. Siehe auch:

https://reference.digilentinc.com/reference/software/vivado/board-files

Bitstream Generation laeuft dann auch problemlos durch. Falls Vivado 
meckert, dass das Projekt schon existiert, kannst du noch die 
create_project Zeile im Tcl Script abaendern zu:
1
# Create project
2
create_project -force $proj_name $dest_dir

von Cle (Gast)


Lesenswert?

Was für dein Problem die einfachste Antwort ist:

In der Vivado TCL Shell in den Ordner mit dem Skript navigieren und 
dann:
1
source ./make_project.tcl
Das sollte alles generieren.

Sonst wie Tobias schreibt auch direkt (bei mir ohne  notrace) mit dem 
Vivado Aufruf sourcen:
1
vivado -mode batch -source make_project.tcl

Ich habe mir immer ein Bashscript gebaut das verschiedene Board 
Versionen auswählen kann, die lokale Vivado Version überprüft und 
entweder alle externen sourcen importiert oder relativ anzieht sowie 
möglicherweise direkt eine Implementation in der Shell antriggert. Sehr 
schön auch für remote builds wenn es keine andere Infrastruktur gibt.

von New-User (Gast)


Lesenswert?

Um in die Vivado-Shell zu gelangen, muss ich erst ein Projekt aufmachen. 
Ist das relevant, wo das liegt oder wie das heisst?


Cle schrieb:
> Sonst wie Tobias schreibt auch direkt (bei mir ohne  notrace) mit dem
> Vivado Aufruf sourcen: vivado -mode batch -source make_project.tcl

Von wo aus rufe ich das auf? Windows - CMD?

von Cle (Gast)


Lesenswert?

New-User schrieb:
> Um in die Vivado-Shell zu gelangen, muss ich erst ein Projekt
> aufmachen.
> Ist das relevant, wo das liegt oder wie das heisst?
Nein, du musst kein Project aufmachen. Einfach unten das TCL Command 
Fenster "aufklappen".

>
> Cle schrieb:
>> Sonst wie Tobias schreibt auch direkt (bei mir ohne  notrace) mit dem
>> Vivado Aufruf sourcen: vivado -mode batch -source make_project.tcl
>
> Von wo aus rufe ich das auf? Windows - CMD?
Ah, Windows ist vrmtl anders. Ich rede von Linux. Aber du kannst 
vermutlich in einer Verknuepfung in Windows direkt auch die Argumente 
mit uebergeben oder das in der Shell machen, bin ich allerdings nicht 
sicher.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

New-User schrieb:
> Um in die Vivado-Shell zu gelangen, muss ich erst ein Projekt aufmachen.
> Ist das relevant, wo das liegt oder wie das heisst?

Nein, das ist nicht erforderlich.

>> Vivado Aufruf sourcen: vivado -mode batch -source make_project.tcl
>
> Von wo aus rufe ich das auf? Windows - CMD?

Ja, natürlich auf der Kommandozeile.

Welche Fehlermeldungen hast Du denn überhaupt bei Deinen bisherigen 
vergeblichen Versuchen erhalten? Nein, damit meine ich nicht "geht 
nicht" oder "nichts passiert", sondern hinreichend vollständige Ausgaben 
von Vivado bzw. die erzeugten Logfiles.

Hast Du überprüft, ob das offenbar für Vivado 2016.4 bestimmte Skript 
überhaupt zu Deiner installierten Vivado-Version kompatibel ist? 
Spätestens bei der Instanzierung von mitgelieferter IP-Blöcken kommt es 
da doch oft zu Fehlern.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Cle schrieb:
> Ah, Windows ist vrmtl anders. Ich rede von Linux. Aber du kannst
> vermutlich in einer Verknuepfung in Windows direkt auch die Argumente
> mit uebergeben oder das in der Shell machen, bin ich allerdings nicht
> sicher.

Der Aufruf von Vivado verhält sich bei Windows und Linux exakt gleich.

von New-User (Gast)


Lesenswert?

Andreas S. schrieb:
> New-User schrieb:
>> Um in die Vivado-Shell zu gelangen, muss ich erst ein Projekt aufmachen.
>> Ist das relevant, wo das liegt oder wie das heisst?
>
> Nein, das ist nicht erforderlich.
Und wie komme ich ohne etwas aufzumachen, an die TCL-Zeile? 
Wahrscheinlich ein batchrauf an Vivado "ohne GUI"?

>>> Vivado Aufruf sourcen: vivado -mode batch -source make_project.tcl
>> Von wo aus rufe ich das auf? Windows - CMD?
> Ja, natürlich auf der Kommandozeile.
Funktioniert nicht. Er kenne "vivado" nicht. Da ist sicher kein PATH 
gesetzt. Werde mal suchen.


> Welche Fehlermeldungen hast Du denn überhaupt bei Deinen bisherigen
> vergeblichen Versuchen erhalten?
Wie ich schrieb: Es kommt nichts. Das Projekt, das Vivado nach 
Ausführung des Scripts ausführt, hat keine Sourcen. Es gibt keine 
Hierarchien. Dabei dachte ich, dass es mit einem Script besser gehen 
müsse, als durch Weitergabe des Projekts. Ich habe aber inzsichen 
Projekte im GIT gefunden, die jemand angelegt hat und die sogar 
teilweise auf 2020 aktualisiert wurden.

Da gibt es aber nun andere Probleme obwohl ich  genau die Version zum 
Öffnen nutze. Ich habe aber den Autor mal kontaktiert.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Angehängte Dateien:

Lesenswert?

New-User schrieb:
> Und wie komme ich ohne etwas aufzumachen, an die TCL-Zeile?
> Wahrscheinlich ein batchrauf an Vivado "ohne GUI"?

Wenn ich unter Windows (genauso unter Linux) das GUI von Vivado 2020.1 
starte, erscheint das im Anhang befindliche Fenster. Dort wird einem auf 
dem goldenen Tablett die TCL-Konsole präsentiert.

Und sobald man ein TCL-Skript startet - egal ob in der Konsole oder 
mittels Tools->Run Tcl Script - erscheint dort zumindest irgendeine 
Ausgabe.

>> Ja, natürlich auf der Kommandozeile.
> Funktioniert nicht. Er kenne "vivado" nicht. Da ist sicher kein PATH
> gesetzt. Werde mal suchen.

Boah, es ist echt unglaublich! Offenbar hast Du nicht ansatzweise die 
Xilinx-Dokumentation zur Installation von Vivado gelesen. Denn dann 
wüsstest Du, dass natürlich immer die zur aktuell zu verwendenden 
Vivado-Version passende settings.bat bzw. settings64.bat ausgeführt 
werden muss. Und da es möglich (und oft auch nötig) ist, mehrere 
Vivado-Versionen zu installieren, dürfen die entsprechenden 
Einstellungen natürlich auch nicht hart in den Pfad aufgenommen werden. 
Aber offenbar weißt Du es ja besser...

> Wie ich schrieb: Es kommt nichts. Das Projekt, das Vivado nach
> Ausführung des Scripts ausführt, hat keine Sourcen.

Irgendwelche Meldungen muss es gegeben haben. Ich habe selten etwas 
geschwätzigeres als die Tcl-Konsole gesehen.

: Bearbeitet durch User
von New-User (Gast)


Lesenswert?

Andreas S. schrieb:
> Denn dann
> wüsstest Du, dass natürlich immer die zur aktuell zu verwendenden
> Vivado-Version passende settings.bat bzw. settings64.bat ausgeführt
> werden muss.

Das Bat-Path-Zeug kenne ich freilich, habe es aber schon ewig nicht mehr 
verwendet. Zuletzt unter ISE, weil das alles DOS-ähnlich lief.

Ich habe aktuell mehrere Vivado-Versionen auf dem Desktop liegen und 
klicke die gewünschte an. Das hat eigentlich auch gut funktioniert. Z.B. 
musste ich vor einiger Zeit einige Projekte aktualisieren und habe dann 
mit den alten Versionen den Code komplettiert (eine neue Funktion) und 
das Bit für die FAB gebaut.

Dann wurde unter der neuen Version alles importiert, um es für die neuen 
Geräte in ein neues Design zu überführen. Autoimport und 
Core-Aktualisierung lief problemlos durch.

Wo wäre denn da ein Fallstrick?

Kann es sein, dass die nicht gesetzte PATH Variable dafür verantwortlich 
ist, dass bei mir kein TCL-Fenster kommt?

von New-User (Gast)


Lesenswert?

P.S. wenn ich ein maintainance mache, dann öffne ich beide Vivados 
gleichzeitig und bearbeite die alte und die neue Version des Projektes 
gleichzeitig. Habe ich gerade mal ausprobiert: Man kann parallel 
arbeiten, einmal eine Source  ändern, beide kriegen es mit und dann 
parallel bauen: Einmal mit der alten und einmal der neuen 
Vivado-Version. (Wir lassen die alten Projekte auf dem alten Stand, 
solange es nur VHDL-Änderungen gibt, weil sonst die Cores gfs nicht mehr 
laufen, bzw deren patches. Hochgepuscht wird nur, wenn es einen Grund 
dafür gibt.

Ich mache eigentlich alles über die Projektfiles. Theoretisch sollte es 
zwar möglich sein, dass man nur ein Projekt TCL archiviert um es dann 
jederzeit auf ein neues Vivado anwenden und das Projekt erzeugen lassen 
zu können, aber viele Beispiele belegen ja, dass das bei Xilinx nicht 
geht. Es reicht schon, wenn irgendwo in einem Core was gewändert wurde: 
Dann wird der zwar aktualsiert- läuft aber mit dem Rest nicht mehr, weil 
die defaulst sich ändern oder sogar Signale dazu kommen.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

New-User schrieb:
> Wir lassen die alten Projekte auf dem alten Stand,
> solange es nur VHDL-Änderungen gibt, weil sonst die Cores gfs nicht mehr
> laufen, bzw deren patches. Hochgepuscht wird nur, wenn es einen Grund
> dafür gibt.

Heisst "wir" in dem Kontext, dass es sich hier um ein professionelles 
Umfeld fern vom Hobbybasteln handelt?

von New-User (Gast)


Lesenswert?

Tobias B. schrieb:
> Heisst "wir" in dem Kontext, dass es sich hier um ein professionelles
> Umfeld fern vom Hobbybasteln handelt?

Ja, allerdings ist das Basys-Thema ein privates von mir.

von Andreas H. (ahz)


Angehängte Dateien:

Lesenswert?

New-User schrieb:
> Kann es sein, dass die nicht gesetzte PATH Variable dafür verantwortlich
> ist, dass bei mir kein TCL-Fenster kommt?

Mach mal unter Windows Vivado "normal" auf, also mit Doppelclick.
Dann solltest Du (zumindest bei 2020.1) genau das Fenster sehen wie es 
Andreas gepostet hat.

Wenn da keine TCL-Shell (das untere Fenster) zu sehen ist, dann drücke 
Ctrl-Shift-T oder im Menu auswählen. Siehe Bild ;)

/regards

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.