Xilinx BUFG ?

OP #3722789
Lesenswert?

Ich hab eine PLL in einem Spartan 6 verwendet um den Takt für eines DDS 
zu erzeugen (50MHz rein, x10, dann /5 also 200MHz - zum spielen). Das 
ganze klappt dann nur, wenn ich den Ausgang der PLL über einen BUFG 
Puffer an den DDS CLKIN anschließe (VHDL Instantation). Ist das so 
richtig oder mach ich dabei einen Fehler ? Bei einem einfachen Zähler 
brauche ich den BUFG nicht.

Thomas
Gast #3722967
Lesenswert?

Thomas S. schrieb:
>... Bei einem einfachen Zähler
>brauche ich den BUFG nicht.
Du meinst wohl ohne PLL brauchst du kein BUFG? In
diesem Fall wird automatisch ein BUFG vom Synthesetool
erzeugt. Schau einfach mal im FPGA-Editor nach.
Gast #3723258
Lesenswert?

Wie verhällt es sich dbei mit dem Problem, wenn Xilinx Synthese den 
Fehler meldet, dass es einen CLockpfad gibt, wo der BUFG nicht 
automatisch eingesetzt wurde und man ein constraint nachrüsten soll. Ist 
der Buffer dann drin oder nicht?
OP #3723639
Lesenswert?

Ich kapiere es irgenwie nicht, wann die Software den BUFG automatisch 
einfügt und wann nicht. Es gelingt mir auch nicht einen 2. Ausgang aus 
der PLL auf einen PIN zu legen. Die ISE meint ich solle einen weiteren 
BUFG  instanziieren und wenn ich das mache wird gemeckert das der BUFG 
nicht für den Output auf einen PIN wäre. Das ganze ist doch etwas 
verwirrend ?
Gast #3723659
Lesenswert?

Thomas S. schrieb:
> Ich kapiere es irgenwie nicht, wann die Software
> den BUFG automatisch einfügt und wann nicht.

Hängt ab von der Anzahl der angeschlossenen Flipflops.

Thomas S. schrieb:
> Die ISE meint ich solle einen weiteren BUFG instanziieren
> und wenn ich das mache wird gemeckert das der BUFG
> nicht für den Output auf einen PIN wäre.

Der BUFG und das Taktnetz dienen dazu sicherzustellen,
dass alle angeschlossenen Flipflops innerhalb des FPGA
exakt zum gleichen Zeitpunkt schalten.

Legt man den über BUFG gerouteten clock auch auf einen
Ausgangspin, werden die aussen angeschlossenen Flipflops
später als die internen Flipflops schalten, und das führt zu
einer Warnung. Diese Warnung kann man ignorieren, wenn man
sich sicher ist, dass dieses spätere Schalten nicht stört.
Gast #3723872
Lesenswert?

Vlt hilft folgende Erklärung:
Die "global Buffer" BUFG, IBUFG, IBUFGDS dienen dazu, Signale
ins Global Clock Network einzuspeisen. Bei den I-Varianten
(I=Input) IBUFG etc. sind die Signalequellen Pins, bei BUFG
(ohne I) sind die Signalquellen FPGA-intern (z.B. von DCMs).

IBUFG bzw. IBUFGDS werden idR. automatisch vom Synthesetool
erzeugt, BUFG dagegen muss "von Hand" erzeugt werden (ich hatte
Oben "BUFG wird autom. erzeugt" geschrieben, war falsch und muss
natürlich IBUFG heissen!).

Das ganze ist in den Spartan3-Docs leider nur sehr knapp beschrieben,
besser versteht man es, wenn man ein kleines Design aufsetzt und
dann mittels FPGA-Editor auf die Suche nach den einzelnen Komponenten
geht. Dafür ist ein kleiner Spartaner am Besten geeignet.

Auch empfehlenswert ist die Generierung von DCMs per IP-Core. Im
generierten Code kann man dann die Struktur und deren Komponenten
ablesen.
#3724055
Lesenswert?

Den BUFG braucht man, wenn man von einer Takterzeugenden Komponente auf 
das globale Taktnetzwerk gehen will. Bei PLL und DCM muss der an den 
Ausgang. Der Core generator macht das auf Wunsch automatisch. Zwei BUFG 
hintereinander geht nicht, zwei BUFG an einem Ausgang geht auch nicht. 
Eine Kette auf BUFG und IBUFG geht auch nicht.

Wenn du den Takt von außen ohne PLL/DCM direkt als Takt intern 
verwendest, macht XST automatisch den IBUFG rein.

Einen OBUFG gibts nicht, denn es gibt keinen direkten Weg vom 
Takt-Netzwerk auf den Ausgangs-Pin. Willst du einen Takt an einem FPGA 
Pin ausgeben, musst du ein ODDR FlipFlop verwenden (Clock forwarding). 
Machst du das nicht, sondern gehst mit dem Takt direkt auf einen 
Ausgang, müssen alle anderen FlipFlops ebenfalls vom schnellen 
Taktnetzwerk "runter" und der Takt wird dann nur noch über das normale 
Routing Netz geleitet, was zu undefinierbarem Timing führt. Das gibt 
einen Fehler im MAP, wenn du nicht per UCF festgelegt hast dass du das 
unbedingt so willst.
OP #3724103
Lesenswert?

