Forum: FPGA, VHDL & Co. Triggersignal soll Instanz ausführen/starten


von Andreas B. (loopy83)


Lesenswert?

Hallo,

ich stehe aktuell vor dem Problem, dass ich Daten von einem CCD Sensor 
entgegennehmen muss. Dazu verwende ich einen Spartan 3A DSP.

Die Daten kommen kontinuierlich, es werden also ohne Pause Daten vom CCD 
geschickt.

Nun ist es eine Aufgabe, die sinnvollen Daten von den nutzlosen Daten zu 
unterscheiden und danach entsprechende Maßnahmen einzuleiten.
Für dieses Zweck generiert mir das CCD Frontend zwei Signale. Line_valid 
ist vom ersten gültigen Pixel einer Zeile bis zum letzten gültigen Pixel 
einer Zeile high. Frame_valid ist vom ersten bis zum letzten gültiges 
Pixel des ganzen Bildes high.

Die Daten kommen seriell in DDR an, werden mit einem IDDR2 nach 
steigender und fallender Flanke getrennt, in zwei Schieberegistern 
parallelisiert, in die richtige Reihenfolge sortiert und anschließend 
über ein Fifo vom Busmaster ausgelesen.

Nun will ich natürlich nur die gültigen Pixel in das Fifo schreiben.

Dazu wollte ich Line_valid und Frame_valid nutzen, um die Operation des 
Parallelisierens nur auszuführen, wenn diese Signale anliegen bzw. high 
sind.

Leider fehlt mir dazu wieder das Vorstellungsvermögen, wie ich ein 
solches Problem angehen könnte.
Reicht vielleicht schon eine einfache Abfrage auf LV and FV = '1' ?

Könnte ich das write_enable des Fifos mit diesen Signalen verbinden, 
damit nur die gültigen Daten in das Fifo geschrieben werden? NUr gehen 
die Daten ja einen recht langen Weg IBUFGDS, IDDR2, Schieberegister usw. 
Da müßte ich doch exakt wissen, wieviele Takte für diese und jene 
Operation gebraucht werden, um dann eine entsprechende Verzögerung 
einbauen zu können...

Ich wäre für Hinweise und weitere Ideen sehr sehr dankbar!!!

MfG Andreas

von Kest (Gast)


Lesenswert?

Hi,

write_to_fifo <= line_valid and frame_valid;


Das war doch einfach, oder? :-)


Grüße,
Kest

von Andreas B. (loopy83)


Lesenswert?

Gibt es denn kein Delay (mal abgesehen von den Gatterlaufzeiten) 
zwischen "Daten liegen am FPGA an" und "schreiben ins Fifo"?

von Klaus F. (kfalser)


Lesenswert?

Andreas B. schrieb:
> Könnte ich das write_enable des Fifos mit diesen Signalen verbinden,
> damit nur die gültigen Daten in das Fifo geschrieben werden? NUr gehen
> die Daten ja einen recht langen Weg IBUFGDS, IDDR2, Schieberegister usw.
> Da müßte ich doch exakt wissen, wieviele Takte für diese und jene
> Operation gebraucht werden, um dann eine entsprechende Verzögerung
> einbauen zu können...

Ja, das musst Du.
Du hast 2 Möglichkeiten:
- Du nimmst Dir ein Stück Papier und zählst die Taktstufen durch, ich 
würde es auch mit Hilfe einer Simulation kontrollieren.
- Du schleifst das Enable Signal durch die selben Stufen wie die Daten.

Aber üblicherweise macht man das eigentlich schon beim Design-Entwurf, 
dass man sich überlegt zu welcher Taktflanke was passiert.

von Andreas B. (loopy83)


Angehängte Dateien:

Lesenswert?

Ah ok, also war mein Gedankengang gar nicht so falsch.

Ich hab jetzt mal simuliert.
Ich habe alle Signale so gesetzt, dass von Anfang an alle Bedingungen 
für den Dataout process gegeben sind und schaue nun, wann die Daten am 
Ausgang anliegen.

Schreibtakt des Fifos ist synchron zum Takt der seriellen Daten (geteilt 
durch 4 durch die 4bit Schieberegister).
Der Lesetakt ist aber asynchron dazu, weil dieser extern vorgegeben 
wird.

Mein Eingangstakt hat 160MHz, also 6,25ns Periodendauer.
Die ersten Daten kommen, bezogen auf diesen Takt, ca. nach 3125ns an, 
was 500 Perioden entspricht, also 500 Takte. Das kommt mir fast aber ein 
wenig viel vor... kann das denn sein?

Ich habe mir mal die Mühe gemacht und fix mit paint den Signalweg 
dargestellt... ich hoffe es ist verständlich bzw. plausibel. (siehe 
Anhang)

Mit wievielen Takten muss ich denn rechnen bzw. durch welche Gatter muss 
ich die Sync-signale führen, damit das gleiche Delay entsteht.

VIELEN DANK!

von J. S. (engineer) Benutzerseite


Lesenswert?

> Mit wievielen Takten muss ich denn rechnen bzw. durch welche Gatter
> muss ich die Sync-signale führen, damit das gleiche Delay entsteht.

Du sprichst hoffentlich nicht von asychronen Getterverzögerungen??

Sinnvoll wäre eher die Frage, wieviele Takte Du beim Einschreiben 
auslassen musst, um die Latenz der Leseanordnung zu berücksichtigen.

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.