Jein, ich glaube, du hast die Frage noch etwas anders interpretiert :-)
Das hat A.K. auch schon vermutet.
Kritisch sind in so einer digitalen Schaltung die Flipflops. Denn genau
dort trifft die Signallaufzeit auf den Takt. Das ist diese Geschichte
mit Setz- und Haltezeiten, die man nicht verletzen darf -- das ist dir
geläufig.
Wenn jetzt nach der maximalen Taktfrequenz gefragt ist, musst du genau
dahin dein Augenmerk legen: Es interessiert nämlich nicht, wie schnell
ein Signal am Eingang der Schaltung schließlich eine Änderung am Ausgang
der Schaltung bewirkt!
Das hat A.K. mit seiner Eimerkette gemeint: Gefragt ist nicht, wie
lange es dauert, bis Wasser am Ende der Kette ankommt. Sondern es ist
gefragt, wie schnell der verantwortliche Feuerwehr-Zugführer den Leuten
mit den Eimern 'hepp hepp hepp' zurufen darf...
Zu deiner Schaltung zurück: Wenn da jetzt eine Taktflanke kommt, wachen
die drei Flipflops auf. Die beiden T-FF links machen irgendetwas
(unerheblich) mit den Eingangssignalen und nach der Durchlaufzeit kommt
hinten (also hinten an den T-FF) ein stabiles Signal heraus. Das D-FF
tut es ihnen gleich. Bei den nächsten Taktflanken geschieht das wieder
und wieder, wobei das Signal zwischen den Taktflanken durch die
kombinatorische Logik (Gatter) läuft.
Jetzt kommt noch die Setup-Zeit dazu: Die besagt, dass ein
Eingangssignal eines FF eine Weile stabil anliegen muss, bevor die
Taktflanke kommt. Sonst ist die Setup-Zeit verletzt und gibt es
metastabiles Zeugs und so weiter.
Damit hast du dein Kriterium: Es ist doch nun offenbar nur von
Interesse, dass Signale von den Ausgängen irgendwelcher FF früh genug an
den Eingängen der folgenden FF ankommen. Damit rechnest du:
. eine Taktflanke kommt,
. die T-FF werden wach,
. nach der Durchlaufzeit kommen hinten stabile Signale heraus,
. die laufen durch ein kombinatorisches Netz und
. kommen an den Eingängen irgendwelcher FF an,
. deren Setup-Zeit nicht verletzt werden soll.
Stabile Signale kommen nach 11ns heraus. Die Signale wandern auf
mehreren Pfaden durch das Netz, wobei sich spätestens (längster Pfad)
5+2ns (AND+XNOR) alles beruhigt hat. Von da an kann die Setup-Zeit mit
7ns gezählt werden und erst danach darf dann wieder eine Taktflanke
kommen.
Anderes Beispiel: Du schaltest zwischen AND und XNOR ein D-FF und
zwischen
XOR und XNOR auch eines (also vor den beiden Eingängen des XNORs jeweils
ein FF). Gleiche Überlegung wie oben, von links nach rechts:
. die Taktflanke kommt und die T-FF werden wach,
. nach der Durchlaufzeit von 11ns kommen stabile Signale heraus.
. die wandern 5ns durch ein AND (oben) und landen vor einem FF,
. unten wandern sie insgesamt 4ns durch NOR und XOR und landen ebenfalls
vor einem FF.
. Diese beiden (mittleren) FF brauchen 7ns Setup (D-FF), also darf die
Taktflanke erst nach 11+5+7=23ns (oberer Pfad) bzw. 11+4+7=22ns (unterer
Pfad) kommen. Sinnigerweise also insgesamt erst nach 23ns, um keine
Setup-Zeit zu verletzen, der untere Pfad hat also noch etwas Luft.
Nun sind wir durch die halbe Schaltung. Von dort geht es weiter:
. Nächste Taktlflanke.
. Nach der Durchlaufzeit von 11ns liegen hinter den mittleren FF stabile
Signale an,
. die laufen 2ns durch ein XNOR und landen wiederum vor einem FF mit 7ns
Setup-Zeit.
. Die nächste Taktflanke darf also frühestens nach 11+2+7=20ns kommen.
Insgesamt dominiert also schon wieder der obere Pfad von vorhin mit
23ns, dessen Setup-Zeit ja nicht verletzt werden darf. Trotzdem ist die
Schaltung nun etwa 3MHz (von 25ns auf 23ns) schneller geworden.
ABER die gesamte Durchlaufzeit der Schaltung hat sich fast verdoppelt!
Denn nun braucht die Schaltung nämlich zwei Takte, bis die
Eingangssignale bis zum Ausgang durchgreifen.
Du hast also in diesem Beispiel etwas mehr Taktfrequenz mit etwas mehr
Latenz (=Durchlaufzeit der Schaltung) erkauft.
Das sieht nun erst einmal sinnlos aus, denn für dich von Belang ist ja
eigentlich nur diese Latenz. Du willst ja nicht wissen, wie und warum
die Schaltung intern arbeitet, sondern nach außen hin willst du wissen,
wie schnell die Eingangssignale verarbeitet werden und die Ergebnisse am
Ausgang erscheinen. Und in diesem Sinne hast du nun etwas Zeit verloren:
Vorher brauchte es zwei (langsame 40MHz-)Takte dafür (erster Takt
schiebt die Eingangssignale in die T-FF, dann arbeitet das
kombinatorische Netz und der zweite Takt schiebt die Ergebnisse vom Netz
an die Ausgänge der D-FF), also 50ns. Mit den beiden zusätzlichen FF
sind es nun drei (etwas schnellere 43MHz-)Takte, also 69ns.
Aber aufgemerkt: Die Zwischenergebnisse sind nicht verloren. Du hast
hier (vielleicht unbemerkt) eine Pipeline-Architektur entworfen: Wenn du
mit dem ersten Takt die Eingangssignale in die T-FF übernimmst, musst du
ja nicht zwingendermaßen auch noch den zweiten Takt abwarten, bevor du
neue Eigangssignale anlegst. Das ist nämlich der Unterschied zwischen
Taktrate und Latenz: Du darfst mit jedem Takt neue Eingaben anlegen. Und
du bekommst auch mit jedem Takt gültige Ergebnisse. Nur bekommst du mit
einem Takt eben nicht sofort die Ergebnisse, die zu den aktuellen
Eingabe gehören. Stattdessen tauchen die nach der Latenz auf.
Die zweite Schaltung (mit den zusätzlichen FF) ist damit tatsächlich
schneller: Bei der ersten Schaltung legst du jeden Takt Eingaben an und
bekommst Ergebnisse. Du legst also alle 25ns Eingaben an und bekommst
alle 25ns Ergebnisse, und zwar diejenigen Ergebnisse, die zu den
Eingaben gehören, die du vor 50ns angelegt hast -- das ist die Latenz
(Klar, beim Anlaufen der Schaltung kommt bei den ersten beiden Takten
einmal Unfug heraus, weil noch keine Eingaben in die T-FF geladen wurden
und die D-FF noch irgendwelche unbekannten Zustände haben).
Bei der zweiten Schaltung kannst du Eingaben mit 23ns laden und
Ergebnisse ebensoschnell abholen, allerdings kommen die Ergebnisse
jeweils du den Eingaben von vor 69ns. Aber trotzdem 2ns schneller.
Uff.