Hallo, ich habe ein Eingangssignal von einigen Khz, dieses soll an mehreren Ausgängen mit jeweils verschiedenen Verzögerungen ausgegeben werden. Die Verzögerungen liegen in der Größenordnung von 50 ns bis einigen µS. Wie könnte ich das realisieren, bzw. welche Möglichkeiten gibt es dafür, wenn man nicht einfach nur D-Flipflops hintereinander hängen möchte. Ich habe in der Literatur wenig über Verzögerungsglieder gefunden, könnt ihr mir bitte helfen wo ich hier Theorie dazu finde bzw wie nennt man das relevante Teilgebiet aus der Digitaltechnik? Lg und Danke im Voraus
Da fehlen noch Angaben: Wie genau muss das sein, müssen das dann z. B. genau 50 ns sein, oder dürfen das dann auch 60 oder 40 ns sein? Wie sieht es bei einigen us aus, darf es dann ungenauer sein, oder muss es egal bei welcher Verzögerung immer gleich genau bleiben? Was ist das für ein "Signal", analog, digital, 1 Bit oder viele Bits parallel (z. B. digitalisiertes Analogsignal)?
Ein Ringbuffer ist hier das Mittel der Wahl: https://en.wikipedia.org/wiki/Circular_buffer Der Abstand zwischen Schreibe- und Lesezeiger entspricht dabei dem gewuenschten Delay.
Was ist hier passiert, dass es hier nur noch dämliche Anworten und Beiträge gibt? Geht Corona jetzt doch aufs Hirn?
Was ist denn daran dämlich? Es wurden schon oft Kabel genau dazu verwendet um Signale zu verzögern. Gustl B. schrieb: > Ja. Damit wollte ich deine Aussage bestätigen, dass es das in der Tat gab ind gibt. Auch komplizierter als nur ein Kabel. Siehe dazu https://en.wikipedia.org/wiki/Delay_line_memory . Genso ist der Hinweis auf den Ringspeicher hier sinnvoll und ich verstehe die negative Bewertung nicht. Hier der Thread ist im FPGA Unterforum, also geht es vermutlich um ein digitales Signal in einem FPGA. Das kann man abtasten, in einen Ringspeicher füttern und abhängig von der gewünschten Verzögerung einen alten Wert aus dem Speicher ausgeben. Hier ist aber das Problem mit der Genauigkeit. Eine Signalflanke wird dann nicht genau um den gewünschten Wert verzögert, sondern nur der Signalzustand zum Abtastzeitpunkt. Ist eben die Frage was hier gewünscht ist und, das hatte ich oben gefragt und ebenfalls -1 erhalten. Jens U. schrieb: > Geht Corona jetzt doch aufs Hirn? Es führt nachweisbar zu mehr sinnfreien -1 Bewertungen - nicht nur in den Corona Threads.
Danke erstmal für die Antworten. Es handelt sich freilich um ein digitales signal, konkret ein pwm Signal. Problem dabei ist dass die Verzögerungszeiten variabel sind und auch mal z.b. 50.1 ns gewünscht sind. Ps - Verzögerung ist zwar nicht so leicht zu schaffen, mit dem verwendeten lattice ice40hx8k werde ich auch kaum über 150 Mhz Takt gehen können. Suche halt irgendwie nach dem besten Weg...
OK, aber was ist denn jetzt die gewünschte Genauigkeit? Und was ist die maximale Frequenz deiner PWM? Prinzipiell könnte man natürlich einen Ringspeicher geben, aber bei PWM könnte man auch bei jeder Flanke einen Zähler neu starten. Bei 50 ns Verzögerung und 100 MHz Abtasttakt würde ich bei der steigenden Flanke am Eingang den Zähler starten und dann beim Zählerwert 4 den neuen Pegel ausgeben. Das Einsynchronisieren kostet natürlich auch ein paar Takte, das sollte man noch beachten. Für höhere Auflösung könntest du dir vielleicht Registerketten zur Verzögerung bauen. Eine Kette für 1 ns Verzögerung, eine Kette für 2 ns, ... und eine Kette für 9 ns. Dann gibst du das Signal nach dem Zähler auf jeweils die gewünschte Verzögerungskette und von dort geht es auf den Ausgang. Quasi den Zähler als grobe Verzögerung mit 10 ns Auflösung und dann noch feinere zuschaltbare Verzögerungen durch Registerkette dahinter. Gibt aber vermutlich elegantere Lösungen. (Statt Registerkette könntest du auch ein paar cm Draht zwischen zwei IOs setzen^^, ja, das meine ich nicht ernst.)
Das Eingangssignal hat einige kHz, im schlimmsten Fall max 100 (noch nicht sicher). Bei der Genauigkeit soll so viel wie möglich rausgeholt werden, ist also auch nicht fix. Ich bin eben nach der Suche nach diesen "eleganten Möglichkeiten", die Gustl B. andeutet.
Interessant wäre noch ob die minimale Pulsdauer immer kleiner als die maximale Verzögerung ist. Papel schrieb: > Das Eingangssignal hat einige kHz, im schlimmsten Fall max 100 (noch > nicht sicher). Ist das die PWM Frequenz? Dann wäre die minimale Pulsbreite wohl deutlich kleiner als 10 us.
Gustl B. schrieb: > (Statt Registerkette könntest du auch ein paar cm Draht zwischen zwei > IOs setzen^^, ja, das meine ich nicht ernst.) Auch wenn du es als Scherz gemeint hast: manuell platzierte Inverterketten mit variablem Abgriff können tatsächlich für sowas genutzt werden. Und dann gehen die Laufzeiten auf den Verdrahtungen im FPGA recht signifikant ins Ergebnis ein. Papel schrieb: > mit dem > verwendeten lattice ice40hx8k Hat das Teil sowas wie High-Speed SerDes und einen Clock-Manager, der phasenverschobene Taktflanken erzeugen kann? Dann könnte folgendes Konzept für dich interessant sein: - du betreibst den schon vorgeschlagenen Ringbuffer mit den 100MHz, die dein FPGA halt so kann. - Am Eingang betreibst du einen High-Speed Deserializer, um das Eingangssingal mit einer vielfachen Frequenz abzutasten. (der Ringbuffer hat dann entsprechend eine höhere Bitbreite, je nachdem, welches Verhältnis dein Deserializer zulässt). Alle möglichen "Zusatzoptionen" (wie z.B. 8b/10b Umcodierung) deaktivierst du. - Am Ausgang betreibst du einen High-Speed Serializer, um das Ausgangssignal wieder mit einem Vielfachen der der 100MHz ausgeben zu können. - Du betreibst Eingangs- und Ausgangsseite mit zwei synchronen, aber phasenverschobenen Taktsignalen aus einem Clock-Manager. Den "Grob-Delay" stellst du mit der Größe des Ringbuffers ein, den Fein-Delay mit der Phasenverschiebung der beiden Takte. Aber bereite dich schon mal darauf vor, dass du bei deinen augenblicklichen Anforderungen viel Arbeit vor dir hast und die Ergebnisse im Verhältnis zum Aufwand relativ ernüchternd sein werden.
Achim S. schrieb: > Auch wenn du es als Scherz gemeint hast: manuell platzierte > Inverterketten mit variablem Abgriff können tatsächlich für sowas > genutzt werden. Und dann gehen die Laufzeiten auf den Verdrahtungen im > FPGA recht signifikant ins Ergebnis ein. Eigentlich müsste man so ein Drahtstück auch im FPGA mit Constraints hinbekommen. Also berhere verschieden lange Verzögerungen die man dann hinter den Ringspeicher in Serie schalten kann je nach gewünschter Verzögerung. Papel schrieb: > ice40hx8k Der hat wenn ich das richtig sehe keinen SerDes, wäre aber eine hybsche Idee.
Gustl B. schrieb: > Eigentlich müsste man so ein Drahtstück auch im FPGA mit Constraints > hinbekommen. Im Prinzip schon. In der Praxis wird es dann aber wahrscheinlich doch eher wieder auf handplatzierte Zellen/Routingwege hinauslaufen. Gustl B. schrieb: > Der hat wenn ich das richtig sehe keinen SerDes, Schade. @TO: es gibt in vielen FPGAs "Spezialhardware", die dir bei deinem Projekt helfen könnte. Ein solcher SerDes wäre eine Möglichkeit. Andere FPGAs bieten IODelays, mit mehr oder minder genau definierten, fein einstellbaren Verzögerungsstufen. Wenn dein FPGA das alles nicht bieten sollte (ich habe es jetzt nicht nachgeschaut), dann ist dieses FPGA eine eher ungünstige Wahl für das, was du vorhast.
Papel schrieb: > Suche halt irgendwie nach dem besten Weg... Für welches Problem? Warum willst du da irgendwas um ein paar ps oder auch viel länger verzögern? Papel schrieb: > Bei der Genauigkeit soll so viel wie möglich rausgeholt werden Wie definierst du "Genauigkeit" ? Über die Auflösung oder den Jitter oder die Stetigkeit oder alles zusammen oder was sonst?
Vielen vielen Dank, besonders an Gustl und Achim, für die konstruktiven Beiträge, ja ich habe mir sowas in der Art auch gedacht, ich werde mir mal im Datenblatt die Zeiten der Logikelemente anschauen und dann sehen was ich machen kann. Es ist ein low-cost FPGA von Lattice, der hat diese Spezialfunktionen leider nicht hat, ein anderer steht mir nicht zur Verfügung. Danke auch Lothar für dein Interesse. Ich will hier gar nicht darauf eingehen, wozu das ganze etc. Die Genauigkeit ist hier nur als Länge der Verzögerung von Bedeutung. Wenn man 50 ns Verzögerung haben will aber das System nur 48 oder 52 ns schafft z.B... Jitter etc spielen hier natürlich mit, besondere Anforderungen bestehen nicht. Wenn euch Literatur zum Thema einfällt, die relevant sein könnte, wäre ich für einen Tipp dankbar, lg
Als ich mal um 1 us verzoegern musste, taten es 3 8 bit-Schieberegister. Bei 24 Mhz Takt ergibt sich eine Durchlaufzeit von 1 us. Da der Takt asynchron zu den Signalen war, gab es natuerlich auch einen Jitter von 42 ns. Der stoerte aber nicht.
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.