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!!
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.
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?
Was ist das für ein Fifo? + selbstgebaut -> Code zeigen + oder ein coregen fifo (asyncron oder syncron)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.