Forum: FPGA, VHDL & Co. Versionsinfo in Design unterbringen


von TheMason (Gast)


Lesenswert?

Ich hab mal ne kurze Frage :

Hab ich in VHDL die Möglichkeit Informationen wie z.b. das aktuelle 
Datum als Konstante zu erzeugen ?
Ich würde ganz gerne eine Build-Information im FPGA ablegen ohne diese 
bei jedem Build (bzw synthetisieren) von Hand updaten zu müssen. In C 
hab ich ja mit _DATE_ diese Möglichkeit. Gibt es ein solches 
Äquivalent in VHDL (von mir aus ein Integer-Wert in Sekunden seit dem 
1.1.1900 oder sowas ...)
Das ich mir dann quasi aus dem Integer-wert eine Konstante mache die ich 
über Schieberegister (oder wie auch immer) abfragen kann. Wäre ganz 
praktisch wenn man den FPGA updaten möchte, so könnte man anhand des 
Datums erkennen ob die neueste Version drin ist. Oder wenn man 
Systeminfos ausgeben möchte (wie in meinem Fall)

von SuperWilly (Gast)


Lesenswert?

Wieso verwendest du nicht einen Usercode ?

von TheMason (Gast)


Lesenswert?

was ist denn genau der user code ?! hab mal kurz gegooglet aber nichts 
gefunden. auch die ise-hilfe gibt da nicht viel her (oder ich bin zu 
blöd dazu, was wahrscheinlicher ist ;-))
mir ist es nur wichtig das bei jedem synthetisieren ein anderer inhalt 
des besagten integers, vectors (oder eben auch user code) erzeugt wird, 
sodass ich das nicht von hand jedesmal updaten muß.
am besten wäre wirklich das datum des synthetisierens, da ich die 
uC-Firmware ebenfalls mit einem "automatischen datum" versehen hab, und 
so würde bei den infos zwei datumsangaben erscheinen, was einfach 
stringenter wäre als ein datum und eine irgendwie geartete versions bzw 
build nummer.

von TheMason (Gast)


Lesenswert?

meinst du mit user-code einen code der sich per jtag in den fpga bringen 
lässt ?! würde insofern probleme geben da ich den code dann auch im 
fpga-design verfügbar haben müsste, da ich noch keinen tap-controller im 
uc drin habe um diesen dann auslesen zu können. und so wie ich das sehe 
würde das automatische inkrementieren bzw. datumserzeugen damit ja auch 
nicht funktionieren.

von TheMason (Gast)


Lesenswert?

andere idee :

hab ich  bei dem ise die möglichkeit vor dem synthetisieren programme 
auszuführen (also quasi ne art batch-datei die vor dem synthetisieren 
ausgeführt wird) ?
damit könnte ich dann programm aufrufen welches mir eine bestimmte datei 
extern modifziert (z.b. einen 32-bit std_logic_vector der gesucht wird 
und dann mit dem sekundenwert seit 1.1.1900 oder so beschrieben wird) 
und das datum wäre dann fest im design drin.

von Matthias (Gast)


Lesenswert?

Wenn du den Build gescripted aufsetzt kannst du eigentlich alles machen, 
was du willst.

Ich hab das mit cygwin und make mit xflow gemacht, da sollte es kein 
Problem sein, noch eine Datei mit einer bestimmten Konstante zu erzeugen 
bevor man das ganze ise-werkl anwirft.

LG
Matthias

von TheMason (Gast)


Lesenswert?

>Wenn du den Build gescripted aufsetzt kannst du eigentlich alles machen,
>was du willst.

ich arbeite nur mit dem webpack. also per script wird da nichts 
ausgeführt.
na ja ... zur not müsste ich das tool in der quick-launch leiste 
reinpacken. aber die gefahr ist trotzdem das man das vergisst.

von Duke Scarring (Gast)


Lesenswert?

@TheMason:

Such mal im xst.pdf nach "Initializing RAM From an External File". Dann 
mußt Du nur noch dafür sorgen, das im "external file" immer das 
gewünschte drinsteht (z.B. per cronjob/autostart/younameit).

Der RAM (bzw. auch ROM)-Inhalt wird dann zur Synthse eingelesen.

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Du nur noch dafür sorgen ...
Ja, das Du (bzw. Ich oder wer auch immer) ist das eigentliche 
Problem :-/

Die Absicht wäre doch, das die ISE-Toolchain das automatisch macht.
Irgendwie sollte es da eine oder besser mehrere Stellen geben, an denen 
externe Batches/Scripts ausgeführt/aufgerufen werden können...

von Duke Scarring (Gast)


Lesenswert?

> Die Absicht wäre doch, das die ISE-Toolchain das automatisch macht.
Bei mir läuft das auch automatisch - die komplette Toolchain per Skript 
und ohne GUI.

Duke

von TheMason (Gast)


Lesenswert?

@lothar

>Ja, das Du (bzw. Ich oder wer auch immer) ist das eigentliche
>Problem :-/

wohl wahr :-)

>Irgendwie sollte es da eine oder besser mehrere Stellen geben, an denen
>externe Batches/Scripts ausgeführt/aufgerufen werden können...

