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
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.
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
> du brauchst kein Schieberegister, sondern einen Ringpuffer.
Gleiches Kind mit anderem Namen... :-/
Lothar Miller schrieb:
> Gleiches Kind mit anderem Namen... :-/
Nicht ganz.
Beim Schieberegister bewegt sich der Inhalt, beim Ringbuffer der
Zugriffspunkt.
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.
Ich habe auch noch einen Namen dafür: FIFO :) Der Besucher
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.
> 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
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.