Mit beiden Kanten einer Uhr

10

Ich programmiere einen Altera Cyclone IV mit Verilog und Quartus II. In meinem Design möchte ich beide Flanken einer Uhr verwenden, damit ich die Taktteilung durch einen ungeraden Faktor mit einem Tastverhältnis von 50% durchführen kann. Hier ist ein Ausschnitt aus meinem Code:

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

Wenn ich dies kompiliere, gibt Quartus II den folgenden Fehler aus:

Verilog HDL Always Construct error bei adc_clocking.v (83): Die Ereignissteuerung kann nicht sowohl auf positive als auch auf negative Flanken der Variablen "low_jitter_clock_i" testen.

Wie kann ich sowohl die positive als auch die negative Flanke einer bestimmten Uhr in meinem Design verwenden?

Zufälliges Blau
quelle

Antworten:

7

Wenn Sie einem Register in einem kantensensitiven Always-Block zuweisen, definieren Sie ein Flip-Flop. FPGAs haben keine Flip-Flops, die an beiden Flanken einer Uhr ausgelöst werden können.

Um das zu tun, was Sie wollen, müssen Sie zwei separate Always-Blöcke haben, einen für jede Flanke der Uhr, und dann einen Weg finden, die Ausgänge der beiden Blöcke zu kombinieren, ohne Störungen zu verursachen.

Zum Beispiel könnte ein Always-Block Ihren programmierbaren Teiler enthalten. Entwerfen Sie es so, dass das Ausgangs-Tastverhältnis bei einer ungeraden Zahl weniger als 50% beträgt. Verwenden Sie den zweiten Always-Block (an der anderen Taktflanke), um den Ausgang des ersten Blocks um 1/2 Takt zu verzögern, und dann ODER die beiden Ausgänge zusammen. Deaktivieren Sie die Ausgabe des zweiten Blocks für gerade Teilerwerte.

Dave Tweed
quelle
Der Grund, warum ich sowohl positive als auch negative Flanken des Takts verwenden möchte, ist ein Tastverhältnis von 50%.
Randomblue
Ja, das habe ich verstanden. Meine Antwort spricht das direkt an. Ich ging davon aus, dass Sie bereits wissen, wie Sie einen Arbeitszyklus von 50% erhalten, wenn der Teilerwert gerade ist. Was ist nicht klar?
Dave Tweed
Keine Dual-Edge-Flip-Flops? Dafür gibt es keinen inhärenten Grund. Es stellt sich nur heraus, dass niemand sie herstellt (oder zumindest niemand, den wir kennen). Wie Martin betont
Philippe
3

Wenn dies für die interne Logik ist, müssen Sie wahrscheinlich viel näher an die verfügbaren Flipflops schreiben. Mit Ausnahme von Coolrunner-II ist mir keine programmierbare Logik mit inhärent zweischneidigen Registern bekannt.

Daher müssen Sie zwei alwaysBlöcke erstellen , einen für das Negedge und einen für das Posedge, und deren Ausgaben mit einer kombinatorischen Logik kombinieren.

Oder verwenden Sie eine PLL, um den Takt zu verdoppeln, und verwenden Sie dann die herkömmliche einschneidige Logik.

Martin Thompson
quelle
2

Am Ende habe ich mit der hier beschriebenen Methode ein Tastverhältnis von 50% für ungerade Teilungsfaktoren implementiert .

Zufälliges Blau
quelle
1

Wie Dave Tweed bemerkt, muss, sofern ein FPGA keine Flip-Flop-Hardware enthält, die an beiden Flanken eines Takts arbeiten kann, eine eigene Logik geschrieben werden, um das gewünschte Verhalten unter Verwendung herkömmlicher Single-Edge-Flip-Flops zu implementieren. Während es eine Reihe verschiedener Möglichkeiten gibt, eine Schaltung zu implementieren, die sich ähnlich wie ein Doppelflanken-Flipflop verhält, fügen solche Schaltungen im Allgemeinen einige zeitliche Einschränkungen hinzu, die sich von denen unterscheiden, die mit Flipflops verbunden sind.

