Kompilieren Sie Datum und Uhrzeit im FPGA

8

Kann ich in VHDL etwas Ähnliches wie den C-Sourcecode-Makros __DATE__ und __TIME__ verwenden?  die Kompilierzeit als eine Art Versionszeitstempel im FPGA verfügbar zu machen?

Als ein & gt; & gt; Neuling & lt; & lt; & lt; & lt; zu VHDL Ich möchte den folgenden vorhandenen Code ändern, der ein fest codiertes Datum in ein FPGA-Register einfügt. Ich muss immer daran denken, die Werte vor dem Kompilieren anzupassen. Es wäre einfacher, wenn dies automatisch gemacht wird. Kann ich auch Stunden / Minuten / Sekunden angeben?

%Vor%     
Helmholtz42 09.08.2013, 07:19
quelle

3 Antworten

14

Das aktuelle Datum und die aktuelle Uhrzeit sind nicht direkt in VHDL verfügbar, aber die Lösung wird unten vorgeschlagen.

EDITED 2013-08-10 : Beschreibung für Altera Quartus II Tcl automatische Generierung hinzugefügt.

Eine Möglichkeit, Datum und Uhrzeit verfügbar zu machen, ist ein automatisch generiertes VHDL-Paket wie das folgende:

%Vor%

Dieses VHDL-Paket kann mit einem Tcl-Skript wie folgt erstellt werden:

%Vor%

In Altera Quartus II ist es möglich, das Skript vor der Synthese durch den Fluss laufen zu lassen, wodurch das datetime-Paket erstellt werden kann. Dies geschieht in der .qsf-Datei mit der Zeile darunter, wo das Skript den Namen "make_datetime.tcl" hat:

%Vor%

Eine weitere Beschreibung dieses Quartus II-Features finden Sie in Quartus II Tcl Beispiel: Automatische Skriptausführung .

Das Datum2-Modul kann das Paket dann wie folgt verwenden:

%Vor%

Nach der Synthese in Quartus II zeigt der RTL-Viewer die Modulausgänge wie folgt:

Zuvor beschriebene alternative Lösungen bestehen darin, das VHDL-Paket mit einem Bash-Skript wie folgt zu erstellen:

%Vor%

Für Plattformunabhängigkeit kann ein Python 3.x-Skript wie dieses verwendet werden:

%Vor%

Für die Darstellung von Datum und Uhrzeit in 32-Bit-Registerwerten kann ein Modul wie folgt aussehen:

%Vor%

Wellenform unten gezeigt.

Der Bash- oder Python-Skriptansatz erfordert eine Integration in den Build-Ablauf für die automatische Paketgenerierung.

EDITED 2016-08-08 mit Update von Damien: Beschreibung des Nicht-Tcl-Script-Aufrufs von Altera Quartus.

Um ein Bash-Skript (unter Linux) zu integrieren, erstellen Sie ein Tcl-Wrapper-Skript, das das Bash-Skript als Teil des Prozesses aufruft. In diesem Beispiel gibt es ein "scripts" -Verzeichnis mit einem Skript "call_bash.tcl" und ein "make_datetime.sh", das die eigentliche Arbeit erledigt:

%Vor%

Die Integration in den Build-Fluss von Altera kann dann durch Hinzufügen folgender Elemente zur qsf-Datei erreicht werden:

%Vor%     
Morten Zilmer 09.08.2013 11:14
quelle
1

Ich verwende eine 64-Bit std_logic_vector Konstante.

Ich habe ein TCL-Skript, das kurz vor der Synthese läuft, um die aktuelle Zeit in eine Konstante in einem Paket zu codieren, das dann in das FPGA aufgenommen wird, damit es auf irgendeine Weise ausgelesen werden kann.

Es gibt eine nicht automatisch generierte Version des gleichen Pakets, das ich in Simulationen verwende - dies ändert sich nicht , so dass ich die Tests nicht ständig aktualisieren muss.

    
Martin Thompson 20.08.2013 18:42
quelle
0

Sie müssen den vollständigen Code nicht jedes Mal neu schreiben, wenn der Zeitstempel aktualisiert wird. In Quartus können Sie TCL verwenden, um vor der Kompilierung Top-Level-Generics festzulegen:

Übergeben Sie die Generika an Ihre Zeitstempeleinheit:

%Vor%

Und dann verwenden Sie ein Preflow-Skript, um die Generika zu setzen:

%Vor%

Ich habe diesen Ansatz erfolgreich mit beiden Zeitstempeln, Git Revision, Build ID verwendet. Ich finde es bequem, es in ein Word-Array zu konvertieren und dann als ROM zuzugreifen. Benutze einfach deine Vorstellungskraft.

    
trondd 21.08.2013 21:26
quelle

Tags und Links