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)
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.
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.
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.
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
>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.
@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
> 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...
> 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
@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.
> 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; |
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.
@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
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?
> 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.