Stand: 06.09.2010


Leitfaden
leitfaden-10.pdf 1.0 Aktueller Praktikumsleitfaden

Version History:
  • 1.0: Erste Version.
Weitere Input-Bilder für die Phasen 3/5/6/9/10
ueberraschung.pgm 1.0 Überraschung
Habt Ihr weitere? Immer her damit! (per Mail an gaedke@eis.cs.tu-bs.de)
FAQ
Im Master-Mode kommt in der RTL-Simulation kein IRQ Dies kann folgende Ursachen haben:

1. Eines der MARC-Interface-Signale hat auch nach einem Reset noch den Wert x oder z. Dies müsst Ihr unbedingt vermeiden.

2. Die Streams sind mit ihrer Verarbeitung noch nicht fertig, d. h. sie wurden auf eine Anzahl zu lesender / schreibender Datenworte programmiert, die schlicht noch nicht tatsächlich gelesen / geschrieben wurde. => Streams korrekt programmieren bzw. Daten komplett verarbeiten

3. Lese- und Schreibstrom arbeiten auf sich überlagernden Speicherbereichen. Ihr solltet sicherstellen, dass jeder Strom exklusiv auf seinem Bereich arbeitet.
Linux-Kernel stürzt beim Booten ab ("Aieee, killing..."") Dieses Problem kann 2 Ursachen haben.

1. Zu schlechtes Timing des Gesamt-FPGA-Designs, weil kritische Pfade in Eurer user-Schaltung zu lang sind. Dies solltet Ihr als erstes checken. Dazu "make timing" aufrufen und schauen ob der kritische Pfad unter 10 ns liegt. Ist das der Fall, bei 2. weiterlesen; ansonsten kritische Pfade im user-Design verkürzen (Vorberechnung, Parallelisierung, Pipelining).

2. Sollte das Problem immer noch bestehen, liegt die Ursache vermutlich in fehlenden Clock-Constraints im PCI-Referenz-Design von Xilinx, auf dem das Design der Praktikumsumgebung aufbaut. (Um das korrekte Ansprechen des DDR-Speichers hinzukriegen, sind dort etliche Kniffe eingebaut, die anscheinend nicht korrekt constrained sind.) Durch Experimentieren mit den Kommandozeilen-Optionen der Xilinx-Tools (die bei einem "make linux" intern aufgerufen werden) kann man das Problem in den meisten Fällen in den Griff kriegen. Dazu nach Rücksprache mit den Hiwis im Makefile folgendes ausprobieren (nacheinander, nicht gleichzeitig):
(a) zu den MAPOPTS und den PAROPTS jeweils folgendes hinzufügen: -xe c
(b) zu den MAPOPTS folgendes hinzufügen: -k 8
Dabei beachte man, dass (a) zu einer deutlich längeren Verarbeitungszeit führen kann, und dass (b) nicht defaultmäßig benutzt werden sollte, weil es sich für einige Designs auch nachteilig auswirken kann.

3. Sollte all das Euch nicht weiterhelfen, schickt bitte einen Error-Report mit allen Informationen, die nötig sind um das Problem zu reproduzieren an die Hiwis und den Betreuer des Praktikums.
Nach Starten von ./main auf dem ACE-M3 kommt ein Segmentation Fault Irgendwas an Eurem C-Code ist faul: Ihr greift irgendwo auf Speicher zu, den Ihr nicht reserviert habt. Z. B. kann das passieren, wenn ein Pointer in einer Schleife so weit inkrementiert wird, dass er über den Bereich eines angelegten Arrays oder eines mit malloc reservierten Speicherbereichs hinauszeigt, und über ihn dann trotzdem gelesen oder geschrieben wird.
./main startet ein Master-Mode-Programm und hängt sich auf, d. h. das Programm ist irgendwie in einer Endlosschleife Dies deutet darauf hin, dass kein IRQ von der user-Schaltung an die Software gesendet wird. Die Software macht mit der Verarbeitung aber erst weiter, wenn dieser IRQ kommt (d. h. wenn die Hardware ihre Berechnungen beendet hat). Wenn in ./main kein IRQ kommt, obwohl in der RTL-Simulation ein IRQ kam, könnt Ihr folgendes checken:

1. Für die RTL-Simulation genau die Input-Daten verwenden, die Ihr auch in der ./main verwendet.

2. Evtl. startet Ihr in ./main die user-Schaltung mehrmals an, aber irgendwelche internen regs wurden nicht richtig resettet, sodass die Schaltung beim 2. Start nicht das macht, was sie soll. Auch diesen Fall könnt Ihr in der RTL-Simulation nachbauen.