Programmierung eingebetteter Systeme

Allgemeines Aufgabe 1: Entwurf digitaler Schaltungen mit VHDL Das Tool für die Aufgabe ist Xilinx-ISE. Folgende Einstellungen gelten für das ML300 Board mit seinem VirtexIIPro FPGA:

Nach dieser Erstellung des Projekts wird ein sourcefile (vhdl module) neu angelegt und programmiert. Ein VHDL Manual liegt in D:\zip files
Weiterhin ist es essentiell, dass die Signale auf die richtigen Pins gemappt werden.

Benutzte Pins Clock: Pin B13

LEDs: siehe folgende Tabelle

Signal NameHeader PinLED Ref Des2VP7 PinBank NumberVoltage Tolerance
FPGA_GPIO_00 PIO.J10.1PIO.DS8T8Bank 33.3V
FPGA_GPIO_01 PIO.J10.2PIO.DS9P7Bank 33.3V
FPGA_GPIO_02 PIO.J10.3PIO.DS10R5Bank 33.3V
FPGA_GPIO_03 PIO.J10.4PIO.DS11R6Bank 33.3V
FPGA_GPIO_04 PIO.J10.5PIO.DS12P8Bank 33.3V
FPGA_GPIO_05 PIO.J10.6PIO.DS13R8Bank 33.3V
FPGA_GPIO_06 PIO.J10.7PIO.DS14T5Bank 33.3V
FPGA_GPIO_07 PIO.J10.8PIO.DS15T6Bank 33.3V
FPGA_GPIO_08 PIO.J10.9PIO.DS16R7Bank 33.3V
FPGA_GPIO_09 PIO.J10.10PIO.DS17T7Bank 33.3V
FPGA_GPIO_10 PIO.J10.11PIO.DS18G15Bank 02.5V
FPGA_GPIO_11 PIO.J10.12PIO.DS19AA13Bank 42.5V
FPGA_GPIO_12 PIO.J10.13PIO.DS20AB13Bank 42.5V
FPGA_GPIO_13 PIO.J10.14PIO.DS21AC13Bank 42.5V
FPGA_GPIO_14 PIO.J10.15PIO.DS22AB14Bank 52.5V
FPGA_GPIO_15 PIO.J10.16PIO.DS23AA14Bank 52.5V
FPGA_GPIO_16 PIO.J10.17PIO.DS24Y21Bank 62.5V
FPGA_GPIO_17 PIO.J10.18PIO.DS25Y22Bank 62.5V
FPGA_GPIO_18 PIO.J10.19PIO.DS26Y23Bank 62.5V
FPGA_GPIO_19 PIO.J10.20PIO.DS27Y24Bank 62.5V
FPGA_GPIO_20 PIO.J10.21PIO.DS28AA26Bank 62.5V
FPGA_GPIO_21 PIO.J10.22PIO.DS29W21Bank 62.5V
FPGA_GPIO_22 PIO.J10.23PIO.DS30W22Bank 62.5V
FPGA_GPIO_23 PIO.J10.24PIO.DS31W23Bank 62.5V
FPGA_GPIO_24 PIO.J10.25PIO.DS32W24Bank 62.5V
FPGA_GPIO_25 PIO.J10.26PIO.DS33W25Bank 62.5V
FPGA_GPIO_26 PIO.J10.27PIO.DS34W26Bank 62.5V
FPGA_GPIO_27 PIO.J10.28PIO.DS35V20Bank 62.5V
FPGA_GPIO_28 PIO.J10.29PIO.DS36V21Bank 62.5V
FPGA_GPIO_29 PIO.J10.30PIO.DS37V22Bank 62.5V
FPGA_GPIO_30 PIO.J10.31PIO.DS38V23Bank 62.5V
FPGA_GPIO_31 PIO.J10.32PIO.DS39V24Bank 62.5V

Die Zuweisung zwischen Signalen und Pins erfolgt zeilenweise in einem Constraint File (".ucf" File"). Das File muss also erstellt und dem Projekt zugefügt werden.
Syntaxbeispiel: NET "MyClock" LOC = "B13";

Board:

Folgende 'Dinge' werden gebraucht:

Programmierung

Die Programmierung erfolgt über JTAG (Boundary Scan). Bitte beachtet, dass ihr das FPGA in der Chain auswählt und nicht das Flash überschreibt. Leider muss das Downloadtool ("Impact") vom admin gestartet werden, da es unter Userrechten nicht funktioniert. Für Hinweise, wie man unter W2K Server ein Programm permanent 'suid' setzen kann, wären wir dankbar ;-)

