Forum: FPGA, VHDL & Co. Xilinx ODDR für interne Logic verwenden


von Felix (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe folgendes Problem. ich habe einen IP Core der mir einen 
differentiellen Ausgans-Clock für eine Datenleitung liefert.
Ich habe mir mal das example design angeschaut und sehe das dafür ein 
ODDR verwendet wurde.
Im Anhang ist ein Ausschnitt der Example Design Simulation mit 
dazugehöriger Schematic.
Ich brauche diesen Clock der aus dem ODDR kommt für meine interne logic. 
Das problem ist nur, dass das nicht geht. Ich muss anscheinend einen 
ODDR Ausgang an einen Ausgangsbuffer anschließen.
Weiss jemand wie ich das intern lösen kann? Gibt es da einen eleganten 
Trick?

Danke vielmals für die Hilfe


Felix

von Markus F. (mfro)


Lesenswert?

Felix schrieb:
> Weiss jemand wie ich das intern lösen kann? Gibt es da einen eleganten
> Trick?

Verstehe ich nicht. Du scheinst mir nach einem Multiplexer zu suchen?

von Christian R. (supachris)


Lesenswert?

Meines Wissens ist das nicht vorgesehen. Die ODDR Ausgänge gehen direkt 
nach außen. (Zum Glück sonst könnte man kein Clock forwarding so 
machen).
Kannst du das Clock Forwarding im Core nicht deaktivieren?

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Felix schrieb:
> Ich brauche diesen Clock der aus dem ODDR kommt für meine interne logic.

Ganz sicher nicht. Die Taktleitung ist im VHDL immer unipolar. Dass sie 
in vielen schnellen FPGAs heute bipolar ist, hat dich nicht zu 
interessieren. Die FFs, die intern getaktet werden, haben nur einen 
logischen Eingang.

von Sigi (Gast)


Lesenswert?

Felix schrieb:
> Weiss jemand wie ich das intern lösen kann? Gibt es da einen eleganten
> Trick?

Mal abgesehen internen Komponenten, die dein Problem
bestimmt besser lössen können sollten, kannst du den
zugehörigen Port einfach als IO-Port (statt nur Output)
definieren und das Signal am zugehörigen Eingang
abgreifen (das Signal läuft dann über den OutBuffer
direkt zum InBuffer, zwischendrin greift das Pad drauf
zu). Je nach Familie kann das Signal dann direkt ins
Clock-Netz eingespeisst werden, idR kann dazu jeder
Pin verwendet werden. Es sollter aber für die
Signalqualität ein dedizierter Clock-Pin sein
(entweder Global oder Regional, je nach Familie mit
Lokal sogar 3 Typen).

Die Schwierigkeit sehe ich aber in der Definition der
Constraints, abgesehen erhöht sich auch das Jittern.

von Felix (Gast)


Angehängte Dateien:

Lesenswert?

Danke für die Antworten.
Ich habe euch mal angehängt wie der IP aussieht.
Ich brauche das GMII interface und in der doku steht das der 
dazugehörige clock für TX, der SGMII_clk_r und SGMII_clk_f sind.

https://www.xilinx.com/support/documentation/ip_documentation/gig_ethernet_pcs_pma/v16_0/pg047-gig-eth-pcs-pma.pdf

Seite 35

Und im Example Design wird dafür ein ODDR verwendet. Nur geht dort das 
GMII Interface nach außen...

Ich sehe keine Möglichkeit Clock forwarding im Core einzustellen.

Danke sehr

von Christian R. (supachris)


Lesenswert?

Im Bild sieht das so aus als wäre das ODDR Register außerhalb vom Core. 
Da musst du doch nix weiter tun, der Takt ist dann an CLK verfügbar. Im 
Standardfall liegen an sgmii_clk_r und sgmii_clk_f statische Signale an, 
einmal L einmal H. Siehe auch Fig. 3-49 im User Guide des Core. Also 
kannst du den takt vorher abgreifen. Bei niedrigeren Datenraten scheint 
das über diese Signale den 12.5MHz oder 1.25MHz Takt zu generieren. Du 
könntest also eins der Signale als Clock Enable für deine Logik nehmen.

: Bearbeitet durch User
von Felix (Gast)


Angehängte Dateien:

Lesenswert?

Hi Christian.

Danke für deine Hilfe.
Der IP Core bietet mir ja eigentlich nur sgmii_clk_r und sgmii_clk_f als 
clocks an. Heisst das ich kann sgmii_clk_r als clock für die gmii Daten 
benutzen?
Ich möchte dieses Interface an einen anderen IP anschließen.
Dieser benötigt für GMII RX einen clock.
Ich hab jetzt mal ein Bild vom anderen IP angehängt und dazu noch die 
schematic wie ich es jetzt beschaltet habe. Ist das so richtig? Denn es 
scheint noch nicht zu funktionieren...

Danke sehr

von Christian R. (supachris)


Lesenswert?

Felix schrieb:
> Der IP Core bietet mir ja eigentlich nur sgmii_clk_r und sgmii_clk_f als
> clocks an. Heisst das ich kann sgmii_clk_r als clock für die gmii Daten
> benutzen?

Nee, das klappt nicht. Die beiden Signale sind nur dafür da um 
festzulegen, was das ODDR bei der fallenden (_f) und bei der steigenden 
Flanke (-r) des Taktes machen soll.

Im einfachsten Fall kannst du den 125MHZ(?) Takt, der eigentlich an den 
C-Eingang des ODDR geht, direkt auf den Takt-Eingang deines anderen IP 
legen.

ABER: Dann geht nur 125MHz als Takt. Die 12,5MHz oder 1.25MHz die das 
irgendwo im UG stehen, klappen damit nicht. Wenn das dynamisch 
umgeschaltet wird, wird das so erst mal nix, dann müsstest du höchstens 
die Funktion des ODDR mit internen Sachen nachbilden (2 Flipflops und 
ein Multiplexer) und das enstehende Signal dann wieder mit einem BUFG zu 
einem Takt machen. Aber das wird nicht schön, was Jitter usw. angeht.

von Felix (Gast)


Lesenswert?

Ok Danke Christian,
du hast mir schon mal gut geholfen.

Gruß

Felix

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.