Ein einfacher Ansatz besteht beispielsweise darin, ein Modul zu haben, das zwei Xors mit zwei Eingängen und ein Paar von "T" -Flipflops kombiniert (wobei der Zustand des Eingangs, wenn ein Taktimpuls eintrifft, angibt, ob diese Taktflanke den Ausgang umschalten soll), eins ausgelöst durch eine steigende Flanke und eine ausgelöst durch eine fallende Flanke. Der Ausgang des Moduls ist das xor der Ausgänge der Flip-Flops, und der Eingang zu beiden Flip-Flops ist das xor des Ausgangs des Moduls und seines Eingangs.

Eine auf diese Weise entworfene Schaltung funktioniert im Wesentlichen wie ein Doppelflanken-Flipflop, allerdings mit längeren Einrichtungs- und Ausbreitungszeiten, jedoch mit einer zusätzlichen zeitlichen Einschränkung. Ein normales Flip-Flop, das sich nicht auf einem Rückkopplungspfad befindet, hat nichts dagegen, wenn der Beginn einer Taktflanke eine Reihe von Runt-Impulsen aufweist, vorausgesetzt, der Takt stabilisiert sich auf einem gültigen Niveau und vorausgesetzt, die Einstellzeitbeschränkung, gemessen vor dem Der erste Runt-Impuls und die Haltezeit- und Taktaktivitätszeitbeschränkungen, gemessen ab dem Zeitpunkt, an dem der Taktimpuls stabil aktiv ist, werden erfüllt. Das Verhalten des Flip-Flop-Ausgangs ist während der Zeit, in der der Takt instabil ist, undefiniert, wird jedoch definiert, nachdem sich der Takt stabilisiert hat. Das Double-Xor-Double-Flop-Modul würde die zusätzliche zeitliche Einschränkung hinzufügen, dass jede Taktflanke, die den Ausgang verändern würde, einen sicheren Abstand zu jeder anderen Taktflanke haben muss, die dies tun könnte. Wenn diese Einschränkung nicht erfüllt wird, z. B. indem drei Taktflanken sehr nahe beieinander liegen, während der Eingang nicht mit dem Ausgang übereinstimmt, kann der Ausgang in einem unbestimmten oder metastabilen Zustand belassen werden (beachten Sie, dass Szenarien mit einer geraden Anzahl von Flanken kein Problem darstellen Da solche Szenarien nur Runt-Impulse beinhalten würden, sind der Drei-Kanten-Fall (oder andere ungerade Fälle größer als eins) ein Problem, da nach den Runt-Impulsen ein gültiger Impuls liegen würde.

Ein alternatives Schaltungsdesign wäre, die beiden Flip-Flops wie oben zu haben, aber ihre Ausgänge einem Multiplexer zuzuführen. Diese Schaltung würde nicht durch Runt-Impulse in einen schlechten Zustand versetzt, und ihre Taktungsbeschränkungen wären die gleichen wie die zugrunde liegenden Latches, aber sie hätte den Nachteil, dass ein Ausgang, der hoch war und bleiben sollte (oder niedrig war und niedrig bleiben sollte) ) könnte also kurz auf einer Uhrenkante stören. In einigen Schaltkreisen wäre das nicht wichtig, in anderen jedoch.

Es wäre wahrscheinlich für Logiksynthesewerkzeuge möglich, Doppelflanken-Flipflops automatisch zu implementieren, indem analysiert wird, welche Zeiteinschränkungen als wichtig spezifiziert wurden, aber dies wäre etwas schwierig. Dies würde auch das Risiko erhöhen, dass eine kleine Änderung an einem Design zu einer wesentlichen Änderung der Implementierung und damit zu einer signifikanten und unerwarteten Änderung des Verhaltens führen könnte.

Superkatze
quelle