hallo guten Tag,
wenn man ein
clocking wizard einsetze, muss man dann den output noch als generated
clock in die *.xdc liste reinschreiben?
Meine Implementation funktioniert nicht.
Und vielleicht liegt es daran.
M.E. kommt aus dem IP-Wizzard auch ein passendes xdc-File mit raus.
mutprobe schrieb:> Meine Implementation funktioniert nicht.
Jo, das ist mal eine super-konkrete Aussage.
Wie ist denn Deine Erwartung?
Und was beobachtest Du?
Duke
Duke Scarring schrieb:> M.E. kommt aus dem IP-Wizzard auch ein passendes xdc-File mit raus.
Es wurde keins generiert.
Duke Scarring schrieb:> Jo, das ist mal eine super-konkrete Aussage.> Wie ist denn Deine Erwartung?> Und was beobachtest Du?
* Die mmcm bekommt ein Eingangssignal.
* Die externe Clock ist damit direkt verbunden.
* Allerdings ist diese externe Clock auch noch mit meinem IP-Core
verbunden
* Der Ausgang wird mit einem Signal verbunden, dass dann auch mit meinem
IP-Core verbunden ist.
1
componentclk_wiz_0
2
port
3
(--Clockinports
4
--Clockoutports
5
DCLK_50MHz:outstd_logic;
6
--Statusandcontrolsignals
7
reset:instd_logic;
8
locked:outstd_logic;
9
clk_in1:instd_logic
10
);
Wenn ich das ein-kommentiere geht es nicht mehr:
1
clockgen_dclk:clk_wiz_0
2
portmap(
3
--Clockoutports
4
DCLK_50MHz=>DCLK_50MHz,
5
--Statusandcontrolsignals
6
reset=>reset_clock_wizards,
7
locked=>locked,
8
--Clockinports
9
clk_in1=>a7_mgt216_clk_p_i
10
);
hiermit geht es:
* Es lässt sich auch ein Bitstream erzeugen.
1
clockgen_dclk:clk_wiz_0
2
portmap(
3
--Clockoutports
4
DCLK_50MHz=>DCLK_50MHz,
5
--Statusandcontrolsignals
6
reset=>reset_clock_wizards,
7
locked=>locked,
8
--Clockinports
9
clk_in1=>testclk
10
);
* Es liegt also an meiner externen eingangs clk
* Man muss diese doch sowohl für den IP-Core als auch für den Clock
Wizard verwenden können oder nicht?
mutprobe apollo2022 schrieb:> Aber allgemein wundert es mich :D
Sieh dir die Dokumentaion deines FPGAs an.
Da muss sehr wahrscheinlich noch ein CLK-Buffer rein, wenn du den selben
Takt in einen Clock-Manager und auf ein Taktnetz geben willst.
Lothar M. schrieb:> mutprobe apollo2022 schrieb:>> Aber allgemein wundert es mich :D> Sieh dir die Dokumentation deines FPGAs an.> Da muss sehr wahrscheinlich noch ein CLK-Buffer rein, wenn du den selben> Takt in einen Clock-Manager und auf ein Taktnetz geben willst.
Aber wie sieht denn so ein Clock Buffer aus?
Warum macht Vivado das nicht einfach.
Kann ich einen Clock Wizard direct an meinen externen Taktgeber
anschließen und dann die Signale von dort aus zu meinem IP und zu meinem
anderen Zeug leiten?
Werde jetzt mal nem differentiellen clock wizard erstellen .
Also mit differentiellem Eingang
...
Nee gar keine Chance
1
Clockgen->ClockingWizard->156Mhz->ipcore
2
->50Mhz->anderes
so was hatte ich glaube ich schon mal probiert.
es will einfach nie klappen.
Tja oben im ersten Post ist der Screenshot leider rechts abgeschnitten.
Denn genau dort kann man einstellen ob der Takteingang für die PLL ein
dedizierter FPGA Pin ist oder ob da ein interner Takt verwendet wird.
Stell da einfach global Buffer ein und gut.
mutprobe schrieb:> Warum macht Vivado das nicht einfach.
Macht es. Eine Seite weiter kannst du das einstellen, ob ein buffer
drangehängt werden soll.
Deine Doppelverdrahtung ist aber so! nicht "recommended".
Gustl B. schrieb:> Tja oben im ersten Post ist der Screenshot leider rechts abgeschnitten.> Denn genau dort kann man einstellen ob der Takteingang für die PLL ein> dedizierter FPGA Pin ist oder ob da ein interner Takt verwendet wird.> Stell da einfach global Buffer ein und gut.
(Korrektur skizze)
1
Clockgen_n->|ClockingWizard->156Mhz->ipcore
2
Clockgen_p->|->50Mhz->anderes
* Habe gestern differentielle Clock im Wizard eingestellt, aber es hat
nicht funktioniert.
Zoran schrieb:> Eine Seite weiter kannst du das einstellen, ob ein buffer> drangehängt werden soll.>> Deine Doppelverdrahtung ist aber so! nicht "recommended".
Vielleicht kann ich die für den Core entfernen. Sowohl beide 156 MHz
Eingänge als auch der Transceiver Eingang haben intern schon Buffer..
Was meinst du mit Doppelverdrahtung?
Wie würdest du das machen wenn du externe 156 Mhz hast und die für
unterschiedliche Netzwerke verwenden möchtest?
mutprobe schrieb:> (Korrektur skizze)Clock gen_n -> |Clocking Wizard ->156Mhz ->ip core> Clock gen_p -> | -> 50 Mhz ->anderes> * Habe gestern differentielle Clock im Wizard eingestellt, aber es hat> nicht funktioniert.
Das geht natürlich nicht. Du brauchst da am Eingang einen IBUFDS, und
dahinter einen BUFG. Dann bist du mit dem Clock schon auf dem globalen
Clock Netzwerk. Von da kannst du alle FlipFlops und sonstigen Elemente
im FPGA erreichen. Wenn du dann parallel zur Logik an einen MMCM willst,
musst du für dessen Eingang "No Buffer" einstellen. Dann gibts auch
keine Fehler
Christian R. schrieb:> Wenn du dann parallel zur Logik an einen MMCM willst,> musst du für dessen Eingang "No Buffer" einstellen. Dann gibts auch> keine Fehler
Global Buffer geht genauso.
mutprobe schrieb:> Gustl B. schrieb:>> Tja oben im ersten Post ist der Screenshot leider rechts abgeschnitten.>> Denn genau dort kann man einstellen ob der Takteingang für die PLL ein>> dedizierter FPGA Pin ist oder ob da ein interner Takt verwendet wird.>> Stell da einfach global Buffer ein und gut.>> (Korrektur skizze)Clock gen_n -> |Clocking Wizard ->156Mhz ->ip core> Clock gen_p -> | -> 50 Mhz ->anderes> * Habe gestern differentielle Clock im Wizard eingestellt, aber es hat> nicht funktioniert.
Ich hatte geschrieben "global Buffer" und du stellst einen
differentiellen Eingang ein. Wenn du Hilfe nicht annimmst, dann bringt
das nichts. BUFG ist der globale Buffer.
Meines Wissens geht das nicht was du vor hast. Der GTP braucht seinen
Takt direkt vom zugehörigen REF_CLK Eingang der GTP Bank. Du musst deine
Logik dahinter dann mit dem USERCLK versorgen. Und zum Starten brauchen
die GTP auch noch einen Takt der immer läuft, also unabhängig vom
REFCLK.
https://blog.actorsfit.com/a?ID=01700-3cc10027-7817-4984-87bc-a50585d54a1dChristian R. schrieb:> Der GTP braucht seinen> Takt direkt vom zugehörigen REF_CLK Eingang der GTP Bank.
IBUFDS_GTPE2 ist schon sehr nah an den physikalischen pins oder?
Deswegen kann man die REFCLK_N/P direkt dort anschließen oder?
> Du musst deine> Logik dahinter dann mit dem USERCLK versorgen.
Also einem separaten Takt?
Man muss doch irgendwie auch die refclk_p/n verwenden können oder?
>Und zum Starten brauchen> die GTP auch noch einen Takt der immer läuft, also unabhängig vom> REFCLK.
Aber welchen? Wo soll der angeschlossen werden?
Es gibt nur noch einen DCLK-Eingang.
Aber ist der nicht nur für Debugzwecke da?
Im Anhang habe ich mal das Schematic.
Ist das vlt. einfach so, das der IP Core Eingang dann IBUF Buffer als
Verbindung benötigt und keine BUFG?
Danke :)
Ich glaube du solltest dich mal mit dem passenden clocking user guide
eine Weile zurückziehen und intensiv beschäftigten. Alle deine Fragen
zeugen von einem gewissen grundlegenden Unverständnis...
Duke
mutprobe schrieb:> https://blog.actorsfit.com/a?ID=01700-3cc10027-7817-4984-87bc-a50585d54a1d>> Christian R. schrieb:>> Der GTP braucht seinen>> Takt direkt vom zugehörigen REF_CLK Eingang der GTP Bank.> IBUFDS_GTPE2 ist schon sehr nah an den physikalischen pins oder?> Deswegen kann man die REFCLK_N/P direkt dort anschließen oder?
Du MUSST den da anschließen. Und dazwischen muss der IBUFDS_GTPE2 wie im
Bild. Dein Bild ist doch eindeutig, es geht nur genau so und nicht
anders.
>> Du musst deine>> Logik dahinter dann mit dem USERCLK versorgen.> Also einem separaten Takt?> Man muss doch irgendwie auch die refclk_p/n verwenden können oder?
Nein, das geht nicht, die REFCLK sind ausschließlich für die GTP. Siehe
dein Bild, der 156MHz kommt dann hinten wieder raus, das ist ja am
TXUSERCLK dran.
>>Und zum Starten brauchen>> die GTP auch noch einen Takt der immer läuft, also unabhängig vom>> REFCLK.>> Aber welchen? Wo soll der angeschlossen werden?> Es gibt nur noch einen DCLK-Eingang.> Aber ist der nicht nur für Debugzwecke da?> Clock used as the DRP clock, and also as a stable reference clock for> the> detection of the feedback and reference clock signals to the QPLL. The> input reference clock to the QPLL or any output clock generated from> the QPLL (for example, TXOUTCLK) must not be used to drive this clock.> For UltraScale devices this clock is also used in the internal state> machines for the configuration of the transceiver.
Genau der, im Text steht ja, dass er gebraucht wird, um den Transceiver
zu starten und einzustellen.
Die Transceiver und die zugehörigen Pins sind keine allgemeinen
Ressourcen, da gibts nur diese Möglichkeit, die dein gepostetes Bild
zeigt.
Hey vielen Dank.
Christian R. schrieb:> Genau der, im Text steht ja, dass er gebraucht wird, um den Transceiver> zu starten und einzustellen.
Das haben die so geschrieben, dass ich es nicht verstanden habe.
Christian R. schrieb:> Die Transceiver und die zugehörigen Pins sind keine allgemeinen> Ressourcen,
Ok muss mir das physikalisch anschauen.
MGT213 CLK P / N sollte doch grundsätzlich auch mit einer MMCM verbunden
werden können, damit ich 50 MHz erzeugen kann oder?
Ich habe hier auch einen Beispielcode wo jmd die MGT zuerst in einen
Clock buffer IBUFDS_GTE2 leitet und dann erst in den Wizard.
Werde ich mal testen.
Andererseits könnte ich auch die vom core bereitgestellten 156 MHz in
eine MMCM leiten und dann 50 MHz wieder an ihn zurück leiten.
mutprobe schrieb:> MGT213 CLK P / N sollte doch grundsätzlich auch mit einer MMCM verbunden> werden können, damit ich 50 MHz erzeugen kann oder?
Ne, das ist nicht vorgesehen, und auch aus den Blockschaltbildern im GTP
User Guide ersichtlich.
> Ich habe hier auch einen Beispielcode wo jmd die MGT zuerst in einen> Clock buffer IBUFDS_GTE2 leitet und dann erst in den Wizard.> Werde ich mal testen.
Ja, das muss man machen, siehe dein Bild. Aber ein Abzweig zur
"normalen" MMCM ist nicht möglich.
> Andererseits könnte ich auch die vom core bereitgestellten 156 MHz in> eine MMCM leiten und dann 50 MHz wieder an ihn zurück leiten.
Ach, daher weht der Wind, du hast vergessen, den DCLK auf´s Board zu
bauen. Nee, das klappt nicht, denn der GTP wird mit Hilfe des DCLK über
diese Startup State Machine erst eingestellt, der USERCLK kommt da erst
nachher raus. Da bleibt als einzige Möglichkeit, wenn du keinen
unabhängigen Takt hast, den CCLK intern zu benutzen, mit der STARTUPE2
Primitive geht das. Der ist zwar nicht genau und wackelt ein bissl, aber
für den DCLK sollte es gehen.
ok ja ich sehe das jetzt auch hier:
>The dclk clock provided to the core must be a free running clock since it >also
used to clock the logic for transceiver reset/initialization >circuitry. The
dclk clock must not be derived from any transceiver output
ich sehe gerade nur noch M16 und M17 die angeschlossen sind. Dort steht
zwar, dass sie "differential" gpios sind aber nicht, dass sie clock
capable sind.
Ansonsten ist da noch ein mgt213 aber das scheint ja auch nicht zu
gehen, dass ich da 50 MHz her gewinne.
Also ansonsten wirklich wie du vorschlägst durch interne clks.
Muss der FPGA nicht irgendeinen Takt bekommen um überhaupt zu arbeiten?
Wo wird denn angeschlossen?
mutprobe schrieb:> Also ansonsten wirklich wie du vorschlägst durch interne clks.> Muss der FPGA nicht irgendeinen Takt bekommen um überhaupt zu arbeiten?> Wo wird denn angeschlossen?
Ja das ist der Configuration Clock, CCLK. Der wird intern in einem
Ringoszillator erzeugt, den kannst du intern an der STARTUPE2 abgreifen,
an CFGMCLK. So wie es aussieht ist der dauerhaft aktiv und bei ungefähr
65MHz...das ist aber eine üble Notlösung. Ob das zuverlässig klappt,
muss man probieren. Da der DRP aber synchron ist, sollte es gehen.
mutprobe schrieb:> ich sehe gerade nur noch M16 und M17 die angeschlossen sind. Dort steht> zwar, dass sie "differential" gpios sind aber nicht, dass sie clock> capable sind.
Zur Not geht das auch, für den MGT Start sollte es reichen. Da muss man
dann halt über Constraints sagen dass man das so will, sonst gibt's viel
Gemecker.
Würde gerne trotzdem noch mal fragen, was gemeint ist in UG472
(Clocking) und UG482 (Transceiver).
Kann man MGTREFCLK[0/1]P/N doch indirekt nutzen?
Da steht das über einen MUX das Signal IBUFDS_GTE2 ("Output to Logic3")
an die Logik weitergegeben werden kann?
Bei **Report Timing Summary** kann man das Design sehen.
Habe jetzt eine MMCM an den Output von von IBUFDS angeschlossen.
Daran ist ein einfacher process angeschlossen.
Der ist jetzt schon stark gekürzt.
Aber es kommt immer zu dem gleichen critical warning:
```
[Timing 38-282] The design failed to meet the timing requirements.
Please see the timing summary report for details on the timing
violations.
```
```
p_counter : PROCESS (clk_156_25_p)
BEGIN
IF rising_edge(clk_156_25_p)THEN
-- counter_value <= counter_value + 1;
reset <= '1';
END IF;
END PROCESS p_counter;
```
Hat jemand eine Idee?
Duke Scarring schrieb:>> timing summary report> Was steht denn da drin?
** Muss mir doch noch genauer anschauen! **
Das einzige was mir bis jetzt aufgefallen ist,ist dass dieser Pfad der
von meinem Prozess zu dem Reset meines IP-Cores geht, eine zu große
Verzögerung hat. Setup ist dabei rot. Das andere blaue.
Design Timing Summary
Timing constraints are not met
_____________________________________________________________
# Inter clock paths
## Setup Path 41:
Christian R. schrieb:>> MGT213 CLK P / N sollte doch grundsätzlich auch mit einer MMCM verbunden>> werden können, damit ich 50 MHz erzeugen kann oder?>> Ne, das ist nicht vorgesehen, und auch aus den Blockschaltbildern im GTP> User Guide ersichtlich.
Und was sagst du zu dem abgezweigten Ausgang von dem IBUFDS_GTE2?
>IBUFDS_GTE2 is a redundant output for additional clocking scheme >flexibility.
Ist der nutzbar mit einer MMCM?
Offensichtlich kannst du das so verwenden, obwohl es dem eindeutigen
"must not be used" widerspricht:
"Clock used as the DRP clock, and also as a stable reference clock for
the
detection of the feedback and reference clock signals to the QPLL. The
input reference clock to the QPLL or any output clock generated from
the QPLL (for example, TXOUTCLK) must not be used to drive this clock.".
Ob die PLL dann wirklich damit auf den REFCLK einrastet ist natürlich
immer noch fraglich...
Dein Timing error scheint eher daher zu kommen, dass der Reset offenbar
gerne synchron zum TXOUTCLK sein möchte, soweit ich die Fehler Schnipsel
interpretiere. Das musst du dann noch einsynchronisieren (Mindestanzahl
Takte beachten) und wahrscheinlich ein multi cycle Constraint setzen.
# 1.) 50 MHz erzeugen aus eingehenden mgt216 clocks
## "Must not be used"
* Ah, jetzt verstehe ich erst, dass (der Ausgang von IBUFDS) GTREFCLK0
zur QPLL ( PLL in COMMON) geht.
* Das abgezweigte "O" durch den MUX ist also quasi die "input reference
clock to the QPLL".
* Und diese "must not be used to drive this clock".
## MMCM
* Konnte auch noch nicht sehen, dass man irgendwo dazwischen eine MMCM
setzen kann.
* Würde gerne wissen warum das so ist, ob das möglich ist und ob man das
in Ausnahmefällen macht.
* Aber es würde vielleicht gar nichts bringen, weil es eine Ableitung
der "input reference clock to the QPLL" wäre, die nicht genutzt werden
soll.
# 2.) Timing
Christian R. schrieb:> Dein Timing error scheint eher daher zu kommen, dass der Reset offenbar> gerne synchron zum TXOUTCLK sein möchte, soweit ich die Fehler Schnipsel> interpretiere. Das musst du dann noch einsynchronisieren (Mindestanzahl> Takte beachten) und wahrscheinlich ein multi cycle Constraint setzen.
Danke sehr!
Muss ich mir anschauen.