Hallo zusammen,
ich benötige in meinem Design zwei Taktfrequenzen, einen Systemtakt und
einen Takt für ein I/O-Modul (16 MHz). Da ich für keine von beiden den
Eingangstakt verwenden möchte, habe ich zwei DCMs angelegt. Soweit so
gut, in der Simulation klappt alles und synthetisieren lässt es sich
auch.
Nur beim Platzieren bekomme ich folgende Fehlermeldung (ISE 11.1):
1
ERROR:Place:1012 - A clock IOB / DCM component pair have been found that are not placed at an optimal clock IOB / DCM site pair. The clock component <CLKGen_100MHz_unit/DCM_SP_INST> is placed at site <DCM_X0Y1>. The clock IO/DCM site can be paired if they are placed/locked in the same quadrant. The IO component <CLK_ext> is placed at site <T10>. This will not allow the use of the fast path between the IO and the Clock buffer. If this sub optimal condition is acceptable for this design, you ma
2
y use the CLOCK_DEDICATED_ROUTE constraint in the .ucf file to demote this message to a WARNING and allow your design to continue. However, the use of this override is highly discouraged as it may lead to very poor timing results. It is recommended that this error condition be corrected in the design. A list of all the COMP.PINs used in this clock placement rule is listed below. These examples can be used directly in the .ucf file to override this clock rule. < NET "CLK_ext" CLOCK_DEDICATED_ROUTE
Es gibt einen recht aktuellen Thread hier im Forum (siehe
Beitrag "Problem mit DCM-Position"). Leider unterhalten sich da
offensichtlich zwei Leute vom Fach, wozu ich mich leider (noch) nicht
zählen kann. Daher kann ich dem Post nicht folgen.
Ich lese aus der Fehlermeldung, dass der Platzierer es nicht schafft,
die DCMs in den gleichen Quadranten wie den Takteingang zu setzen.
Deshalb muss er irgendeinen langsameren Pfad auswählen und der Takt wird
suboptimal ausgeführt.
Was ich aber nicht verstehe, ist, ...
...wieso er das denn nicht ordentlich Platzieren kann? Der verwendete
Spartan 3E (XC3S500E) hat 8 DCMs, demnach werden in jeden Quadranten 2
DCMs fallen. Mehr brauche ich auch nicht - wieso klappt das denn nun
nicht?
...was das Faß überhaupt zum Überlaufen gebracht hat? Oder ist es etwa
generell immer so, dass man bei der Verwendung von zwei DCMs automatisch
in diese Beschränkung rennt?
Was kann ich jetzt sinnvolles tun, um dieses Problem aufzulösen? Was
meint der Platzierer in seiner Fehlermeldung, wenn er von "very poor
timing results" spricht? Was erwartet mich da?
Grüße
Steffen
Steffen Hausinger schrieb:> <CLK_ext> is placed at site <T10>. This will not allow the use of the> fast path between the IO and the Clock buffer.
Ist der Pin T10 bei deinem FPGA ein Takteingang?
> wenn er von "very poor timing results" spricht?
Jitter und Skew werden unkalkulierbar und schlecht.
> Was erwartet mich da?
Das kann keiner genau sagen... :-/
Lothar Miller schrieb:> Ist der Pin T10 bei deinem FPGA ein Takteingang?
Nein, aber nach der Lesart oben bin ich auch davon ausgegangen, dass mit
"Side T10" etwas anderes gemeint sei. Sonst hätte ich das Wort "Pad"
erwartet.
Der Takteingang liegt auf Pin C9 (-> Digilent-Bord). Das habe ich dem
Tool aber auch in der *.ucf bekannt gegeben:
Du kannst nix anderes machen, als das CLOCK_DEDICATED_ROUTE = FALSE in
die UCF einzutragen, wenn dein Takt auf so einem Pin bleiben muss. Schau
dir mal im User Guide das Übersichtsbild zu den DCMs und Clock-Leitungen
an, dann siehst du schnell die Grenzen. Nur bestimmte CLK Eingänge
können direkt auf die einzelnen DCMs gehen, und die Zahl der internen
Clock Lanes ist auch nur 8. Somit kannst du z.B. nicht jeweils alle 4 um
90° verschobenen Ausgänge zweier nebeneinander liegender DCMs
gleichzeitig auf die Clock Lanes aufschalten.
Christian R. schrieb:> Nur bestimmte CLK Eingänge> können direkt auf die einzelnen DCMs gehen
Mein Takteingang, C9, ist so einer. Er geht direkt auf DCM_X0Y1 - passt
also.
Christian R. schrieb:> Somit kannst du z.B. nicht jeweils alle 4 um> 90° verschobenen Ausgänge zweier nebeneinander liegender DCMs> gleichzeitig auf die Clock Lanes aufschalten.
Na gut, aber das will ich doch auch gar nicht. Schon klar, dass das nur
ein Beispiel von Dir war. Aber soll das mit anderen Worten heißen, dass
es nicht möglich ist, zwei verschiedene Taktfrequenzen zu erzeugen?!
Bzw. nur mit den genannten Einschränkungen?
Ich bin bisher davon ausgegangen, das wäre eine Standard-Aufgabe und ein
FPGA langweilt sich über sowas. Aber demnach würden ja alle Spartan 3 da
draußen nur mit maximal 2 Takten betrieben werden (oder die
Einschränkung in Kauf nehmen). Ist das denn wirklich so?! Warum gibt es
denn dann überhaupt 4 DCM-Einheiten?
Steffen Hausinger schrieb:> Christian R. schrieb:>> Nur bestimmte CLK Eingänge>> können direkt auf die einzelnen DCMs gehen>> Mein Takteingang, C9, ist so einer. Er geht direkt auf DCM_X0Y1 - passt> also.
Das schon. Aber den meckert er ja nicht an, sondern den 2. Takteingang
am T10. Das ist offenbar überhaupt kein CLK Eingang oder einer, der
nicht benutzbar ist, weil durch den anderen DCM blockiert.
> Christian R. schrieb:>> Somit kannst du z.B. nicht jeweils alle 4 um>> 90° verschobenen Ausgänge zweier nebeneinander liegender DCMs>> gleichzeitig auf die Clock Lanes aufschalten.>> Na gut, aber das will ich doch auch gar nicht. Schon klar, dass das nur> ein Beispiel von Dir war. Aber soll das mit anderen Worten heißen, dass> es nicht möglich ist, zwei verschiedene Taktfrequenzen zu erzeugen?!> Bzw. nur mit den genannten Einschränkungen?
Doch, natürlich geht das. Sogar bis zu 8 Takte, die auf den schnellen
Clock Lanes laufen können. Allerdings muss man sich dafür beim Entwurf
der Außenbeschaltung schon im klaren drüber sein, dass es gewisse
Einschränkungen hinsichtlich der Plazierung der CLK Eingänge gibt. Siehe
oben.
> Ich bin bisher davon ausgegangen, das wäre eine Standard-Aufgabe und ein> FPGA langweilt sich über sowas. Aber demnach würden ja alle Spartan 3 da> draußen nur mit maximal 2 Takten betrieben werden (oder die> Einschränkung in Kauf nehmen). Ist das denn wirklich so?! Warum gibt es> denn dann überhaupt 4 DCM-Einheiten?
Wie gesagt, das geht schon, wenn du 4 CLK Eingänge an den 4 Seiten des
Chips benutzt und insgesamt bei unter 8 Takten im FPGA bleibst. Bei
niedrigeren Frequenzen und/oder geringeren Anforderungen an Skew und
Jitter usw. geht´s natürlich auch über die normalen Routing-Ressourcen.
Hi,
oben in der ISE Fehlermeldung steht:
The IO component <CLK_ext> is placed at site <T10>.
Du schreibst aus deinem .ucf:
NET "CLK_ext" LOC = C9;
Da passt doch etwas nicht zusammen. Wieviele externe Eingangsclocks hast
du denn nun? Und auf welchen Pins?
berndl schrieb:> Da passt doch etwas nicht zusammen. Wieviele externe Eingangsclocks hast> du denn nun? Und auf welchen Pins?
Nach ausgiebiger Lektüre vermute ich, dass genau hier mein Denkfehler
liegt. Ich habe nämlich nur einen einzigen CLK-Eingang (den auf C9).
Sehe ich es richtig, dass ich dessen Takt nur auf ein einziges DCM
schalten kann? D.h. pro Takteingang kann ich zwei Takte nutzen - nämlich
den Originaltakt und einen daraus per DCM abgeleiteten?
Denn so würde das alles einen Sinn machen...
>Sehe ich es richtig, dass ich dessen Takt nur auf ein einziges DCM>schalten kann?
Ja
Der DCM hat noch einen Ausgang mit dem Namen IBUFG_OUT. Den nimmst du
als quelle für den 2. DCM
Sauron
Christian R. schrieb:> Aber wo kommt dann die Fehlermeldung mit T10 als Input her?
Ich habe eine Vermutung: Gestern Abend habe ich in meiner Verzweiflung
viele Einstellungen einmal durchgespielt. Dabei habe ich wohl auch die
Kombination erwischt, in der beide DCMs als "Input" eingestellt sind.
Demnach ist Ihnen gar kein Takteingang zugeordnet. Möglicherweise hat
das irgendwie dazu geführt, dass "T10" ausgewählt wurde? Ich weiß es
nicht.
Ich habe nun aber folgendes ausprobiert:
Externer Takt an erstes DCM:
1
CLKGen_25MHz_unit:CLKGen_25MHzPortmap(
2
CLKIN_IN=>CLK_ext,-- IBUFG
3
CLKFX_OUT=>iCLK_25MHz,-- BUFG
4
CLKIN_IBUFG_OUT=>CLK_ext_IBUF,-- Abzweigung aus dem IBUFG von CLKIN_IN
5
CLK0_OUT=>open,
6
LOCKED_OUT=>open);
Daran angeschlossen nun das zweite DCM:
1
CLKGen_16MHz_unit:CLKGen_16MHzPortmap(
2
CLKIN_IN=>CLK_ext_IBUF,-- Siehe oben
3
CLKFX_OUT=>iCLK_16MHz,-- BUFG
4
CLK0_OUT=>open,
5
LOCKED_OUT=>open);
Leider kommt immernoch obige Fehlermeldung (diesmal aber mit "Site C9").
Habe ich da irgendetwas falsch gemacht? Muss ich noch manuell einen
"BUFG" im DCM-Wizard anlegen?
Ich habe meinen Aufbau von zwei DCMs mal probeweise auf eine DCM
reduziert. In meinem Modell verwende ich also jetzt zwei Takte - den
originalen Eingangstakt (50 MHz) und einen davon abgeleiteten (16MHz).
Die oben beschriebene Fehlermeldung taucht nun nicht mehr auf. Dafür
werden meine Laufzeiten miserabel! Hier der Auszug:
Was ist hier nur los? Was bereitet ihm solche Probleme, einen zweiten
Takt zu routen? Wo kommen diese langen Laufzeiten her?
Wie macht ihr das in Euren Projekten, verwendet ihr da keine
abgeleiteten Takte? Gibt es irgendwelche Kniffs oder Tricks, die ich
beachten muss?
Steffen
Bei meinem letzten Design mit nur einem DCM war ein IBUF am Eingang und
ein BUFG am CLKFX. Ist es das, was Du meintest?
Kann man da noch mehr falsch machen?