Forum: Mikrocontroller und Digitale Elektronik Setup Zeit eines FF am Ausgang


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter M. (remus)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Frage zur Berechnung der minimalen Taktzykluszeit eines 
Flipflops. Hier gibt es den besonderen Fall, dass es sich hier um eine 
Pipeline handelt.

Ich habe gelernt, dass die minimale Taktzykluszeit aus der Addition 
verschiedener "Timings" berechnet wird u.a. Dealy Zeit am Eingang des 
FF, Delay der Kombinatorischen Schaltung etc.

Bild siehe "FF_Pipeline.png"

Für die Berechnung würde ich mir jetzt den kritischen Pfad heraussuchen, 
dieser wäre meiner Meinung nach: z, a, b, d. Für die Berechnung bedeutet 
dies: Delay_FF_3 + Delay_OR + Delay_FF_a + Delay_XOR + 
Setup_Zeit_Ausgabe_Q, ich habe das mal im Bild entsprechend markiert :) 
Die Hold time kann hier vernachlässigt werden!

Bild siehe "FF_Pipeline_Timings.png"

Jetzt habe ich in meinen Aufzeichnungen nachgesehen und hier ist mir 
aufgefallen, dass der Teil "d" (Verbindung zwischen FF_a und dem letzten 
FF) nicht mit einbezogen worden ist. Warum ist das so? Ist meine 
Berechnung falsch?

Danke für kommende Hilfen :)

von Günni (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nach Delay_OR fehlt die Setupzeit für das mittlere FF.

von Peter M. (remus)


Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort!

Ich habe zwei Rückfragen. Erstens: warum wird bei dem ersten FF die Set 
Time nicht berücksichtigt, einfach weil es das erste FF ist? Zweitens: 
Wenn ich die Setup Zeit des zweiten FF noch mit in meine Gesamtrechnung 
aufnehme, in der Form von:

time_CLK,MIN = Delay_FF_3 + Delay_OR + Delay_FF_a_set + Delay_FF_a + 
Delay_XOR +
Setup_Zeit_Ausgabe_Q

Wäre dies jetzt die minimale Taktzykluszeit?

: Bearbeitet durch User
von Gerald K. (geku)


Bewertung
0 lesenswert
nicht lesenswert
Handelt es um "Einflankengesteuertes Flip-Flops" oder 
"Zweiflankengesteuertes Flip-Flops"?

https://www.elektronik-kompendium.de/sites/dig/0209301.htm

von Remus (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort @geku, es handelt sich nur um asynchrone 
flankengesteuerte (edge triggered) FF. Weitere Infos sind mir da leider 
nicht gegeben. Aber hilft die Information weiter?

von HildeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter M. schrieb:
> Jetzt habe ich in meinen Aufzeichnungen nachgesehen und hier ist mir
> aufgefallen, dass der Teil "d" (Verbindung zwischen FF_a und dem letzten
> FF) nicht mit einbezogen worden ist. Warum ist das so? Ist meine
> Berechnung falsch?

Meines Wissens beginnt die Berechnung nach jedem Q-Ausgang erneut.
Es muss nur delay_FF3 + Delay_OR zur Setupzeit des FF_a passen. Nach 
jedem FF beginnt eine neuer Pfad, denn FF_a ist ja wieder synchron nach 
dem Takt; sein Ausgangssignal b wechselt zeitgleich mit z - nur eben 
einen Takt später.

Also: a hat das Delay von den beiden FFs zu y und z plus das OR-Delay 
und dann noch die Setupzeit von FF_a. Das ist ein kritischer Pfad.
Der zweite ist c und b über XOR zu d und der Setupzeit des rechten FFs.
Um den schlimmsten Pfad zu erkennen, muss man wissen, ob OR oder XOR 
länger brauchen.

Aus dem Grund macht man ja Pipelining. Man könnte hier auch die beiden 
mittleren FFs weglassen, dann ist tatsächlich der Pfad FF3-OR-XOR 
vorhanden.

von Georg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter M. schrieb:
> Hier gibt es den besonderen Fall, dass es sich hier um eine
> Pipeline handelt.

Und deshalb funktioniert die Schaltung so überhaupt nicht: alle FFs 
haben einen gemeinsamen Takt und schalten daher gleichzeitig. Die 
Information vorheriger Stufen kann also die Setup-Zeiten der nächsten 
niemals einhalten, mit etwas Glück wird der Ausgang z.B. der ersten 
Stufe erst beim nächsten Takt in der zweiten Stufe verarbeitet, es 
könnte aber auch ziemlich undefiniert sein.

Georg

von Peter M. (remus)


Bewertung
0 lesenswert
nicht lesenswert
@HildeK, das ist sehr sehr hilfreich für mich! Danke! Um die Zeit also 
zu berechnen, reicht es wenn ich mir die Verbindungen zwischen zwei FFs 
ansehe, richtig? So bist du ja auch auf die zwei kritischen Pfade 1. 
y,z,a 2. b,c,d gekommen?

> Meines Wissens beginnt die Berechnung nach jedem Q-Ausgang erneut.
Woher genau weißt du das?

> Aus dem Grund macht man ja Pipelining. Man könnte hier auch die beiden
> mittleren FFs weglassen, dann ist tatsächlich der Pfad FF3-OR-XOR
> vorhanden.
Das ist gut beobachtet! Ich habe genau so eine Schaltung als (erstes) 
Beispiel gehabt um zu sehen, dass die Zeit (ohne Pipeline) deutlich 
höher ist. Mich hat gewundert (in diesem Beispiel), dass ich trotz 
Pipeline dennoch auf eine höhere Zeit komme, siehe meine Berechnung 
oben...

: Bearbeitet durch User
von Gerald K. (geku)


Bewertung
0 lesenswert
nicht lesenswert
Remus schrieb:
> Aber hilft die Information weiter?

Ja.

Zweiflankengesteuertes Flip-Flop :

Ein zweiflankengesteuertes Flip-Flop nimmt den Eingangszustand während 
einer Taktflanke (steigende Takflanke) auf und gibt diese erst bei der 
folgenden Flanke (fallende Taktflanke) aus.

Damit kann die zweite Flip-Flop Reihe die neuen Daten erst mit der 
nächsten Flanke übernehmen. Das bedeutet, dass Signallaufzeiten 
größer/gleich der halben Taktrate sein müssen, damit sie zu Fehlern 
führen. Achtung auch unterschiedliche Taktlaufzeiten können zu 
Probleme führen.

von HildeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter M. schrieb:
> So bist du ja auch auf die zwei kritischen Pfade 1.
> y,z,a 2. b,c,d gekommen?

Genau!

Georg schrieb:
> Die
> Information vorheriger Stufen kann also die Setup-Zeiten der nächsten
> niemals einhalten, mit etwas Glück wird der Ausgang z.B. der ersten
> Stufe erst beim nächsten Takt in der zweiten Stufe verarbeitet, es
> könnte aber auch ziemlich undefiniert sein.

Denke darüber nochmals nach.
Das FF hat ein Delay von Clk nach Q, die Zeit reicht, um den alten 
Zustand ins nächste FF zu übernehmen.
Als Setupzeit kann das nächste FF dann die restliche Periodendauer des 
Clks nutzen.
Die Holdzeit an einem D-Eingang ist meist nahe Null, e.g. beim HC74 
sogar typisch -2ns, also negativ.
Alles ist darauf ausgelegt, den alten Zustand des vorangegangenen FFs zu 
übernehmen, mit möglichst viel Luft dazwischen, so dass man logische 
Verknüpfungen machen kann, wie oben gezeichnet!

Ohne das würde kein Schieberegister funktionieren.

von Peter M. (remus)


Bewertung
0 lesenswert
nicht lesenswert
Peter M. schrieb:
> @HildeK, das ist sehr sehr hilfreich für mich! Danke! Um die Zeit also
> ...
> oben...

Wenn man aber nur diese einzel Pfade nimmt, wie du das vorschlägst, dann 
ist die Zeit genau wie in meiner Lösung. Das heißt dann, dass es reicht 
sich nur die "größte" bzw. "längste" Verbindung zwischen zwei FFs 
anzusehen?!

von Gerald K. (geku)


Bewertung
0 lesenswert
nicht lesenswert
Georg schrieb:
> ziemlich undefiniert sein

genaus so ist es!

Einflankengesteuertes Flip-Flops :

Daher kann man bei jeder FF-Reihe mit einem anderen Takt oder Flanke 
arbeiten.

Z.B. erste Reihe steigende Flanke, zweite FF-Reihe fallende Flanke

: Bearbeitet durch User
von HildeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter M. schrieb:
> Woher genau weißt du das?

Wer mir das beigebracht hat (vor zig Jahren) weiß ich nicht mehr 😀.
Naja, hab anfangs meiner Berufslaufbahn viel mit PLDs gemacht. Dort ist 
ein Gattergrab und ein FF eine Zelle und da ist man halt immer mal 
wieder auf den Geschwindigkeitsanschlag gekommen, wenn die Verknüpfung 
zu aufwändig war. Das ist genau so bei FPGAs oder CPLDs. Wobei bei FPGAs 
noch relevante Routing-Delays dazukommen (soweit ich weiß).

Aber eigentlich ist es doch logisch, sonst ist der ganze Aufwand mit x 
Pipelinestufen überflüssig.

von HildeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter M. schrieb:
> Das heißt dann, dass es reicht
> sich nur die "größte" bzw. "längste" Verbindung zwischen zwei FFs
> anzusehen?!

Ja.

von HildeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Gerald K. schrieb:
> Georg schrieb:
>> ziemlich undefiniert sein
>
> genaus so ist es!

Ihr seid beide auf dem Holzweg.
Das geht selbstverständlich mit ganz normalen D-FFs.
Das zitierte HC74 hat CP→Q typ. 17ns; heißt, 17ns nach der Taktflanke 
ist an Q die D-Information angekommen. Das nächste FF hat nun 1 
Taktperiode Zeit (Setupzeit), minus die 17ns und -2ns Holdtime, also 
t_per-15ns. Bei 10MHz Takt kannst du also mit Gatterverknüpfungen noch 
85ns verbraten.
Ich habe jetzt der Einfachheit halber die typischen Zahlen bei 4.5V 
hergenommen, weil die Holdzeit für 5V nicht genannt ist.

von Peter M. (remus)


Bewertung
0 lesenswert
nicht lesenswert
Wenn ich die Rückfrage nochmal stellen darf. Und nochmal vielen Dank für 
die super guten Antworten! Wie genau wird der Geschwindigkeitsvorteil 
bei der Piepline erreicht?

Wenn ich das richtig verstanden habe, dann habe ich pro Taktzyklus 
logische Verarbeitungen in den zwischengeschalteten Gattern. Diese Info 
wird ans nächste FF weitergegeben, die Ausgabe steht dann am Ende der 
Pipeline.

Wenn ich jetzt mal auf die Pipeline oben verzichte, dann habe ich ein OR 
und ein XOR als logische Verarbeitung (Zwischen FF De und dem letzten FF 
mit Ausgang Q). Ich brauche dann zwei Zyklen, bis das Ergebnis bei Q 
steht. Durch die Pipeline brauche ich aber drei Taktzyklen und habe eine 
kleinschrittige logische Verarbeitung (OR und XOR sind ja wie im Bild 
nun aufgeteilt). Warum ist das jetzt schneller?

: Bearbeitet durch User
von HildeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter M. schrieb:
> Warum ist das jetzt schneller?

Das Ergebnis steht insgesamt später zur Verfügung, das ist richtig. Aber 
der Takt kann schneller sein. Meist ist ja nicht nur so ein einzelner 
Pfad vorhanden, sondern noch viele andere, in denen auch vieles gemacht 
wird und die z.B. schnell zählen sollen oder was weiß ich ... 😀
Stell dir eine größere Zahl von Verknüpfungen vor, die einerseits 
parallel erstellt werden und andererseits aber unterschiedliches Delay 
haben und das auch u.U. deutlich temperaturabhängig. Deren Ergebnis soll 
aber gleichzeitig vorliegen. Dann bist du mit dem höchsten Takt auf 
diesen langsamsten Pfad gebunden.

Diese Pipelining wird häufigst in FPGAs angewendet. Dort sind eine 
Unmenge FFs mit unterschiedlichsten Aufgaben am werkeln und trotzdem 
wird eine hohe Taktgeschwindigkeit gefordert.

Mir fehlen ein wenig die anschaulichen Beispiele; hier im Forum gibt es 
aber einige FPGA-Spezialisten, die das hoffentlich sehen und hier 
bessere Beispiele liefern können.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.