Forum: FPGA, VHDL & Co. Timing-Problem auf Virtex 2 Pro FPGA


von Klaus Kanone (Gast)


Angehängte Dateien:

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!!

von spiegelau (Gast)


Lesenswert?

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.

von Klaus Kanone (Gast)


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?

von bko (Gast)


Lesenswert?

Was ist das für ein Fifo?
 + selbstgebaut -> Code zeigen
 + oder ein coregen fifo (asyncron oder syncron)

von Klaus Kanone (Gast)


Angehängte Dateien:

Lesenswert?

Der FIFO ist eher selbst zusammengebastelt...

von bko (Gast)


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...

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.