Forum: FPGA, VHDL & Co. Brauche Hilfe beim Clockbuffer


von Trundle T. (shaheed)


Lesenswert?

Hallo Leute,

ich habe folgendes Probleme und brauche mal einen Rat. (und ich denke es 
gibt hier welche die mein Problem lösen können ;))

Also ich entwickle gerade ein Modul auf dem Spartan6 (lx75). Teil dieses 
Moduls ist unter anderem ein DDR2-Ram-Controller. Den hab ich mit dem 
MIG-tool entworfen und auf einfache weise mit meinem SP601-Evalboard 
getestet. Der funktioniert auch soweit. Mein Problem ist nun, dass der 
Ram-Core ne Clock brauch und meine restliche Logik ebenfalls mehrere 
Clockcore besitzen. Die Clock für den Ram-Core und für die Clockcores 
sollen von einem Pin gespeißt werden (das ganze Modul braucht 95% der 
I/O-Pins, hab also nicht umbedingt viele Pins über). Wenn ich nun meinen 
Ram-Core mit meiner restlichen Logik zusammenpacke, gibt es immer wieder 
Fehler entweder in der Synthese oder der Implementation durch die 
Clockbuffer. Einerseits sagt er ein Pin kann nicht 2 IBUF Instanzen 
treiben. Wenn ich aber als Clock für den Ram-Core nen Ausgang von einen 
der Clockcores verwende, sagt er mir ich darf nicht 2 Clockbuffer in 
Serie verwenden. Das heißt ich kann weder 2 Clockbuffer in serie noch 
parallel verwenden??? Kann doch nicht sein. Ich kenne mich leider mit 
den internen Clockprimitives noch nicht wirklich aus, aber es muss doch 
einen Weg geben, den Ram-Core und die restliche Logik von einem Taktpin 
zu speisen. Bin sehr dankbar für jeden Hilfsansatz.

Grüße Shaheed

von Bronco (Gast)


Lesenswert?

Schau mal in diesen Thread:
Beitrag "Spartan3: zwei DCMs in Serie schalten"

Da hatte ich ein ähnliches Problem.

von Karl Granate (Gast)


Lesenswert?

Eventuell verwechselts du da was:

Clockbuffer (Clock-tree driver) sollte BUFG oder BUFGMUX heissen,
die Input-buffer IBUF

MfG,

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

G. A. schrieb:
> Das heißt ich kann weder 2 Clockbuffer in serie noch
> parallel verwenden??? Kann doch nicht sein.
In diesem Fall mußt Du den Clockbuffer aus dem MCB manuell entfernen 
(memc?_infrastucture.vhd). Der Core kennt leider nur die Optionen 
"single ended" und "differential".

In diesem Fall kann es prinzipiell nicht schaden, den UG382 
durchzulesen.

Duke

von Sigi (Gast)


Lesenswert?

Das entspricht ie demgleichen Problem, 2DCMs von einem Clock-Pin
speisen zu lassen. Beim manuellen Instantiieren der DCMs/PLLs/etc.
kann man einen IBUFG für den CLK-Pin erzeugen und in beide DCMs
speisen. Beim Generieren per Generator kann im DCM-Menü angegeben
werden, ob Clock intern oder extern eingespeist wird (intern: ich
weiss jetzt nicht genau, ob dann ein BUFG für den Clock-Eingang
erzeugt wird. In diesem Fall muss dieser manuell entfernt werden.
Ist leider nicht ganz einfach, aber auch nicht so kompliziert).

Für MIG gibt's ebenfalls unterschiedliche Optionen: entweder werden
alle Clock-Signale vom MIG-Generator erzeugt werden (ob hier zwischen
internen/externen CLK-Signalen unterschieden wird:??) oder sie werden
durch den User erzeugt (in diesem Fall kannst du per 2.DCM wie Oben
alle Signale erzeugen und an dein MIG-Modul weiterreichen).

von Christian R. (supachris)


Lesenswert?

Sigi schrieb:
> (intern: ich
> weiss jetzt nicht genau, ob dann ein BUFG für den Clock-Eingang
> erzeugt wird.

Mittlerweile ist dann kein Buffer mehr dran, man muss dann allerdings 
selbst einen instanziieren. In älteren Versionen des CoreGen war das mit 
manueller Nacharbeit.

von Trundle T. (shaheed)


Lesenswert?

Danke für die schnellen Antworten,

ist der Ram-Core den noch sicher funktionstüchtig wenn ich einen Teil 
daraus manuell entferne?? Hast du das schon ausprobiert?

Variante 2 wäre also nicht den Clockwizard zu benutzen, sondern meine 
Clockstruktur selbst aufbauen, so dass ich von einem Pin sowohl Ram-Core 
als auch restliche Logik versorgen kann... hab ich das richtig 
verstanden??
kann mir jmd Links schicken wie man sich eine Clockstruktur selbst 
aufbaut?? Habe sowas noch nie gemacht. Ich hab zwar das xilinx Dokument 
für die Clockresources aber nen Beispiel für eine manuelle Clockstruktur 
hab ich da nicht gesehen.

nochmals Danke

von Sigi (Gast)


Lesenswert?

Ich kenn mich selbst weniger mit dem S6 aus, schau dir
aber mal ug382.pdf (S6 Clock Management) und das
vom CoreGenerator erstellte VHDL-Design eines DCMs
bzw. PLLs an (plus evtl. die VHDL Library Guide zum S6);
ist eigentlich sehr logisch aufgebaut. Liefert
ausreichend Einsicht in die ganze Clocking-Geschichte.

Zum Speicher-Controller: zum MIG-Design wird ein PDF
generiert (ug086.pdf??). Da sind sämtliche Optionen
gut erklärt.

von Sigi (Gast)


Lesenswert?

Zu selber ausprobiert..: Meine MIGs werden immer mit
selbsterstellten DCM-Controllern betrieben, funktionieren
alle prächtig (allerdings nur auf S3/V4/V5, andere
hatte ich noch nicht probiert).

von Trundle T. (shaheed)


Lesenswert?

also ich denke ich habs geschafft (zummindest implementiert ISE mein 
code).

für alle die es interessiert, ich hab die Ausgangsclock von dem 
Ram-Controller benutzt und diese an die Clockmodule weitergeleitet. Beim 
Clocking-Wizard hab ich noch die Einstellung "no Buffer" verwendet so 
das kein Input-Buffer implementiert wurde und jetzt funktioniert es.

Danke für eure Hilfe

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.