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:
- 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).
- 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.
- Slave kopiert die Daten aus dem Flash in das SDRAM (Flash
bleibt unverändert).
- 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.
- 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.

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 |
 |
| #1 |
0x100000 |
 |
| #2 |
0x200000 |
 |
| #3 |
0x300000 |
 |
| #4 |
0x400000 |
... |
| #5 |
0x500000 |
... |
| #6 |
0x600000 |
... |
| #7 |
0x700000 |
... |
| #8 |
0x800000 |
... |
| #9 |
0x900000 |
... |
| #10 |
0xA00000 |
... |
| #11 |
0xB00000 |
... |
| #12 |
0xC00000 |
... |
| #13 |
0xD00000 |
... |
| #14 |
0xE00000 |
 |
| #15 |
0xF00000 |
 |
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!
|