Forum: FPGA, VHDL & Co. FPGA: Negation des Taktes


von Kristian K. (kristiank)


Lesenswert?

Hallo,

ich habe ein FPGA-Design auf einem XC2VP70, für welches ich nicht 
genügend Clockbuffer (bufg) habe. Indirekte Folge dessen ist, dass ich 
z.Z. einen Takt invertiere, um ihn phasenverschoben auf 180° zu 
bekommen. Dass das ganze keine schöne Sache ist, ist mir klar.

Nun zum Problem: In einem vereinfachten Design funktioniert das ganze 
wunderbar. Der Takt wird für einen Speicherkontroller benötigt. Ich habe 
ein Testprogramm geschrieben, welches Daten in meinen Speicher schreibt 
und diesen anschließend ausliest und vergleicht. Wenn alles korrekt war, 
dann geht eine LED an.
Ein anderer Teil des Designs berechnet Daten, die in den Speicher 
geschrieben werden sollen. Mache ich den Umweg über den Speicher nicht, 
dann kann ich die Daten korrekt versenden (über Netzwerk). Füge ich den 
Speicher hinzu, dann sind die Daten fehlerhaft. Meine erste Idee war 
jetzt, dass mein Speicherkontroller vielleicht doch nicht so toll 
arbeitet. Ich habe ein Chipscope-Modul am Eingang des Speichers 
hinzugefügt und musste feststellen, dass jetzt falsche Daten IN DEN 
Speicher geschrieben werden. Für die Module vor dem Speicher habe ich 
bereits eine "Post-Place-Simulation" durchgeführt. Alles wunderbar. Auf 
dem FPGA aber nicht (Chipscope). Es ist also in irgendeiner Form eine 
Rückwirkung von Speichercontroller auf die Module davor vorhanden.

Die üblichen verdächtigen: "unconstrainted paths", timing score, reset 
kann ich ausschließen. Das ganze Design läuft mit minimal 100MHz (ein 
sind noch 125MHz für eine Netzwerkschnittstelle sowie 300MHz für den 
PowerPC drin).

Es werden nur eine handvoll FlipFlops an den invertierten Takt 
angeschlossen. Wo kann ich noch suchen? Welche Constraints kann ich ggf. 
setzen, damit es dennoch funktioniert? Welche Probleme kann ein solcher 
Takt verursachen?

Vielen Dank schonmal!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> dass jetzt falsche Daten IN DEN Speicher geschrieben werden.
Sind alle Daten falsch, oder nur ab und zu?

> Wo kann ich noch suchen?
Wenn du tatsächlich 8 Takte verwendest: An den Taktdomänen-Übergängen. 
Da ist sicher der eine oder andere noch nicht ganz synchron zum 
Gegenstück.  :-o

von Kristian K. (kristiank)


Lesenswert?

>Sind alle Daten falsch, oder nur ab und zu?
Es sind "sehr viele" Daten falsch. Im Schnitt jedes 10 Byte würde ich 
schätzen.

>Wenn du tatsächlich 8 Takte verwendest: An den Taktdomänen-Übergängen.
>Da ist sicher der eine oder andere noch nicht ganz synchron zum
>Gegenstück.  :-o
Tatsächlich läuft die Datenverarbeitung in einer Taktdomöne. Ich brauche 
für den Speicher drei zusätzliche Taktdomänen (DDR2 SRAM), für den 
Netzwerkcontroller zwei (jeweils 125MHz), für den Eingangstakt eine 
(100MHz) und für den Prozessor (300MHz) eine. Problematisch ist in 
meinem Design, dass die Virtex-II DCMs nur 4 Signale treiben können und 
dass ich für zusätzliche DCMs immer Clockbuffer brauche.
Die Taktdomänen der Module untereinander sind an den Stellen, wo es 
nötig ist, mit Asynchronen FIFOs entkoppelt. Handshake-Signale werden 
entsprechen mit Registern zwischen den Taktdomänen überführt.

Ich hätte da noch eine zusätzliche Frage. Ich würde das ganze Design 
gern einmal mit Mentor Precision übersetzen. Gibt es eine einfache 
Möglichkeit, Precision XST im XPS (oder EDK) zu integrieren, d. h. ohne, 
dass ich alles Scripte umschreiben oder neu schreiben muss?

Gruß,
Kristian

von Chef (Gast)


Lesenswert?

"Handshake-Signale werden entsprechen mit Registern zwischen"
"den Taktdomänen überführt"
Wenn das manuell geschieht, gibt es manchmal Fehlinterpretationen, wann 
ein Dateum gültig wird. Ich übergebe solche Sigs immer über den Ffof: 
Eine Fifo-pie für Hin und ein für Rück.

von Kristian K. (kristiank)


Lesenswert?

>Ich übergebe solche Sigs immer über den Ffof:
>Eine Fifo-pie für Hin und ein für Rück.
Das hab' ich jetzt so schnell nicht ganz verstanden.

von Christian R. (supachris)


Lesenswert?

Kristian K. wrote:
>>Ich übergebe solche Sigs immer über den Ffof:
>>Eine Fifo-pie für Hin und ein für Rück.
> Das hab' ich jetzt so schnell nicht ganz verstanden.

Ganz einfach: Die sauberste Möglichkeit, Signale zwischen 2 Taktdomänen 
zu übertragen ist, sie durch ein FIFO zu schicken. Das hat 2 Takte (1 
mal Lesen, 1 mal Schreiben) und somit ist garantiert, dass die Signale 
auf beiden Seiten synchron zum jeweiligen Takt sind.

von neunürnberger (Gast)


Lesenswert?

und wenn man es richtig machen will, muss das fifo 4 stufen haben, beim 
negierten takt 3

von Kristian K. (kristiank)


Lesenswert?

Ich habe den Fehler jetzt offenbar an einer ganz anderen Stelle im 
Design gefunden. Der FIFO Generator v4.3 scheint mir eine fehlerhafte 
FIFO erzeugt zu haben: Ich habe die FIFO mit "Full Flags Reset Value=1" 
erzeugt, d. h. die FULL-Flags sollten beim Reset auf "1" gehen. Das 
haben sie offenbar nicht immer gemacht. Die Umstände unter denen dieser 
Fehler auftritt konnte ich bis jetzt in der Simulation nicht 
nachstellen, denn dort trat der Fehler nicht auf (struktuelles als auch 
Verhaltensmodell). Mit der selben FIFO aus dem FIFO Generator v4.4 tritt 
der Fehler nicht auf (im Xilinx IP Release Notes Guide konnte ich keinen 
Hinweis darauf finden).

Es ist also keine indirekte Folge meines unschönen invertierten Taktes.

Bei der Überführung zwischen den Taktdomänen habe ich bis jetzt immer 
nur für die Daten FIFOs verwendet. Das mit den FIFOs für die 
Handshake-Signale werde ich mal ausprobieren, wenn ich wieder einen 
Fehler habe!

Danke!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> ... FIFO Generator v4.3 scheint .. eine fehlerhafte FIFO erzeugt ...
> ... FIFO aus dem FIFO Generator v4.4 tritt der Fehler nicht auf.
Das würde mir ein echt mulmiges Gefühl hinterlassen....

Fifo sind soooo neu ja nun auch wieder nicht :-o

von Neo (Gast)


Lesenswert?

aber sie werden in jedem fpga anders gebaut - hatte auch schon mal 
timing aerger mit fifos. manuell gebaute liefen und lösten das problem

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.