mikrocontroller.net

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


Autor: Andreas B. (loopy83)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

write_to_fifo <= line_valid and frame_valid;


Das war doch einfach, oder? :-)


Grüße,
Kest

Autor: Andreas B. (loopy83)
Datum:

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

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas B. (loopy83)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.