mikrocontroller.net

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


Autor: Kristian K. (kristiank)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kristian K. (kristiank)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chef (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kristian K. (kristiank)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: neunürnberger (Gast)
Datum:

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

Autor: Kristian K. (kristiank)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Neo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.