Forum: FPGA, VHDL & Co. Fallende Flanke schreiben, steigende Flanke lesen


von Björn V. (Gast)


Lesenswert?

Moin zusammen,

ich hatte eine Diskussion mit einem Kollegen zum Thema VHDL Design. Wir 
haben eine Reihe von Komponenten, die Daten miteinander austauschen und 
synchron aus der gleichen Taktquelle versorgt werden.
Er vertritt die Meinung, dass eine Komponente die Daten auf der 
fallenden Flanke auf z.B. ein Signal oder einen Bus geben sollte, 
während die andere Komponente diese auf der steigenden Flanke abrufen 
soll, damit die Daten sicher anstehen, wenn der Zugriff erfolgt.
Ich bin der Meinung, dass es ausreicht beide Komponenten ihre Daten auf 
der steigenden Flanke abgeben und lesen zu lassen, da das Synthesetool 
(in dem Fall die Xilinx ISE 14.7 für einen Spartan6) die Laufzeiten 
bereits mit einbezieht und darauf auslegt. Eine solche 
fallend-schreiben-steigend-lesen Methode würde ja quasi zu einem Dual 
Data Rate auf dem Bus führen und damit es nur schwerer machen ein 
ordentliches Timing ohne Verletzung von Setupzeiten zu erzeugen.
Wer hat recht? Wie ist eure Meinung dazu? Habt ihr Quellen, aus denen 
hervor geht, dass die eine oder andere Lösung sinnvoll/sinnfrei ist?

Gruß,
Björn

von Duke Scarring (Gast)


Lesenswert?

Alles im selben Chip?
Dann (wenn es geht) alles mit dem gleichen Takt und der selben Flanke 
versorgen.

Duke

von Felix U. (ubfx)


Lesenswert?

Innerhalb des selben Chips ist das der Sinn und Zweck von Timing 
Constraints. Solange die eingehalten werden, kann man die Flip Flops 
gefahrlos mit der selben Flanke betreiben.

Hier mal eine Quelle:


>The PERIOD constraint on a clock net analyzes all delays on all paths that 
>terminate at a
>pin with a setup and hold analysis relative to the clock net. A typical
>analysis includes the
>data paths of:
>• Intrinsic Clock-to-Out delay of the synchronous elements
>• Routing and Logic delay
>• Intrinsic Setup/hold delay of the synchronous elements

https://www.xilinx.com/support/documentation/sw_manuals/xilinx11/ug612.pdf

Wenn man unterschiedliche Flanken verwendet, halbiert man sogar die 
verfügbare Zeit für die Übertragung zwischen den Flip-Flops.

: Bearbeitet durch User
von Clemens N. (cleemens)


Lesenswert?

Björn V. schrieb:
> Ich bin der Meinung, dass es ausreicht beide Komponenten ihre Daten auf
> der steigenden Flanke abgeben und lesen zu lassen

Also deine Frage ließt sich etwas missverständlich daher will ich das 
nur etwas klarstellen.
Wir betrachten also immer die Strecke zwischen zwei Registern 
(Flipflops). Bei einer Taktflanke übernimmt das FF die am Eingang 
anliegenden Daten auf den Ausgang. Das FlopFlop dannach hat aber gerader 
ersten die "alten" Daten des ersten Flipflops übernommen. Deine 
Beschreibung ließt sich so als würdest du denken bei einer Taktflanke 
"gibt" man ein Signal auf den Bus und "ließt" es exakt gleichzeitig. Das 
ist NICHT so, im Prinzip ließt das nächste FF die Daten genau einen 
Takt "später". Das mit dem Steigende/Fallende ist in den meisten 
praktischen Anwendungen eher unüblich. DualDataRate sorgt ja eher dafür 
das eine Taktperiode nur die Hälfte eines 1-0 Taktzykluses dauert, aber 
das Prinzip ist wieder das selbe.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Oder um es kurz zu sagen: mit steigender und fallender Flanke im 
selben Design arbeiten nur die, die das Prinzip "Synchrones Design" noch 
nicht ganz verstanden haben.

