Übungsaufgaben zur Entwicklung von PCI-Targets und -Mastern in VHDL und die Kommunikation mit der PCI-Karte auf dem PC unter Linux. |
In diesem Kapitel wird beschrieben, wie man an das LogiCore PCI Interface von der Xilinx-Website herunterlädt und ein Projekt-Grundgerüst im Project Navigator der Entwicklungsumgebung Xilinx ISE 5.1i erstellt.
Dieser Abschnitt gibt einen kurzen Überblick über die für das LogiCore PCI Interface relevanten Teile des PCI Configuration Headers und vermittelt so einen Eindruck von den Möglichkeiten und technischen Features des LogiCore PCI Interfaces (und PCI-Geräten im allgemeinen).
Diese HTML-Seite enthält die Beschreibung des Adapters, mit dem der institutseigene Agilent 1671G Logic Analyzer an das PCI-Entwicklungsboard angeschlossen werden kann. Die Platine bietet außerdem noch zwei weitere Eingabetaster sowie vier Leuchtdioden zur Signalausgabe.
Das Projekt "Board-Test" ist ein einfaches minimales Single Transfer PCI Target, das die User-LED, die 7-Segment-Anzeigen und die DIP-Schalter des Entwicklungsboards ansteuert. Im weiteren wird ein C-Programm vorgestellt, das über /dev/mem auf die PCI-Karte zugreift. Der letzte Schritt in diesem Abschnitt ist dann die Programmierung eines Kernelmoduls, das die ioctl()-Funktion implementiert, um Userspace Programmen den Zugriff auf die Karte zu ermöglichen.
Der hier vorgestellte Entwurf ist ein PCI Target, das den Zugriff auf 4 KByte des Spartan-II internen statischen RAMs realisiert. Das erste Design ist ein Single Transfer PCI Target, das - abgesehen von dem RAM-Modul - genau so aufgebaut ist wie der Entwurf "Board-Test". Im nächsten Schritt das Design auf ein Burst Transfer PCI Target erweitert. Für die Tests im PC gibt es wiederum zwei Programmierungsvorschläge: Zwei Userspace-Programme, die über /dev/mem direkt auf den Kartenspeicher zugreifen und einen Kerneltreiber, der die read- und die write-Funktion auf der Gerätedatei implementiert.
Dieses Beispiel demonstriert die Interrupt-Funktion auf Hardware- und auf Treiberseite. Per Tastendruck (User-Button auf der PCI-Karte) wird ein Interrupt ausgelöst, den der Interrupthandler des zugehörigen Treibers mit der Ausgabe einer Meldung quittiert.
Der nächste Entwurf ist ein einfacher Single Transfer PCI Initiator (PCI-Busmaster) und zugleich ein Beispiel für den Zugriff auf I/O-Ports und Bytemaskierung. Sobald sich die DIP-Schaltereinstellung auf dem PCI-Board ändert, fordert die Karte selbstständig den Bus an und überträgt das durch die DIP-Schalter dargestellte Byte an den Daten-I/O-Port der parallelen Schnittstelle des Rechners.
Dieses Projekt implementiert einen vollständigen PCI-Initiator (Master) mit Burstunterstützung für DMA (Direct Memory Access). Das Gerät verfügt über einen 4 KByte großen Puffer, in den es die über den PCI-Bus angeforderten Daten abspeichern oder den Pufferinhalt über den PCI-Bus an ein anderes PCI-Gerät (Hauptspeicher) senden kann. Nach Abschluss eines Transfers wird ein Interrupt ausgelöst, um den Teiber zu informieren.
[Xilinx PCI-Tutorial]
Das Dokument besteht aus Vortragsfolien. Der erste Teil (Seiten 1 bis 80) gibt einen guten Überblick über den PCI-Bus und seine Möglichkeiten. Der zweite Teil (Seiten 81 bis 100) geht auf die PCI Lösungen und Angebote von Xilinx ein (Design Flow, Beispiele, ...) und schafft so ein Problembewusstsein für eigene PCI-Anwendungen.
[Logic Core PCI Design Guide] (Datei docs\design.pdf im LogiCore PCI Interface Paket)
Dokumentation des LogiCore PCI Interfaces für Anwendungsentwickler. Sie gibt er wichtige Entwurfshinweise und ist die Grundlage aller hier vorgestellten Beispielentwürfe.
Tom Shanley, Don Anderson:PCI System Architecture. Mindshare Inc., 4. Auflage, August 1999.
Detaillierte Beschreibung der PCI-Bus Spezifikation.
[Spartan-II 200 PCI Development Board User's Guide]
Die offizielle Dokumentation zum PCI-Entwicklungsboard.
Zu diesem Text gibt es noch eine [Liste gefundener Fehler und Ergänzungen] .
Alessandro Rubini, Jonathan Corbet:Linux Device Drivers. O'Reilly, 2. Auflage, Juni 2001.
Die Standardreferenz für die Treiberprogrammierung unter Linux (Kernelversion 2.4).
Das Buch ist auch online verfügbar unter http://www.xml.com/ldd/chapter/book/index.html oder [lokal als PDF] .
Alessandro Rubini, Jonathan Corbet:Linux-Gerätetreiber. O'Reilly, 2. Auflage, April 2002.
Die deutsche Übersetzung ist ebenfalls online verfügbar unter http://www.oreilly.de/german/freebooks/linuxdrive2ger/book1.html.
[Kein Zugriff]
Autor: gkemnitz, Letzte Änderung: 14.04.2011 15:09:59