Gecko3 - CCC Event Weblog
Gecko3 - CCC Event Weblog
Gecko3 - CCC Event Weblog
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