Vielen Dank für die Ausführungen. Eines meiner Teilprobleme: Takt für 
ADC/DAC. Entweder werden ADC/DAC von einem externen Takt direkt 
angesteuert über entsprechende Treiber (LVECL, LTC6957, Trafo), das 
sollte am wenigsten Jitter erzeugen, das FPGA müsste dann per 
Eingangstakt drauf synchronisiert werden - oder das FPGA nimmt den 
Eingangstakt und erzeugt dann die entsprechenden Takte für ADC/DAC. Bei 
letzterer Methode hätte ich meine Bedenken mit dem Rauschen durch die 
interne PLL. Taktquelle ist ein extrem rauscharmer 100MHz Oszillator 
(Axiom75-ULN).

Ich hab es mal auf folgende Art probiert. myclkout1 ist clkout1 von 
einer PLL. myioclk ist der Ausgangspin. Ist das so gedacht ?
1
U7: BUFG port map (I => myclkout1, O => myclk1);
2

3
ODDR2_inst : ODDR2
4
generic map(
5
   DDR_ALIGNMENT => "NONE", -- Sets output alignment to "NONE", "C0", "C1"
6
   INIT => '0', -- Sets initial state of the Q output to '0' or '1'
7
   SRTYPE => "SYNC") -- Specifies "SYNC" or "ASYNC" set/reset
8
port map (
9
   Q => myioclk, -- 1-bit output data
10
   C0 => myclk1, -- 1-bit clock input
11
   C1 => not myclk1, -- 1-bit clock input
12
   CE => '1',  -- 1-bit clock enable input
13
   D0 => '1',   -- 1-bit data input (associated with C0)
14
   D1 => '0',   -- 1-bit data input (associated with C1)
15
   R => '0',    -- 1-bit reset input
16
   S => '0'     -- 1-bit set input
17
);
Gast #3724246
Lesenswert?

Christian R. schrieb:
> Machst du das nicht, sondern gehst mit dem Takt direkt auf einen
> Ausgang, müssen alle anderen FlipFlops ebenfalls vom schnellen
> Taktnetzwerk "runter" und der Takt wird dann nur noch über das normale
> Routing Netz geleitet,

Woher stammt diese Information?

Das erscheint mir merkwürdig.
Das würde heissen, dass das Taktnetz ausschließlich an
Takteingänge von Flipflops angeschlossen werden kann.
Nach meiner Erinnerung ist eine Herunterleitung vom
Taktnetz auf lokale Leitungen durchaus möglich.
Gast #3724366
Lesenswert?

Christian R. schrieb:
>Einen OBUFG gibts nicht, denn es gibt keinen direkten Weg vom
>Takt-Netzwerk auf den Ausgangs-Pin. Willst du einen Takt an einem FPGA
>Pin ausgeben, musst du ein ODDR FlipFlop verwenden (Clock forwarding).
OBUFG gibt es nicht, ODDR zu verwenden ist absolut vernünftig aber
nicht notwendig, es geht auch anders.

>Machst du das nicht, sondern gehst mit dem Takt direkt auf einen
>Ausgang, müssen alle anderen FlipFlops ebenfalls vom schnellen
>Taktnetzwerk "runter" und der Takt wird dann nur noch über das normale
>Routing Netz geleitet, was zu undefinierbarem Timing führt. Das gibt
>einen Fehler im MAP, wenn du nicht per UCF festgelegt hast dass du das
>unbedingt so willst.
Was meinst du mit "alle anderen FlipFlops .. runter"?
Ein Takteingang (Pin) hat intern einen INBUF, der den eingehenden
Takt weiterleitet in eine locale Netzmatrix. Von der kann man dann
den Takt weiterleiten zu einem IBUFG als auch zum globalen Logiknetz
(nicht globales ClockNetz!), und zwar gleichzeitig. Von da kann dann
der Takt in eine Slice (z.B. LUT4) oder in eine IO-Slice (als
Output-Pin) weitergeleitet werden.
Das alles kann man sich leicht mithilfe des FPGA-Editors klarmachen.
#3724458
Lesenswert?

Dann ist das wohl auch architekturabhängig. Ich hatte Designs, da hat er 
mir angezeigt, dass alle FlipFlops an diesem Netz dann nicht über das 
Clock Netzwerk angeschlossen werden konnten. Beim Spartan 6 kommt da 
direkt ein Fehler (PLACE-1205 und PLACE-1136) und selbst wenn man das 
CLOCK_DEDICATED_ROUTE setzt kommt der in den allermeisten Fällen zu 
einer "unroutable situation". Aber das liegt wohl an der Beschränktheit 
des Clock Netzes am S6. Beim Spartan 3 kriegt man das so wie du 
beschrieben hast hin, allerdings hat der Taktausgang dann nach jedem 
Durchlauf ein anderes Skew zum internen Takt, bei höheren Frequenzen 
nicht brauchbar, hab eben mal getestet, da wars laut STA schon 3ns Skew.
Gast #3724473
Lesenswert?

heute unangemeldet schrieb:
> Christian R. schrieb:
>> Machst du das nicht, sondern gehst mit dem Takt direkt auf einen
>> Ausgang, müssen alle anderen FlipFlops ebenfalls vom schnellen
>> Taktnetzwerk "runter" und der Takt wird dann nur noch über das normale
>> Routing Netz geleitet,

> Das erscheint mir merkwürdig.
> Das würde heissen, dass das Taktnetz ausschließlich an
> Takteingänge von Flipflops angeschlossen werden kann.
> Nach meiner Erinnerung ist eine Herunterleitung vom
> Taktnetz auf lokale Leitungen durchaus möglich.

Es gibt ein local clock routing in IO-Bereich beim Virtex-6 und Co, bei 
anderen wieder nicht. Das ist stark typabhängig. Wenn P&R sagt es geht 
nicht, dann gehts nicht. Ggf. kann man einen Toggle-FF selbst einen 
solchen Übergang nachbauen - die Qualität des signals "leidet aber.

MfG,

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren