Hallo,
ich möchte den Ausgabewert einer FIFO zu bestimmten Zeitpunkten (bevor
er gelesen wird) in eine Textdatei schreiben. Der Code sieht
folgendermaßen aus:
monitoring : process (clk)
file OUT_DAT : text open write_mode is "output.txt";
variable LO: line;
begin
if(clk'event and clk = '1') then
if(fifo_empty = '0') then
fifo_read <= '1';
--write output to file
file_open(OUT_DAT, "output.txt", write_mode);
write (LO,fifo_out);
writeline (OUT_DAT, LO);
file_close(OUT_DAT);
else
fifo_read <= '0';
end if;
end if;
end process;
output.txt wird zwar erstellt, aber nichts reingeschrieben. file_open
und file_close habe ich nur mit reingenommen, weil es nicht
funktioniert. Geändert hat sich allerdings nichts :-(
Hat jemand einen heißen Tipp?
Gast
#3593115
rein gefühlsmässig muss da noch ein wait rein, bis die Datan geschrieben sind und beim Hauptprozess einer, damit sichergestellt wird, dass gespeichert wird, bevor die Simu "weiterarbeitet".
Gast
#3593152
Nach
1 | |
stehen die Daten vom FIFO natürlich erst im nächsten Takt zur Verfügung. Also etwa so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
Gast
#3593156
Lattice User schrieb: > stehen die Daten vom FIFO natürlich erst im nächsten Takt zur Verfügung. Eventuell braucht es auch 2 Takte oder mehr, hängt von der FIFO Konfiguration ab.
Danke für die schnellen Antworten :-) @Expert Wie genau würde das aussehen? Ich habe noch einen Hauptprozess in dem die Stimuli stehen, da gibts auch am Ende ein wait (nach den vielen "wait for x ns" um die verschiedenen Stimuli zu triggern). Aber wie kann ich in diesen "Dummy"-Prozess der nur dafür da ist, damit die Fifo geleert wird (wäre im richtigen Design ein externer Pin), ein wait einbauen (sorry, habe noch nicht viel mit TBs gemacht)? Genauso weiß ich nicht, wie ich im Hauptprozess der die File-Objekte nicht kennt (oder doch?), das Ganze abfragen soll. @Lattice User Das Problem ist nicht, dass die falschen Daten geschrieben werden, sondern dass gar nichts in die Datei geschrieben wird. Von der Logik her möchte ich es genau so: den aktuellen Wert lesen (bzw. schreiben), bevor durch das Read mit der entsprechenden Verzögerung neue Daten am Ausgang der Fifo anliegen.
Gast
#3593488
Ich bin jetzt nicht der VHDL Experte aber da kommt mir extrem merkwürdig vor.
1 | |
write_mode sind normalerweise Dinge wie Anhängen oder Überschreiben.
Richard Bruchthal schrieb: > output.txt wird zwar erstellt, aber nichts reingeschrieben. Kommst du tatsächlich an die Stelle mit writeline()? Immer einen Blick wert: http://www.stefanvhdl.com/vhdl/html/file_write.html
Expert schrieb: > rein gefühlsmässig muss da noch ein wait rein, bis die Datan > geschrieben > sind und beim Hauptprozess einer, damit sichergestellt wird, dass > gespeichert wird, bevor die Simu "weiterarbeitet". Auch wenn da Expert steht, ist das kompletter Quatsch (mit oder ohne Soße).
Hallo nochmal, wie es so ist, sind die Sachen an denen man lange hängt, entweder wirklich tricky oder einfach nur blöde. Ich konnte es zwar noch nicht verifizieren, aber ich glaube mein Problem gehört zur zweiten Kategorie (die Idee ist mir ganz klassisch im Halbschlaf gekommen). Ich habe zunächst das Dateizeugs eingebaut und als es nicht ging, erstmal so weitergemacht. Später mich dann nochmal rangesetzt und nach längerem rumprobieren den Thread eröffnet. Jetzt glaube ich aber, dass bei meinem letzten Testcase, also der vor dem erneuten ransetzen, die entsprechende Fifo gar nicht gefüllt wird. Somit hätte Lothar also recht. Danke und sorry an alle :-/
Gast
#3593890
Klaus Falser schrieb: > Expert schrieb: >> rein gefühlsmässig muss da noch ein wait rein, bis die Datan >> geschrieben >> sind und beim Hauptprozess einer, damit sichergestellt wird, dass >> gespeichert wird, bevor die Simu "weiterarbeitet". > > Auch wenn da Expert steht, ist das kompletter Quatsch (mit oder ohne > Soße). Der Typ trollt doch schon seit Wochen hier im Forum rum... Ich finds irgendwie lustig! Der kramt auch schon die ganze Zeit uralte Threads aus. Ich glaube sein Vorgehen durchschaut zu haben. Der googlet nach 1-2 Begriffen bzgl. des Themas und klatscht dann einfach Schlagwörter oder Kernsätze (zumindest, was er für wichtige Wörter und Sätze hält) so zusammen, das sie scheinbar nen Sinn ergeben!! Aber warum er hier weitermacht, versteh ich nicht. Du bist glaube ich der erste... ne sry mit dem TO, der zweite der jemals Bezug auf seinen Quatsch genommen hat. Ich glaub vor knapp nen Jahr war er schonmal da. Da hat er gleich mehrere "Experten" "miteinander" diskutieren lassen... das war irgendwie originell! Tja wenn man sonst nix zu tun hat in der Kaffeepause
Vielleicht ist das der gleich wie der "Weltbeste FPGA pongo" der hat auch immer mit gut getarntem Halbwissen um sich geworfen...
Ich habe einen schönen Prozess als Ausgangsvorlage für dich aus einer Testbench ausgeschnitten. Dieser Process schreibt die Datenpakete in ein Logfile. Das ist sicher genau was du suchst, bzw. einfach an dein FiFo Problem adaptierbar. Bei deinem Code, wird das File mit jeder Taktflanke erneut geöffnet.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.