Forum: FPGA, VHDL & Co. Verständnisfrage zu Clk Buffern & Clk Netzen im FPGA


von Hans (Gast)


Lesenswert?

Hallo zusammen,

Ich habe einige Fragen zum grundlegenden Verständnis von Clk-Buffern.

folgende Ausgangslage:

FPGA: Virtex5
Umgebung: ISE

Frage:
------
Ich schließe einen Clock an einen Input Pin am FPGA an. Anschließend 
instanziiere ich einen BUFG:

Clk --> pin_vom_FPGA --> BUFG --> clk_signal

Soweit ist alles klar (Standardprozedur). Nun mache ich jedoch 
folgendes:

Clk --> pin_vom_FPGA --> BUFG --> clk_signal --> BUFG --> clk_signal2

Meine Fragen:

a.) Muss ich im Design clk_signal & clk_signal2 als unterschiedliche 
Clks behandeln, oder sind die zueinander synchron?

b.) Welche Gründe könnte es geben, einen zusätzlichen Clk-Buffer im 
Design zu instanziieren? Kann ich der Implementierung da was 
vereinfachen, wenn ich mehrere Clockbuffer verwende? Eventuell wenn 
mehrere Schaltungsteile unabhängig voneinander sind (nicht clk-synchron 
zueinander sein müssen) vereinfacht dies das Routing?

Danke und Grüße!
Hans

von Bitwurschtler (Gast)


Lesenswert?

Hans schrieb:
>  Nun mache ich jedoch
> folgendes:
>
> Clk --> pin_vom_FPGA --> BUFG --> clk_signal --> BUFG --> clk_signal2

der erste BUFG sollte ein IBUFG sein

> a.) Muss ich im Design clk_signal & clk_signal2 als unterschiedliche
> Clks behandeln, oder sind die zueinander synchron?

die haben zwar gleichen takt aber nicht gleiche Phasenlage, es gibt also 
einen skew zwischen beiden der zu Timing Verletzung führen kann. Nicht 
gut.

von Vancouver (Gast)


Lesenswert?

"Muss ich im Design clk_signal & clk_signal2 als unterschiedliche
Clks behandeln, oder sind die zueinander synchron?"

Die sind synchron bis auf die BUFG-Delay, aber im Code hast Du natürlich 
unterschiedliche Signalnamen.

"Welche Gründe könnte es geben, einen zusätzlichen Clk-Buffer im
Design zu instanziieren?"

Wenn du Clocknetze mit sehr vielen Sinks hast (also vielen FFs), dann 
wird der Fanout auf diesem Netz sehr hoch, was das Timing 
verschlechtert. Dann spaltet man den Clocktree auf und benutzt weitere 
Clocknetze. Das ist aber eigentlich nur bei sehr großen Designs 
notwendig. Außerdem kann man dann Teilnetze vom Clock trennen, wenn man 
BUFGs mit enable verwendet (womit man sich wieder andere Probleme 
einfängt)

von Hans (Gast)


Lesenswert?

Danke für die Rückmeldungen schonmal!

> der erste BUFG sollte ein IBUFG sein

Wenn ich statt einem IBUFG einen BUFG nehme, was wäre dann der 
Unterschied?

von Bitwurschtler (Gast)


Lesenswert?

Hans schrieb:
> Danke für die Rückmeldungen schonmal!
>
>> der erste BUFG sollte ein IBUFG sein
>
> Wenn ich statt einem IBUFG einen BUFG nehme, was wäre dann der
> Unterschied?

Du hast den BUFG für andere clock-Anwendung (bspw DCM - Feedback, mehr 
interne Takte) zur Verfügung.

Der IBUFG ist auf die Taktweiterleitung von externen Taktsignalen 
optimiert, heisst das Signal wird vom Pin mit geringer Verzögerung in 
das FPGA-Taktsystem weitergeleitet, vom Pin übers BUFG ist diese 
Verzögerung höher.

Zum Nachlesen:
http://www.xilinx.com/support/answers/5304.html
https://forums.xilinx.com/t5/Timing-Analysis/Difference-between-IBUFG-and-BUFG-clock/td-p/36584

VG

von berndl (Gast)


Lesenswert?

Vancouver schrieb:
> Wenn du Clocknetze mit sehr vielen Sinks hast (also vielen FFs), dann
> wird der Fanout auf diesem Netz sehr hoch, was das Timing
> verschlechtert. Dann spaltet man den Clocktree auf und benutzt weitere
> Clocknetze.

Da waere ich mir aber nicht so sicher...
Der Clock-Tree hat sowieso viele Buffer, einfach aus der Tatsache, dass 
selbst ein "Fat" Clk-Buffer so viele Fanouts nicht treiben kann. Diese 
eingebauten Buffer sind idealerweise so platziert, dass minimaler Skew 
zwischen zwei FFs in der Nachbarschaft erreicht werden. Am anderen 
Chipende wird der Skew dann groesser.

Eine Verwendung mehrere "gleicher" Takte hatte ich mal: Ein Businterface 
lief mit der normalen Clk. Dann hatte ich 2 verschiedene Designs im 
FPGA, von denen zu jeder Zeit aber nur eines benutzt wurde. Diese 2 
Designs hatten jeweils eine eigene Clk, einfach die originale Clk durch 
ein Clk-Gate geschickt (gibt da Clk-Muxe dafuer auf dem Chip). Warum: 
Strom sparen...

von Christian R. (supachris)


Lesenswert?

Hans schrieb:
> Anschließend instanziiere ich einen BUFG:

Das macht doch XST oder map für dich, um sowas musst du dich nicht 
selbst kümmern, wenn du das Signal als CLK und nur als CLK benutzt.
BUFG usw selber instanziieren braucht man nur wenn man z.B. den DCM ohne 
IP Generator verwendet oder die ISERDES oder MGT oder solche Späße. Da 
muss man dann bissl tiefer in den jeweiligen Clocking User Guide 
einsteigen.

von Elektro Nick (Gast)


Lesenswert?

Bitwurschtler schrieb:
> die haben zwar gleichen takt aber nicht gleiche Phasenlage, es gibt also
> einen skew zwischen beiden der zu Timing Verletzung führen kann.

clock buffer muchen in der Regel irgendwas um die 50ps ... 100ps. Da sie 
das Signal auffrischen wird das Signal eher schneller, weil das routing 
besser wird.

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.