AGBAboutImpressum

Flashprogrammierung

Zur Programmierung des Flash Speichers wird auf der PC Seite (Host) das Programm "Flash Programmer" benutzt. Mit diesem Programm ist der Anwender in der Lage beliebige Daten in die von ihm gewünschte Speicherbereiche des Flash Speichers zu programmieren. Der Entwicklungskit wird auf anderer Seite mit einem Microblaze bzw. PowerPC System (Slave) konfiguriert, welches die Anweisungen vom Host ausführt. Das Ganze läuft in folgenden Einzelschritten ab:

  1. Der Anwender muss auf dem Board die Konfiguration #0 (alle DIP-Schalter in OFF Stellung) auswählen und diese in den FPGA laden (SW6 kurz drücken).
  2. Nach dem Start von "Flash Programmer" und des Microblaze / PowerPC müssen zuerst die beiden miteinander synchronisiert werden. Dies geschieht nachdem der Anwender den korrekten COM Port eingestellt und den Knopf "synchronize" gedrückt hat. Er wird von dem "Flash Programmer" aufgefordert Reset Taster (SW1, oberster Taster des Tasterkreuzes) zu drücken. Dadurch wird ein Reset des Microblazesystems ausgelöst. Falls nach etwa 10 Sekunden keine Erfolgsmeldung kommt, sollte man den Taster SW1 nochmals kurz drücken.
  3. Slave kopiert die Daten aus dem Flash in das SDRAM (Flash bleibt unverändert).
  4. Wenn der Anwender sich für eine Datei und die Startadresse entschieden hat (Knopf "import new file"), wird diese vom Host zum Slave geschickt. Dieser speichert die Daten ab der gewünschten Adresse im SDRAM. Die ursprünglichen Daten in SDRAM werden überschrieben. Dieser Schritt kann beliebig oft wiederholt werden, um z.B. in Flash mehrere Konfiguration auf ein Mal zu programmieren.
  5. Wenn der Anwender den Knopf "program flash" gedrückt hat, dann wird zuerst der gesamte Flash Speicher gelöscht um anschließend mit dem Inhalt von SDRAM programmiert zu werden.

{short description of image}

Mit den DIP Schaltern können 16 verschiedene FPGA-Konfigurationen ausgewählt werden. Die ausgewählte Konfiguration wird entweder nach dem anlegen der Versorgungsspannung oder nach dem Drücken des RESET Tasters in den FPGA geladen. Nur wenn die gelbe LED nicht leuchtet, dürfen die Schalterstellungen verändert werden.

Flashspeicherbelegung Virtex II Pro Board

Mit den DIP Schaltern können 16 verschiedene FPGA-Konfigurationen ausgewählt werden. Die ausgewählte Konfiguration wird entweder nach dem anlegen der Versorgungsspannung oder nach dem Drücken des RESET Tasters in den FPGA geladen. Nur wenn die rote LED nicht leuchtet, dürfen die Schalterstellungen verändert werden. Für eine Konfiguration von XC2VP7 werden 4.485.472 Bits benötigt. Die zugehörigen Adressen und Schalterstellungen sind:

 Konfiguration  Adresse im Flash (hex)
 Schalterstellung
 #0  0x000000  {short description of image}
 #1  0x100000  {short description of image}
 #2  0x200000  {short description of image}
 #3  0x300000  {short description of image}
 #4  0x400000  ...
 #5  0x500000  ...
 #6  0x600000  ...
 #7  0x700000  ...
 #8  0x800000  ...
 #9  0x900000  ...
 #10  0xA00000  ...
 #11  0xB00000  ...
 #12  0xC00000  ...
 #13  0xD00000  ...
 #14  0xE00000  {short description of image}
 #15  0xF00000  {short description of image}