Ich bezahle den FPGA Hersteller dafür, dass er eine sauber balancierte 
Taktverteilung implementiert. So gut, dass der Takt überall gleichzeitig 
anliegt und ich keine Race-Condition bekomme.

: Bearbeitet durch Moderator
von Christoph Z. (christophz)


Lesenswert?

Björn V. schrieb:
> Er vertritt die Meinung, dass eine Komponente die Daten auf der
> fallenden Flanke auf z.B. ein Signal oder einen Bus geben sollte,
> während die andere Komponente diese auf der steigenden Flanke abrufen
> soll, damit die Daten sicher anstehen, wenn der Zugriff erfolgt.

Falls dein Kollege einen Hintergrund im ASIC Design hat, dann könnte es 
sein, dass er Konzepte wie dual-phase Clocks in den FPGA übersetzten 
möchte.

Dual-Phase Clocking ist eine Technik wo es anstatt einem Clocktree zwei 
davon gibt. Beide Clocks sind synchron zu einander und 180° 
Phasenverschoben. Im RTL Design wird eine Stufe mit der ersten Clock und 
die nachfolgende Stufe mit dem Phasenverschobenen Takt versorgt.

Die dazu nötigen sehr genauen Timings dieser zwei Clocktrees sind 
eigentlich nur im Full-custom Design erreichbar und es wird daher immer 
seltener verwendet. Intel war lange Zeit ein Verfechter dieser Methode, 
scheint aber auch umgeschwenkt zu haben (Hat jemand vielleicht sogar 
eine Quelle dafür für mich?)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Denn letztlich läuft das lediglich darauf hinaus, dass quasi die 
Taktfrequenz des Designs verdoppelt wird. Und dann mit 
Multi-Cycle-Pfaden gearbeitet wird. Das über das gesamte FPGA 
durchzuziehen, ist enorm fehlerträchtig und handarbeitsaufwändig.

von Martin O. (ossi-2)


Lesenswert?

Meiner Meinung nach ist hier wichtig, dass SETUP und HOLD Zeiten der 
Signale es erlauben, alle Flip-Flops mit gleichem Takt zu versorgen.

von Björn V. (Gast)


Lesenswert?

Vielen Dank an alle!
Die meisten Meinungen decken sich also mit meiner Vermutung. Es handelt 
sich in der Tat um eine FPGA-interne Logik in verschiedenen Komponenten. 
Dass z.B. Interfaces wie SPI mit unterschiedlichen Flanken Daten auf die 
MISO und MOSI, ist ja verständlich, aber wir haben wirklich nur VHDL 
Blöcke.
Die Anmerkung mit dem Dual-Phase Clock ist interessant zu wissen, aber 
leider liegt der Fall hier in der Tat nicht vor.
Besten Dank an Felix für die Nennung einer belastbaren Quelle! Ich werde 
das Thema damit bewaffnet noch einmal aufwärmen.

von stiller Mitleser (Gast)


Lesenswert?

Christoph Z. schrieb:
> Intel war lange Zeit ein Verfechter dieser Methode,
> scheint aber auch umgeschwenkt zu haben (Hat jemand vielleicht sogar
> eine Quelle dafür für mich?)

ich vermute, du meinst damit LSSD (level sensitive scan design). 
Gabs/gibts auch bei IBM, da waren am Master-Latch 2 Takte: Master-Takt 
und Scan-Takt. Am 2. Latch dann Slave-Takt.

Wurde auch im Standart-Zell Design verwendet, Clock-Tree war da aber 
echt happig...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Björn V. schrieb:
> Dass z.B. Interfaces wie SPI mit unterschiedlichen Flanken Daten auf die
> MISO und MOSI, ist ja verständlich
Und der Takt dort ist nicht mal ein richtiger Takt, sondern lediglich 
ein Signal, das einsynchronisiert gehört wie jedes andere Signal.

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.