mikrocontroller.net

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


Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: SuperWilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso verwendest du nicht einen Usercode ?

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity Versionierung is
    Port ( Version    : out  STD_LOGIC_VECTOR (31 downto 0) );
end Versionierung;

architecture Behave of Versionierung is
   constant Ver : std_logic_vector(31 downto 0) :=
--- Versionsinfo
          x"ee67b649";   -- Timestamp: Tue Mar 10 14:15:26 2009
--- Footer
begin
   Version <= Ver;
end Behave;

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: B. Bremer (bib)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist auch eine gute (funktionierende!) Makefile / Anleitung:
http://avr.auctionant.de/vhdl/xilinx_fpga_makefile...

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....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.