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


von Nephilim (Gast)


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

von Jan M. (mueschel)


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.

von Thomas R. (Firma: abaxor engineering) (abaxor)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Martin K. (mkohler)


Lesenswert?

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

von Matthias F. (flint)


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.

von Der Besucher (Gast)


Lesenswert?

Ich habe auch noch einen Namen dafür: FIFO
:)

Der Besucher

von Nephilim (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.html#extended

von Nephilim (Gast)


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.

von Iulius (Gast)


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.

von Nephilim (Gast)


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.

von Iulius (Gast)


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.

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.