wenn das ginge wäre ich schon zufrieden. hab mir zwischenzeitlich damit 
geholfen mit einem kleinen programm ein angegebenes file nach einer ganz 
bestimmten kombination zu durchsuchen und an der stelle diese dann zu 
ersetzen. das funktioniert soweit ganz gut. nur wäre es echt sehr schön 
wenn ich aus dem ISE eben diese batch-datei (am liebsten mit frei 
definierbaren argumenten) ausführen könnte. das wäre perfekt. ansonsten 
funktioniert es so wie ich mir das vorgestellt habe (wenn auch über den 
umweg eines externen programms)

>Bei mir läuft das auch automatisch - die komplette Toolchain per Skript
>und ohne GUI.

und genau auf die GUI von ISE möcht ich eben nicht verzichten.
Wäre halt echt schön wenn man ähnlich wie unter Visual $tudio einfach 
ein paar batch jobs (oder von mir aus auch nur einen einzigen ;-)) 
ausführen könnte.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> und genau auf die GUI von ISE möcht ich eben nicht verzichten.
Ich auch nicht, denn inzwischen taugt die durchaus was... ;-)


Ich habe das so gemacht:
Im FPGA-Design eine Komponente mit einer Konstanten definiert, die die 
Versionsdaten enthält (Zeit als 32-Bit-Variable im C-Format time_t 
abgelegt).

Die VHDL-Datei, die diese Konstante enthält, habe ich in zwei Teile 
aufgeteilt: einen mit dem VHDL-Text vor der Versions-Info (Header), und 
einen mit dem VHDL-Text nach der Versions-Info (Footer). Dazu gibt es 
ein Programm, das mir aus der Rechnerzeit eine Konstante für eine dritte 
Datei erzeugt.

Jetzt wird eine Batch-Datei aufgerufen, die in eine Datei namens 
Version.vhd zuerst den Header, dann die Version und danach den Footer 
kopiert. Anschliessend wird das Ganze synthetisiert....

Vorteil: ich habe in der VHDL-Datei Version.vhd das Datum + die Zeit 
auch im Klartext vorliegen

Allerdings rufe ich derzeit diese o.a. Batchdatei noch manuell auf. Ich 
suche wie auch noch nach einer geeigneten Schnittstelle...

--- Header
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity Versionierung is
6
    Port ( Version    : out  STD_LOGIC_VECTOR (31 downto 0) );
7
end Versionierung;
8
9
architecture Behave of Versionierung is
10
   constant Ver : std_logic_vector(31 downto 0) :=
--- Versionsinfo
1
          x"ee67b649";   -- Timestamp: Tue Mar 10 14:15:26 2009
--- Footer
1
begin
2
   Version <= Ver;
3
end Behave;

von TheMason (Gast)


Lesenswert?

So ähnlich mache ich das ja auch. Nur das ich in einem angegebenen 
VHDL-File eine bestimmte Kennung suche (in meinem Falle : 'signal 
build_date : std_logic_vector (31 downto 0) := X"' und am ende : '" -- 
AUTOREPLACE : DATE") und den text dazwischen ersetze mit einer (ähnlich 
dem time_t) Konstanten die das aktuelle Datum seit dem 1.1.1900 in 
Sekunden enthält.
Aber zum Ausführen muß ich ebenfalls die Batch-Datei manuell aufrufen. 
Und da sehe ich eben die "Gefahr" drin das man das vergisst. Na ja .. 
bleibt wohl vorerst keine andere Möglichkeit.

von Duke Scarring (Gast)


Lesenswert?

@all:

Eventuell könnt ihr das mit Hilfe der Xilinx-TCL-Shell automatisieren. 
Zumindest liesse sich die Batch-Datei/whatever damit direkt aus der ISE 
heraus aufrufen.

Duke

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Duke Scarring schrieb:
>> Die Absicht wäre doch, das die ISE-Toolchain das automatisch macht.
> Bei mir läuft das auch automatisch - die komplette Toolchain per Skript
> und ohne GUI.
>
> Duke
Könntest du das Skript hier eventuell mal reinstellen?

von Duke Scarring (Gast)


Lesenswert?

> Könntest du das Skript hier eventuell mal reinstellen?
Leider nein, da nicht auf meinem Mist gewachsen.

Es gibt verschiedene Ansätze (Makefile/tcl/python), die im Web und in 
der Tool-Doku publiziert sind:

* Beim SoC-lm32 ist ein Makefile dabei, welches sich leicht auf VHDL 
umstricken läßt
* XST User Guide, Chapter "XST Command Line Mode"
* Beitrag "ANN: Xilinx ISE Makefile"
* ansonsten: http://lmgtfy.com/?q=ise+makefile

Duke

von B. B. (bib)


Lesenswert?

Hier ist auch eine gute (funktionierende!) Makefile / Anleitung:
http://avr.auctionant.de/vhdl/xilinx_fpga_makefile_linux.html

wo ich allerdings bis jetzt total gescheitert bin ist das als TOP 
Identity zu nehmen und EDK Komponenten einzufügen...

(Wobei EDK ja von sich aus seine Makefiles mitbringt...)

Hat das jemand schon mal erfolgreich gemacht?

Gruß

B.B.

PS: Die Anpassung an Impact ist nicht ganz einfach - wenn die jemand 
braucht kann ich sie hier posten....

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.