Timing-Problem auf Virtex 2 Pro FPGA

Gast #2411061
Lesenswert?
• ▲
▼
Moin Moin!

Wir sitzen seit längerer Zeit an einem Problem an unserer aktuellen 
Aufgabe. Auf einer Virtex 2 Pro FPGA-Plattform haben wir ein 
VHDL-Programm zur asynchronen Kommunikation implementiert. Wie auf dem 
Blockschaltbild zu sehen ist, erzeugt ein Produzent byteweise 
Zufallszahlen die dann in einem 16 Byte großen FIFO gespeichert werden. 
Im Consumer werden diese wieder ausgelesen und mit den dort erzeugten 
Zufallszahlen (selbes Generatorpolynom wie im Producer) verglichen und 
zur Kontrolle auf einer Sieben-Segement-Anzeige ausgegeben. Die Enable 
Eingänge des Producers und des Consumers werden von den FULL und EMPTY 
Signalen des FIFO invertiert angesteuert. Stimmen im Consumer die Daten 
nicht überein wird eine ERROR LED angeschaltet.
Das ganze System funktioniert bei kleineren Taktfrequenzen im 
kHz-Bereich, doch leider nicht im MHz-Bereich. Bis 50 MHz muss es später 
(morgen) funktionieren. Erwähnt sei noch, dass die beiden Take von 
ausserhalb natürlich zuerst auf IBUFG und BUFG Treiber gegeben werden. 
Auffällig war außerdem, dass es längere Zeit (etwa 10 Sekunden) 
funktioniert, wenn der Producer schneller getaktet ist, als der 
Consumer. Umgekehrt erscheint die ERROR LED sehr viel schneller.

Es muss irgendein generelles Timing-Problem sein. In unserer 
ModelSim-Simulation können wir die Fehler nicht nachstellen. 
Entsprechend ratlos sind wir zur Zeit. Jede Idee ist herzlich Willkommen 
:)

Vielen Dank!!
Angehängte Dateien:
Gast #2411320
Lesenswert?
• ▲
▼
spiegelau schrieb:
> Das Problem liegt wohl zwischen consumer und seven_segment, da hier eine
> Verbindung zwischen zwei unterschliedlichen Clock-Domains besteht. Mach
> 2 DFF mit sysclk als Takt dazwischen.

Das es da zu Problemen kommen kann leuchtet mir ein. Aber das dürfte 
doch eigentlich keinen Einfluss auf das ERROR-Signal haben, das im 
CONSUMER erzeugt wird, oder?
Gast #2411558
Lesenswert?
• ▲
▼
aha:
>Der FIFO ist eher selbst zusammengebastelt...

und er soll mit zwei Takteingängen laufen, je einem read und
einem write clock!
Das geht evtl. wunderbar in der Simulation, am FPGA
kommen aber noch Laufzeiteffekt hinzu welche die Funktion
instabil machen, hierzu mehr Literatur:
http://www.xilinx.com/support/documentation/application_notes/xapp175.pdf
http://www.sunburst-design.com/papers/CummingsSNUG2002SJ_FIFO2.pdf

Nun da die Schaltung "morgen" laufen soll, meine Empfehlung:
1) Nur einen Takt verwenden
2) Mit dem Coregenerator von Xilinx ein Asyncrones Fifo
   generieren lassen.

Einen Fifo mit Taktübergängen bauen geht nicht in einer Nacht,
meine ich sagen zu können...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren