Forum: FPGA, VHDL & Co. Timing bei Flipflops


von daniel (Gast)


Lesenswert?

Hallo,

wenn Ausgang Q1 eines DFFs zu einem anderen DFF an den Eingang D2 geht,
dann muss doch immer gelten, dass t_dq > t_hold. Damit würde
Q1 hold_time nach der Taktflanke weiterhin anliegen und D1 erscheint am
Q1 erst nach t propagation delay von d nach q.
Richtig so?

Bevor nun 2-te Taktflanke kommen darf, muss einerseits der neue
Wert durch die kombinatorische Logik durch zum D2(oder wenn direkt
verbunden, einfach durch den Draht) und zum anderen ab diesem
Zeitpunkt muss noch setup_time vergehen.
Ist das korrekt?

Grüsse, daniel

von Morin (Gast)


Lesenswert?

> wenn Ausgang Q1 eines DFFs zu einem anderen DFF an den Eingang D2 geht,
> dann muss doch immer gelten, dass t_dq > t_hold.

Ich drück es etwas genauer aus, damit es korrekt wird. t_dq gibt es in 
DFFs nicht, dafür aber t_clk_q, also die Zeit zwischen einer 
Clock-Flanke und dem Ändern des Ausgangs (Änderungen in d bewirken von 
sich aus ja keine Änderung in q). Dann muss

t_clk_q_1 > t_hold_2

sein, wenn die Clock-Flanken gleichzeitig bei den DFFs ankommen 
(andernfalls muss ein entsprechender Versatz addiert werden).

> Damit würde Q1 hold_time nach der Taktflanke weiterhin anliegen

Die hold_time bezieht sich auf das was sein muss (was du sicherstellen 
musst), nicht auf das, was "automatisch so ist". Also eher

"Q1 muss hold_time nach der Taktflanke anliegen" (ohne Bachtung von 
Versatz, komb. Logik und Signallaufzeiten).

> und D1 erscheint am Q1 erst nach t propagation delay von d nach q.
> Richtig so?

Der Teil stimmt so.

> Bevor nun 2-te Taktflanke kommen darf, muss einerseits der neue
> Wert durch die kombinatorische Logik durch zum D2(oder wenn direkt
> verbunden, einfach durch den Draht) und zum anderen ab diesem
> Zeitpunkt muss noch setup_time vergehen.
> Ist das korrekt?

Ja. Im Wesentlichen hast du damit zwei Vorgaben, die du erfüllen musst:

t_clk_to_q_1 + Logik + Leitung + t_setup_2 < Taktperiode
t_clk_to_q_1 + Logik + Leitung > t_hold_2

von daniel (Gast)


Lesenswert?

Hi Morin,

>> t_clk_to_q_1 + Logik + Leitung + t_setup_2 < Taktperiode
>> t_clk_to_q_1 + Logik + Leitung > t_hold_2

sollte das 2-te nicht so sein?
t_clk_to_q_1 + Logik + Leitung > t_hold_1

immerhin muss ja FF1 Signal an alten Wert halten

Gerade habe ich noch gelesen, dass es für t_clk_to_q
2 Fälle unterschieden werden. Einmal für eine Transition von 0 auf 1
und umgekehrt.

Ich frage mich, ob XST das alles so schön berücksichtigt
oder dass es ab und zu sauberes VHDL so umsetzt, dass es aufgrund
unbeachteten Timings nicht funktioniert.

grüsse

von Jan M. (mueschel)


Lesenswert?

>> t_clk_to_q_1 + Logik + Leitung > t_hold_2
>sollte das 2-te nicht so sein?
>t_clk_to_q_1 + Logik + Leitung > t_hold_1
>immerhin muss ja FF1 Signal an alten Wert halten

Die Hold-Zeit ist die Zeit, die das Signal nach der Taktflanke noch 
unverändert anliegen muss, damit der Ausgang sicher schaltet. 
t_clk_to_q_1 + Logik + Leitung ist ja die Zeit, nach der das geänderte 
Signal nach der Taktflanke am 2. FF ankommt. Dessen Hold-Zeit muss 
vorher zuende sein, also > t_hold_2

von daniel (Gast)


Lesenswert?

ich bin fälschlicherweise davon ausgegangen, dass es
die Aufgabe von FF1 den alten Wert über hold_time zu halten.
hold_time ist eigentlich dann die Zeit, die FF2 nach der
Flanke braucht und während der Signal sich nicht ändern darf.

Dann verstehe ich wieso es so heisst
t_clk_to_q_1 + Logik + Leitung > t_hold_2

in Worten: der neue Wert darf noch nicht an D2
angekommen sein.

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
Noch kein Account? Hier anmelden.