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
Hi, write_to_fifo <= line_valid and frame_valid; Das war doch einfach, oder? :-) Grüße, Kest
Gibt es denn kein Delay (mal abgesehen von den Gatterlaufzeiten) zwischen "Daten liegen am FPGA an" und "schreiben ins Fifo"?
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.
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!
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.