Forum: FPGA, VHDL & Co. time'image(now) in ns, us oder ms?


von Parcher (Gast)


Lesenswert?

Hallo zusammen,

in meiner Simulation möchte ich gerne VHDL Timestamps z.B. für Logfiles 
verwenden. Hierzu nutze ich time'image(now). Leider erhalte ich dabei 
immer den Timestamp in ps, was die Zahlen leider schlecht lesbar macht. 
In der Regel bei meinen Simulationen mindestens eine Granularität von 1 
ns.

Gibt es eine Möglichkeit, eine time to string Conversion durchzuführen 
und dabei die präferierte unit selbst zu definieren?

Die Verwendung von write funktioniert in meinem Fall nicht, da ich einer 
Log Funktion nur einen String übergeben will.

Viele Grüße
  Parcher

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


Lesenswert?

Parcher schrieb:
> in meiner Simulation
Mit welchem Simulator?

von Duke Scarring (Gast)


Lesenswert?

Du kannst einfach durch die gewünschte Zeit(-auflösung) dividieren:
1
entity time_sim is
2
end entity time_sim;
3
4
architecture testbench of time_sim is
5
begin
6
7
    main: process
8
    begin
9
        report( time'image( now));
10
        report( integer'image( now / 1 ns) & " ns");
11
        wait for 1 ms;
12
        report( time'image( now));
13
        report( integer'image( now / 1 ns) & " ns");
14
        wait;
15
    end process;
16
17
end architecture testbench;

Duke

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Parcher schrieb:
> Leider erhalte ich dabei
> immer den Timestamp in ps, was die Zahlen leider schlecht lesbar macht.

Dann 'streich nen paar Nullen weg' (aka, versetze einfach das Komma)
Wenn Piko-Sekunden gegeben sind, ist es doch ein Leichtes, daraus 
Nano-Sekunden zu machen (:1000), daraus µ (wieder :1000), daraus m 
(wieder :1000), daraus ganze Sekunden (erneut :1000).

Dabei musst Du 'nur' das Komma in Deinem String suchen und um jeweils 3 
Stellen nach links setzen.
Fehlende Stellen mit 0 auffüllen, obsolete Nullstellen links entfernen.

Das riecht doch förmlich nach 'Regex':
https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

MfG

von S. R. (svenska)


Lesenswert?

Patrick J. schrieb:
> Das riecht doch förmlich nach 'Regex':

Magst du mir verraten, wie man Regexe in VHDL benutzt? Würde mich 
nämlich auch interessieren.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

S. R. schrieb:
> in VHDL benutzt? Würde mich nämlich auch interessieren.

Sorry, da hatte ich versäumt, mir den entsprechenden Hintergrund (das 
VHDL ist ja sogar verlinkt) anzusehen :/
Mir kam 'nur' der Lösungsansatz in den Sinn, als ich das vermeintliche 
Problem sah und zumindest im Terminal (Linux) ist (sind?) Regex 
unglaublich hilfreich, mna muß das System dahinter 'nur' verstanden 
haben (ist ganz schön kompliziert) ... und man sollte nicht lange 'raus' 
sein.
Meine Kreationen dazu sind schon in die Jahre gekommen, müsste schauen, 
ob das Zeug überhaupt auf der aktuellen Platte drauf ist (ging um 
Dateinamen, Deren Aufbau immer identisch zusammen gesetzt war - aber 
halt ohne explizite Trennzeichen, z.B. das Datum und die Uhrzeit waren 
'Schlüsselworte', von dort konnte man vor und zurück - bzw den die 
Strings davor/dahinter entsprechend verarbeiten ... wow, schreibt sich 
sogar kompliziert, kein Wunder, daß ich da über Wochen Spaß mit hatte)

MfG

von Charles G. (Firma: Ingenieurbuero Gardiner) (cfgardiner)


Lesenswert?

Ab VHDL 2008 gibt es auch folgende Möglichkeit:

report "Timebase : Time now is " & to_string(now, us);

fs, ps, ns etc. geht natürlich auch.

Ab VHDL 2008 kannst du sogar to_string() auf jeden Scalar Typ anwenden.

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.