Clock-Überwachung im CPLD

Sep 30, 2009 22 Replies

Hallo zusammen, ich benutze in einer Anwendung einen MAX II-CPLD. Der CPLD wird mittels 13MHz-Quarz getaktet. Dieser Takt wird dann weiterhin über eine externe Schaltung übertragen und zum CPLD zurückgeführt, mit unbekanntem Phasenversatz zum Originaltakt. Das Tastverhältnis von Originaltakt und übertragenem Takt kann 20..80% sein.



Wie kann ich nun voll digital (also im CPLD) prüfen, ob der Takt, der extern im Kreis geführt wurde, noch vorhanden ist und dies innerhalb von



2-3 Taktzyklen entscheiden? Ich habe diverse Ansätze durchprobiert, jedoch gibt es immer "theoretische" Konstellationen, bei denen die Takterkennung nicht zuverlässig funktioniert, insbesondere bei genau 180° bzw. 360° Phasenverschiebung.

Hat jemand eine Idee?



Michael


Hi,

RS Flipflop verwenden. Der externe Takt geht auf den S Eingang. CPLD gibt einen Impuls auf den R Eingang, dann 2 Zyklen warten, dann Ausgang des Flipflops prüfen.

Gruss Michael

Hallo Michael,

So weit war ich schon.

  1. Problem: Da das nur asynchron geht, muss ich dafür sehr kurze Pulse erzeugen, sonst liegt SET bzw. RESET ca. 50% der Zeit an und überlappen garantiert. Wie erzeuge ich die kurzen Pulse? Gatterlaufzeiten im CPLD nutzen? Habe noch nicht herausgefunden, wie man das mit der Quartus-Software macht, ohne dass es rausoptimiert wird.

  1. Problem: Bei genau 360° Phasenversatz können die Pulse gleichzeitig kommen. Ob dann ein gültiges Ergebnis rauskommt, ist ungewiss.

Michael

Schieberegister wird mit den 13MHz getaktet und schiebt den Zustand des zu überwachenden Taktsignals jeweils weiter. Wenn alle Bits des SR high oder low --> Takt fehlt. Kann aber Probleme machen, wenn die Flanken gleichzeitig kommen.

Mathias.

Dann nimm ein D-FF. Externer Takt als Clock, D fest auf H, PLD an R. Du setzt das FF zurück mit einem möglichst kurzen Impuls. Wenn 2 Taktzyklen nach dem Abschalten des Reset-Signals das FF nicht gesetzt ist, dann fehlt der externe Takt. Im worst case kommt die externe Taktflanke ganz knapp, bevor du Reset abschaltest. Dann wird das FF nach 1 Taktperiode + epsilon gesetzt.

XL

Was meinst Du mit "PLD"?

Woher nehme ich den kurzen Puls? Takt durch Buffer jagen und Ein- und Ausgang mit einem AND verknüpfen? Da ist mir unwohl.

So ähnlich probiere ich das jetzt mal aus. Nur das mit dem kurzen Puls ist halt schwierig.

Michael

Genau das ist das Problem.

Michael

Hallo!

"Michael Rübig" wrote

Um einen kurzen Puls für das FF zu erzeugen musst du den Takt auf ein Differenzierglied mit nachgeschalteten Komparator geben. So sollten sich kurze Pulse erzeugen lassen.

Bei 77ns Taktlänge wie genau willst du denn die Phasenlage bestimmen? Ich denke mit einem schnellen Komparator sollten

2 bis 3 ns kein Problem darstellen.

alsdenn, Jens

Hallo Jens,

Ich möchte auf externe Schaltung verzichten. Das soll möglichst alles im CPLD laufen. Sonst könnte ich auch ein RC zwischen zwei Pins hängen und mir damit die Pulse erzeugen.

Michael

Hallo!

"Michael Rübig" wrote

Achso, mhh na dann hab ich noch eine Idee. Kannst du die Schaltung mit 52 MHz betreiben? Den normalen Block mit einem Viertel weiterlaufen lassen und nur die Messschaltung mit 52 MHz. Dann kannst du 4 mal nacheinander messen je um ein Bit versetzt. Sollte dann auf rund 45° genau sein.