Vorgehen im Impact: initialize chain, den Flash überspringen und dem FPGA den richtigen Bitstream zuweisen. Dann ''program''.

Wenn ein Download nicht möglich ist, muss u.U. das Board aus und wieder eingeschalten werden.

Sonstiges

Bitte nicht das vorinstallierte Linux starten, da es auf dem Board keine User Accounts gibt und das System dann von Root herunter gefahren werden muss. Das Linux startet nämlich von einem IBM MicroDrive und nicht aus dem ROM. Einfach ausmachen geht also nicht..


Aufgabe 2: Implementierung eines Programms für einen Mikrocontroller

Hinweise:

Das EDK macht folgendes: Zuerst baut es eine Hardwarekonfiguration aus VHDL Modulen. Diese sind im mitgelieferten Projekt schon definiert. Weiterhin compiliert es das C-Programm. Am Ende wird der Objekte in den im ersten Schritt entstandenen Bitstream eingebunden, und zwar so, dass er im BRAM liegt. Der PowerPC, der 'fest verdrahtet' im FPGA integriert ist, bootet dann daraus.

Das ganze geht weitgehend automatisch, der letzte Schritt heisst im Tool 'update bitstream'.

Aufpassen: Es entstehen 2 Bitfiles: system.bit und download.bit. Im ersten ist nur der FPGA-Code, im zweiten zusätzlich der eingebundene Objektcode. Also die richtige Variante wählen.


Aufgabe 3: Tic-Tac-Toe auf dem ML300

Hinweise:

Ab Aufgabe 3 wird auf einer Linux Maschine (139.18.4.89) gearbeitet, einloggen über ptty oder anderen ssh client. Account Name ist g<gruppe>, also z.B. g7. Alle wesentlichen files, also z.B. sourcen und doku, finden sich unter /tools/local/ppc auf der Linux Box.

Pfade

PATH mit
 /tools/local/v2pdk/tools/linux/xilinx/bin und
 /tools/local/v2pdk/tools/linux/gnu/bin
erweitern, gleiches für LD_LIBRARY_PATH
Sourcen: /tools/local/v2pdk/source/sw_old/apps/v2ptictac

Im Makefile ROOT = /tools/local/v2pdk/tools/linux/gnu/ und V2PRO = /tools/local/v2pdk setzen.
Das Preafix für Crosscompiler usw ist powerpc-eabi-

Debugger (XMD und powerpc-eabi-gdb)

Der xmd läuft leider nur auf der Windows Maschine. Daher muss das Binary (.elf file) mit pscp oder einem andern scp client von der Linux Maschine auf die Windows Maschine kopiert werden (sorry).

Der XMD findet sich unter, wenn man im Windows Startmenue für das EDK 'xygshell' auswählt. Dann erscheint eine bash, dort kann man dann xmd starten. Im XMD 'ppcconnect' aufrufen.
Das binary (.elf file) kann danach mit 'dow <file>' auf das target geladen werden, start mit 'run'.
Alternativ kann nach 'ppcconnect' in einer zweiten shell der powerpc-eabi-gdb gestartet werden. Dort dann einen target connect machen (xmd/tcp nach localport, port 1234) und dann file hochladen. Start mit dem 'finish' button, dann läuft das programm los..


Aufgabe 4: Linux auf dem ML300

Ein Tutorial über das Vorgehen sollte am Platz ausliegen. Es umfasst alle wesentlichen Schritte vom Anlegen einer Ramdisk bis zur Kernel Konfiguration.
Damit es nicht zu einfach wird, sind allerdings einige kleine Fehler eingebaut. Also nicht wundern, wenn das eine oder andere von Hand noch ändern ist oder hinzugefügt werden muss.
Anders als im Tutorial beschrieben muss die Image Datei für die Ramdisk nach /tmp kopiert und dann mit 'mount /ramdisk' gemounted werden.
Die im Tutorial erwähnte Busybox liegt schon für den PPC compiliert vor, muss also nicht neu gebaut werden (/tools/local/ppc/busybox).
Die Kernelsourcen liegen in /tools/local/ppc/kernel, ebenso die benötigte xparameter_300ml.h datei.

Pfade

PATH mit
 /tools/local/eldk/usr/bin erweitern


Aufgabe 5: Implementierung eines Programms unter Linux

Hinweise:

Das Vorgehen ist im Tutorial beschrieben, dass am Platz ausliegt (Aufgabe core led). Die core-led.c datei ist in /tools/local/ppc/kernel und enthält schon einen grossen teil des Codes.