mikrocontroller.net

Forum: FPGA, VHDL & Co. Signalverzögerungen, alternativen zum Schieberegister


Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab das Problem, dass ich ein Signal um etwa etwa 30µs verzögern 
muss, zum Ausgleich der Verzögerung eines Motors, Resolver und ADCs. 
Normal macht man ja eine Signalverzögerung durch FlipFlops und da ich 
alle Werte brauche, nur halt verzögert, benötige ich ein 
Schieberegister. Jedoch läuft das Design mit 50MHz. Dies würde bedeuten, 
dass das Schieberegister ziemlich lang wird.

Gibt es alternativen zu einem Schieberegister, was sich platzsparender 
implementieren lässt? Jetzt eher als grundsätzliches Problem betrachtet 
und nicht nur auf diesem konkreten Fall bezogen. Ach, und die ganze 
Sache muss natürlich synthesefähig sein.

vielen Dank für eure Vorschläge

Gruß Nephilim

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brauchst du wirklich auch eine Aufloesung von 1/50MHz = 20ns?
Wenn nein, dann schaltest du deine FF-Kette nur alle x Takte um einen 
Schritt weiter -> Clock Enable ist das Stichwort.
Wenn ja, dann brauchst du wirklich eine Kette von 1500 FF, wobei du 
diese besser in einem RAM-Block im FPGA ablegst und mit etwas Logik den 
Speicher zu einem Schieberegister umfunktionierst.

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

du brauchst kein Schieberegister, sondern einen Ringpuffer. In diesen 
schreibst du alle 20ns einen Wert rein und liest einen aus. Sowas kann 
man selbst programmieren oder sich als Core mit einem Tool des 
FPGA-Herstellers generieren lassen.

Bei 50 MHz hast du 50 Werte pro µs, bei 30 µs müssen also 1500 Werte in 
den Ringpuffer passen. Dazu reichen die internen RAMs alle mal.

Tom

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> du brauchst kein Schieberegister, sondern einen Ringpuffer.
Gleiches Kind mit anderem Namen... :-/

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Gleiches Kind mit anderem Namen... :-/
Nicht ganz.
Beim Schieberegister bewegt sich der Inhalt, beim Ringbuffer der 
Zugriffspunkt.

Autor: Matthias F. (flint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wohl sowas: DPRAM mit Platz für 30 us / 20 ns = 1500 Werten, 
Schreibprozess beginnt bei Addresse 0, Leseprozess wartet bis 
Schreibprozess bei Addresse 1500 und fängt dann an, auszulesen, 
Schreibprozess beginnt dann wieder bei 0.

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe auch noch einen Namen dafür: FIFO
:)

Der Besucher

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also die lösung mit dem RAM ist ja im grunde ganz gut. leider ist sie in 
meinem speziellen fall schlecht bis nicht möglich zu implementieren, da 
ich modellbasierend und hardwareunabhängig entwickle. das heisst, ich 
kann keine ramblöcke instanziieren und adressieren. gibt leider bei 
dieser art zu entwickeln noch einige einschränkungen gegenüber der 
programmierung in vhdl.

aber danke für die theoretische alternative.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das heisst, ich kann keine ramblöcke instanziieren und adressieren.
Dann mach deine Beschreibungen so, dass der Synthesizer das kann...
http://www.lothar-miller.de/s9y/archives/21-FIFO.h...

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, muss ich mal genauer untersuchen, wie das in MATLAB/Simulink als 
Modell zu bauen ist, damit der HDL Coder auch Code produziert, der von 
Synthesetool auch dementsprechend erkannt und umgesetzt wird.

Autor: Iulius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bist du denn überhaupt sicher alle 20ns einen Wert speichern zu müssen ?

Denn wenn nicht brauchst du dir doch nicht den Umstand machen und hier 
1500 Werte anzulegen...

Eventuell kannst du auch was aggregieren oder komprimieren. Das macht 
zwar etwas Aufwand, aber im Vergleich zu potenziell 1500 Slices....


Kann mir aber auch kaum vorstellen das du wirklich einen Datenstrom hast 
der alle 20ns ein  Datum hervorbringt, aber genau in dieser Art nach 
30µs erst gebraucht wird.

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, um genau eine Diskussion über den konkreten praktischen Grund zu 
vermeiden, weil ich da nicht ins Detail gehen kann/darf. Wollte ich eher 
eine theoretische Betrachtung, was für Möglichkeiten exisiteren, neben 
einem Schieberegister.

Autor: Iulius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na gut, dann kannst du ja trotzdem über die Möglichkeiten nachdenken die 
ich genannt habe.

Also

- geringere Abtastrate
- zusammenfassen von Werten (Bsp : Durchschnittbildung von 20 Werten, 
dann speichern)
- komprimieren, sehr sinnvoll wenn sich die Werte selten ändern
- ... gibt sicher noch mehr Methoden

Das wäre zumindest das worüber ich zuerst nachdenken würde um 30µs zu 
überbrücken anstatt über einen 1500 stufigen Puffer.

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.