25.12.2013 Aufrufe

Gecko3 - CCC Event Weblog

Gecko3 - CCC Event Weblog

Gecko3 - CCC Event Weblog

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

6.4. FPGA Konfiguration<br />

6.4. FPGA Konfiguration<br />

Es gibt mehrere Möglichkeiten den FPGA mit einem Mikrokontroller zu konfigurieren. Wir<br />

wählten dafür den Slave Parallel Mode, da unser FPGA über 16 Datenleitungen mit dem<br />

EZ-USB FX2 verbunden ist. Je nach Literatur wird diese Konfigurationsart auch Select-<br />

MAP Mode genannt und ist im Application Note von Xilinx [NP02] erklärt. Wichtig ist zu<br />

beachten, dass in diesem Modus die Daten Byte-Swapped über die Datenleitungen gesendet<br />

werden müssen. Dieses Problem wurde mit einer Hardwareänderung gelöst und ist im<br />

Unterkapitel 3.1 schon beschrieben.<br />

Der FPGA kann von der Firmware über zwei Wege konfiguriert werden. Entweder man<br />

sendet die Konfiguration direkt vom Host über USB zum FPGA oder der EZ-USB FX2 wird<br />

im stand-alone Betrieb gestartet. In diesem Fall wird er die Firmware über I 2 C in sein RAM<br />

laden. Anschliessend beschreibt die Firmware in der Initialisierungsphase den FPGA mit<br />

dem Inhalt des SPI Flashs. Dieser Konfigurationsvorgang wird im Kapitel 6.5 behandelt.<br />

Dieses Kapitel beschreibt nur die direkte Konfiguration vom Host.<br />

Die Konfigurationssequenz wird mit einem Vendor Request vom Host gestartet. Um welchen<br />

Request es sich dabei handelt, ist im Unterkaptiel 6.8 beschrieben. Manche Pins und<br />

Register werden vom GPIF und der Konfigurationsfunktion verwendet. Per Default ist der<br />

EZ-USB FX2 für die Verwendung des GPIFs initialisiert. Deshalb wird als erstes eine kleine<br />

Funktion aufgerufen, welche den EZ-USB FX2 zum Konfigurieren des FPGAs initialisiert.<br />

Erst jetzt wird die eigentliche Funktion für die Konfiguration aufgerufen.<br />

Zuerst bringt die Firmware den CS B und den RDWR B Pin low. Mit dem anschliessenden<br />

Löschen des Prog B Pins resetet man den FPGA. Nachdem Prog B wieder gesetzt wird, geht<br />

der FPGA in den Configuration Load Modus. Dieser Zustand signalisiert der Spartan 3 mit<br />

dem setzen des INIT B Pins. Nun ist er bereit die Konfigurationsdaten zu empfangen.<br />

Während dieser Phase bleibt die Firmware in dieser Funktion, bis die Anzahl der vom<br />

USB empfangenen Byte der Grösse der FPGA Konfigurationsdatei entspricht. Diese Datei<br />

sendet die Hostsoftware ohne Header und hat somit für den selben FPGA Typ immer die<br />

selbe Länge. Diese Länge muss jedoch im Sourcecode definiert werden. Nun wird festgestellt<br />

ob Daten im EP2 vorhanden sind bzw. der Host neue Daten gesendet hat. Wenn dies zutrifft,<br />

liest die Firmware das Byte Counter Register des EP2 FIFO Buffers ein und aktualisiert den<br />

Zähler, der die empfangenen Byte erfasst. Danach wird das erste Byte im FIFO Buffer an den<br />

Datenbus gelegt. Bei einem Impuls an der CCLK Leitung liest der Spartan 3 das Byte ein.<br />

Um das nächste Byte im FIFO Buffer auf den Datenbus zulegen, muss die Firmware keine<br />

Adresse inkementieren. Dies geschieht mit dem Autopointer bei jedem Zugriff automatisch.<br />

Unsere Firmware arbeitet beim EP2 und EP4 ausschliesslich mit diesem Feature. Die genaue<br />

Funktion des Autopointers ist im Technical Reference Manual [Cyp06] beschrieben.<br />

Diese Sendesequenz wird nun solange wiederholt bis der Inhalt des FIFO Buffers übertragen<br />

ist. Sollte der FPGA den Busy Pin setzten, ist ein weiterer Clock-Impuls nötig und<br />

solange zu wiederholen, bis er wieder bereit ist neue Daten anzunehmen. Der Busy-Check<br />

ist optional, da der FPGA mit einem schnelleren Takt arbeitet als der EZ-USB FX2. Somit<br />

wird es wahrscheinlich nie vorkommen, dass der Mikrokontroller den Spartan 3 überfordert.<br />

Doch um eine zuverlässige Konfiguration zu garantieren haben wir die Abfrage des Busy<br />

Pins dennoch implementiert.<br />

Der Busy-Check wird uns jedoch am Ende der Konfiguration zum Verhängnis. Die letzten<br />

16 Byte der Datei sind Dummy-Information. Deshalb ist der FPGA schon vor dieser Sequenz<br />

fertig konfiguriert und treibt den Busy Pin, in Abhänigkeit der Pinbelegung des VHDL<br />

Project Report 21

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!