Die Adressen der Konfigurationen #0-#2 sind mit Beispielanwendungen belegt:

  • Konfiguration #0 ist das PowerPC System, welches zur Programmierung des Flash Speichers benötigt wird. Sie kann als einzige nicht umprogrammiert werden. Sollte der Anwender im "Flash Programmer" eine Adresse im Bereich von 0x00000 bis 0xfffff eingeben, wird dies mit einer Fehlermeldung quittiert. Taster 1 (SW1) löst ein Reset des PowerPC Systems aus.
  • Konfiguration #1 enthält ein PowerPC System welches einen SDRAM Test durchführt. Die Ausgabe erfolgt über die USB Schnittstelle. Taster 1 (SW1) löst ein Reset des PowerPC Systems aus.
  • Konfiguration #2 enthält ein System mit dem die USB Ausgabe in VHDL demonstriert wird. Beim Drücken einer der vier Cursortasten erfolgt eine entsprechende Meldung.
  • JTAG Konfiguration

    In einigen Fällen kann der Zugriff auf FPGA über JTAG notwendig sein, wenn man z.B. ChipScope benutzt. Deshalb ist auf dem Board eine Stifteleiste mit den JTAG Signalen vorhanden. Der entsprechende JTAG Adapter ist relativ einfach aufgebaut: Schaltplan . Die Konfiguration über JTAG läuft wie im diesem PDF-Dokument beschrieben ab.

    Quarzoszillator

    Auf dem Board ist eine Bestückungsmöglichkeit für einen weiteren Quarzoszillator vorhanden. Dies sollte in der Regel dann erfolgen, wenn die gewünschte Frequenz nicht aus den bereits vorhandenen 80 MHz erzeugt werden kann. Die passenden Quarzoszillatoren können u. a. bei Farnell In One bezogen werden. Farnell beliefert auch Privatkunden (passende Angaben vorausgesetzt).

     Takt  Bestellnummer  Preis
     4 MHz  424-5891  7.05 €
     8 MHz  424-5908  7.05 €
     10 MHz  424-5910  7.05 €
     12 MHz  424-5921  7.05 €
     12.288 MHz  424-5933  7.05 €
     14.31818 MHz  424-5945  7.05 €
     16 MHz  424-5957  7.05 €
     16.384 MHz  424-5969  7.05 €
     20 MHz  424-5970  7.05 €
     24 MHz  424-5982  7.05 €
     32.768 MHz  424-5994  7.05 €
     40 MHz  424-6007  7.05 €
     50 MHz  424-6019  7.05 €
     60 MHz  424-6020  7.05 €
     80 MHz  424-6032  6.60 €
     100 MHz  424-6044  13.10 €
     106.25 MHz  424-6056  13.10 €
     125 MHz  424-6068  15.20 €

    Stolpersteine

    Hier sind einige Hinweise und Problemlösungen zusammengefasst, die bei der Arbeit mit EDK und dem Entwicklungskit durchaus ein paar Tage Fehlersuche ersparen können. Da die Software laufend verbessert wird (Xilinx sei dank!), kann nicht davon ausgegangen werden, dass die nachfolgenden Tipps ihre Gültigkeit für immer behalten bzw. auf anderen Installationen nachvollzogen werden können. Ich bin außerdem für jegliche weitere nützliche Hinweise und Tipps besonders dankbar, die werde ich hier einreihen.

    • Die Flankensteilheit aller SDRAM Ausgänge muss auf "FAST" gesetzt werden, ansonsten kommt es zu Fehlern bei den Zugriffen auf das SDRAM.
    • Es muss beachtet werden, dass bei den Cores von Xilinx das MSB (most significant bit) fast immer Bit Null (a0, d0 usw.) ist. Bei den auf dem Entwicklungskit eingesetzten Speicherbausteinen ist diese Reihenfolge umgekehrt.
    • Wenn GEM-Core (Generic External Memory) zur Ansteuerung von Flash über Base System Builder Wizard eingebunden wird, dann erzeugt dieser trotz dessen, daß man explizit eine Speicherbreite von 16 Bit angegeben hat, einen 32 Bit breiten Datenbus. Für den Adressbus gilt das gleiche.
    • Von dem Adressbus des GEM-Cores werden zur Ansteuerung des Flashes nur 21 Adressleitungen benötigt. Es reicht nicht am Anfang der MHS Datei die benötigten 21 Leitungen mit den Pins zu verbinden. Das funktioniert so nicht (aus welchen Gründen auch immer). Man muss eine "util_bus_split" Komponente benutzen. Diese ist ein VHDL Hilfskonstrukt, welches keine Ressourcen belegt und nur für solche Fälle entworfen wurde.
    • Bei den Zugriffen auf das Flash (vor allem, wenn man Befehlssequenzen zum Programmieren übermittelt) sind manchmal mehrere Schreibzugriffe auf eine bestimmte Adresse (z.B. 0x555) notwendig. Wenn Compileroptimierungen eingeschaltet sind, werden alle Schreibzugriffe, bis auf den letzten wegoptimiert. Hier am besten Compileroptimierungen ausschalten.
    • Wenn man eigene IP Komponenten erzeugt, dann wird von dem "Create-Import Peripheral" Tool ein Grundgerüst aus VHDL Dateien erzeugt. Zu beachten ist, dass standardmäßig alternativer Schreibmodus "posted write" eingeschaltet ist. Dieser erzwingt Zugriffe mit einer Dauer von einem Takt. Außerdem wird das Acknowledge Signal ignoriert. Dieser Modus muss ausgeschaltet werden, falls die Zugriffe über Acknowledge Signal gesteuert werden sollen. Dazu muss "ZERO_IP2Bus_PostedWrInh" auf Eins gesetzt werden.
    • Trotz dessen, dass man bei den eigenen EDK Projekten in den Projekteinstellungen den Pfad für "Peripheral Repository Directory" korrekt angibt, findet EDK die notwendigen Treiber nicht. Am besten Treiber und Core in das EDK Installationsverzeichnis von Hand kopieren.
    • In den von EDK erzeugte Dateien "system.bit" und "system.bin" sind die BRAMs nicht initialisiert! D.h. beim Download dieser Dateien auf das Entwicklungskit passiert rein gar nichts! Zum Programmieren muss die Datei "download.bit" benutzt werden!
    2005 - 2017 Valerij Matrose