Forum: FPGA, VHDL & Co. Hilfe bei Datentransfer von RAM in FIFO


von Chris (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich jetzt kein VHDL-Crack bräuchte unbedingt Hilfe.
Ich hatte für meine Abschlussarbeit die Aufgabe ein VHDL Programm zu 
schreiben, das mehrere kurze Messpulse erzeugt. Dieser Messpuls läuft 
über einen Tiefpass und erzeugt eine abklingende e- Funktion (5 Tau). 
Nun digitalisiere ich das abklingende Signal über einen ADC.  Nun mein 
erster Programmteil erzeugt mit einer State maschine den Messimpuls 
variabler Länge. Ist dieser Messimpuls abgelaufen erzeugte ich über 
meine Testbench die fiktiven ADC Daten. Diese Daten takte ich in ein 
RAM. Nun habe ich in dieser Simulation nicht nur einen Messimpuls 
sondern mehrere. Also ich sample von jedem der nacheinander kommenden 
Messimpulse die Abklingkurve die nach dem TP entsteht ab und addiere 
jeweils die aktuellen ADC Daten mit den bereits im RAM gespeicherten 
Daten mit einem Addierer und schreibe sie ins RAM zurück. Also auf jede 
im RAM gespeicherte Kurve addiere ich die folgende gesampelte Kurve auf. 
Habe ich eine gewisse Anzahl von Messimpulsen gesampelt gespeichert und 
addiert, schalte ich auf ein zweites RAM um und führe die Messung 
nochmals aus. Während die zweite Messung läuft und das zweite RAM 
beschrieben wird, lese ich über ein FIFO die Daten im RAM eins aus ( ist 
die zweite Messung fertig, lese ich Ram zwei aus und immer so weiter…) 
Nun nebenher läuft natürlich noch ein Adresszähler der mir die 
jeweiligen Adressen für das Ram erzeugt. In das FIFO will ich nun den 
Mittelwert des jeweiligen im RAM gespeicherten Wert schreiben. Das mache 
ich so, dass ich von meinem 25 Bit langen String nur die oberen 15 Bit 
nehme und diese ins FIFO schreibe (FIFO_DATA_IN <= DATA_FROM_SPRAM(24 
downto 9) -> siehe VHDL Files). Ich lege an den RAM die Adressen an und 
lese nur die Bits von 24 bis 9 in mein FIFO ein. Nun mein Problem ist, 
das ich zu beginn, also bevor ich Daten ins FIFO schreibe eine konstante 
Folge von zweimal x“6E6E“ also 2 mal 16 Bit den eigentlichen Daten 
voranstellen will. Mein nächstes Problem ist, dass ich die Daten gleich 
nach anlegen der Adresse ans RAM zum auslesen, ins FIFO übernehmen will. 
Sind die Daten im FIFO, sollen diese über eine UART Schnittstelle 
ausgelesen werden. Ich hätte gerne  mein Programm mit Testbench 
gepostet, leider ist dieses etwas groß. Jetzt kann ich nur die vhd Files 
anbieten ;-) Vielleicht kann mir ein VHDL Seniorprofi weiterhelfen, da 
wäre ich sehr sehr dankbar. Ich kann jedem Hilfsbereiten gerne mein 
Programm schicken. Ich weiß das mein Programm nicht ganz regelkonform 
ist, jedoch funktioniert es bis auf die Datenpufferung der Daten 
inklusive der konstanten Werte ins FIFO.Ich hoffe es ist verständlich 
was ich geschreiben haben...
Vielen vielen Dank für Rat und Tat.

von Duke Scarring (Gast)


Lesenswert?

Chris schrieb:
> Ich hoffe es ist verständlich
> was ich geschreiben haben...

Nicht wirklich. Ein paar Absätze (dafür gibt es die ENTER-Taste) wären 
ganz hilfreich gewesen.

Du verwendest einen Akkumulierer und einen Double-Buffer. Und irgendwo 
dazwischen/danach einen FIFO. Was war jetzt das konkrete Problem und 
welches Verhalten erwartest Du?

Duke

von Chris (Gast)


Lesenswert?

Hallo,

ja ich weiß, die Absätze....sorry.
Genau richtig.
Also es ist so, um den RAM auszulesen lege ich einen Takt und die 
Adressen an den RAM an. Nach einem FIFO enable will ich die Daten ins 
FIFO puffern und bevor ich das mache möchte ich eine konstante 
Datenfolge ins FIFO puffern. Wenn man sich die TB ansieht, werden die 
Adressen nach dem auslesen nicht richtig ins FIFO geschrieben. Diese 
müssten ja mit der fallenden Taktfanke am FIFO anliegen...

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.