alsdenn, Jens

Hallo Jens,

Das wäre wieder eine Hardwareänderung. Wo soll ich die 52MHz denn hernehmen? Ich könnte den zu überwachenden Clock mit Faktor 4 teilen und da dann reinschauen. Das wir halt nur langsam und man braucht viele Takte, um den Clockausfall sicher zu erkennen. Ich hoffe immernoch, dass ich eine Lösung finde, die nur einen fehlenden Taktzyklus erkennen kann.

Michael

Michael Rübig schrieb:

Ich habe das gerade mal näher betrachtet. Hier das Datenblatt:

formatting link

Leider geht daraus nicht hervor, wie lange ein Puls mindestens sein muss, um ein Register asynchron sicher resetten zu können. Das simulierte Delay einer LE ist ca. 1ns. Um einen Puls von 10ns zu erzeugen, müsste ich also 10LEs opfern. Und spezifiziert ist das alles gar nicht. Mir ist da sehr unwohl.

Michael

Hallo!

"Michael Rübig" wrote

Anderen Quarz einlöten? :-)

alsdenn, Jens

Mein Weg bei der Xilinx ISE ist der, dass ich das Signal auf einen Ausgangspin lege und wieder einlese. Das scheint aber nur zu gehen, wenn der Pin sich als Tristate schalten lässt. Ansonsten wird das auch rausoptimiert.

Beispiel, um aus Signal c einen kurzen Puls zu zaubern:

delayed_c

Na *dein* PLD. Oder hast du da *drin* asynchron taktbare D-FF?

Der Puls muß nicht extrem kurz sein. Kann durchaus eine Taktperiode lang sein. Je kürzer er ist, desto schneller detektierst du den Verlust des externen Clocksignals.

XL

Ich würd es mal ausprobieren. Bei 13MHz sollte die Zeit der Metastabilität doch eigentlich kürzer als ein Taktzyklus sein. Wenn er den Pegelwechsel des zu prüfenden Clocks nicht in diesem Zyklus sieht, dann im nächsten. Ist halt immer blöd, wenn man quasi asynchrone Signale abtasten will. Mach dein Schieberegister 6 Bit lang. Wenn in den betrachteten 462ns kein Flankenwechsel vorkam, dann ist was faul:

if (rising_edge(clk) then sr(0)

Bahnhof. PLD = Programmable Logic Device? Das soll ich an den asynchronen Reset (=R) des FF anschließen? Häh?

Ja genau, kürzer geht es nicht sinnvoll. Ich muss mich wohl damit abfinden, dass es einige Takte dauert, bis der Ausfall detektiert wird.

Michael

Baue einen Ringoszillator da drin auf, der nach je einem Mal anhaelt. Wenn das CPLD flott genug ist und der z.B. aus fuenf Invertern besteht, dann ist der Puls lang genug fuer die Logik. Denn sie sitzt ja auf demselben Die.

Gruesse, Joerg http://www.analogconsultants.com/ "gmail" domain blocked because of excessive spam. Use another domain or send PM.

Hallo Jörg,

Das ist auch eine Idee. Ich muss nur noch rausbekommen, wie ich verhindere, dass das dann rausoptimiert wird, sonst werden aus 5 Invertern ganz schnell nur noch 1 Inverter.

Michael

Ich kenne Dein CPLD nicht, aber kann man nicht auch von Hand routen? Oder zumindest einen Bereich "off limits" schalten?

Falls Dir das mit den Gatterlaufzeiten in einem so kurzen Ringoszillator zu heikel ist, kannst Du auch einen Zaehler dranhaengen, der den ein paar Mal durchlaufen laesst eh das Signal gesetzt wird und sich danach selbst ruecksetzt.

Gruesse, Joerg http://www.analogconsultants.com/ "gmail" domain blocked because of excessive spam. Use another domain or send PM.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required