Hallo Mikrocontroller.net,
vielen Dank für die vielen Tipps, die ich hier im Forum schon finden
konnte und ein frohes neues Jahr für alle die dies lesen. Ich sitze
derzeit an einem sehr konkreten Problem mit der Hoffnung, dass Ihr mir
vielleicht helfen könnt:
Ich entwickle auf einem DE2 Board von Altera unter Verwendung der
aktuellen Softwareversionen (Webedition) von der Altera-Webseite. Nach
meinen ersten Versuchen in VHDL habe ich mit einem Freund zusammen ein
einfaches Programm gebaut, dass Tastatureingaben empfangen an der
PS/2-Schnittstelle auf dem LCD-Display des DE2 ausgibt. In reinem VHDL
funktioniert dieses Beispiel bei uns.
Nun habe ich mit einer NIOS II CPU einige LEDs blinken lassen und als
nächsten Schritt möchte ich gern das Tastatur zu LCD-Beispiel in eben
dieser CPU realisieren. Über den Quartus SOPC-Builder konnte ich das LCD
einbinden, dafür war schon ein Element vorhanden. SDRAM für ausreichend
Speicher für meinen C-Code habe ich schon eingebunden.
Nun hänge ich als Anfänger beim Einbinden/Abfragen der Tastatur:
Altera stellt mit den altera_up_avalon_ps2-Dateien anscheinend eine
Möglichkeit zur Verfügung die PS/2-Schnitstelle anzusprechen. Mir wird
aber zum einen die Funktionsweise noch nicht ganz klar. Handelt es sich
dabei um einen Block der die Kommunikation zur Schnittstelle ermöglicht
oder um eine zweite CPU mit der ich kommunizieren kann um PS/2-Daten zu
empfangen? Zum Anderen, gibt es eine angepasste Schnittstelle für
Quartus II v9.1? Leider bekomme ich die Version vom Altera FTP nicht zum
Laufen, da beim Einbinden im SOPC-B. einige Funktionen als deprecated
bemängelt werden.
Seht Ihr eine Chance mit dem Code unter v9.1 weiterzuarbeiten, gibt es
Beispielcode wie ich eine PS/2-Tastatur per NIOS auf dem DE2 ansprechen
kann oder könnt Ihr mir generell Tipps geben, wie ich weiter vorgehen
könnte, um meine Tastatureingaben in meine CPU zu bekommen. Kann ich aus
meiner in VHDL geschriebenen Schnittstelle irgendwie einen Block für den
SOPC generieren, bzw. hat jemand dazu ein Tutorial?
Es sind viele Fragen, aber ich habe mich sehr stark an dieser PS/2 Frage
festgebissen und trotz viel Suche und Recherche im Netz komme ich nicht
weiter, wobei ich wirklich gern verstehen möchte wie die Arbeit mit CPUs
funktioniert.
Vielen Dank vorab! Ich freue mich über jede Hilfe. Grüße, Peter.
Hier seine Frage in Kurzform:
Wie kann man am Altera DE2 Tastatureingaben von der PS/2-Schnittstelle
mit einem NIOS Softcore nutzen?
Der downloadbare PS/2-Controller von Altera verweigert den Dienst. Gibt
es eine lauffähige Version bzw. wie kann man eine aufbauen?
Wie das "altera_up_avalon_ps2" Modul funktioniert kann ich dir nicht
sagen. Das kenne ich nicht. Jedoch könntest du dein Modul kompatibel mit
dem Altera Avalon Bus machen. Danach kannst du dann in deiner NIOS CPU
mit integrieren und von deinem C Programm aus ansprechen.
Wir sind heute noch einmal das komplette NIOS II Software Developer's
Handbook durchgegangen. Das Modul anzupassen ist denke ich noch zu
kompliziert für uns.
Da wir so vorerst nicht weiterkamen haben wir das Problem beiseite
gelegt und erstmal mehrere kleine Projekte aufgebaut, wo wir
verschiedenes auf dem Softcore laufen lassen haben. Probleme zeigten
sich immer wenn wir versuchten auf den SDRAM zuzugreifen, da müssen wir
auf jeden Fall noch nachlesen und umbauen. Sind jetzt erstmal auf den
onchip-memory ausgewichen. Ich denke das Problem dabei liegt an den
clock-Signalen. Wenn das Programm in den SDRAM geschrieben wird klappt
es anscheinend, aber beim Verifizieren wird mit Fehler abgebrochen.
Auf dem Altera FTP haben wir nach längerem Suchen dann auch noch eine
Implementierung der "altera_up_avalon_ps2" in einem Unterordner "90"
gefunden. Soweit konnte ich damit im SOPC einen kompilierbaren Core
bauen, das sieht schon vielversprechend aus. Ich habe auch schon den
C-Code soweit geschrieben, dass theoretisch ein Empfang der
Tastaturdaten möglich sein sollte. Allerdings habe ich gerade das Board
nicht hier, um testen zu können. Wenn das so läuft, dann hätte sich die
Frage damit geklärt... Ich werde morgen im Laufe des Tages berichten.
Schönen Abend noch, Peter.
> einige Funktionen als deprecated bemängelt werden
Sind das Fehler oder nur Warnungen?
Wenn Du was mit Softcores machts, wirst Du früher oder später an den
Punkt kommen, eigene IP/Cores/Code anbinden zu wollen. Dazu mußt Du das
entsprechende Businterface (Avalon/OPB/Wishbone/AHB) realisieren.
Warum machst Du nicht den vorhandenen PS2-Code Avalon-tauglich?
Duke
Hallo Duke,
ich habe mich vorerst mit dem Simulieren von VHDL-Code in einer
Testbench beschäftigt. Leider habe ich momentan immer noch keinen
Zugriff auf das Dev-Board.
Das Anbinden an das Businterface ist so einfach dahingesagt, aber für
mich noch nicht klar wie das genau vonstatten geht, bzw. an welcher
Stelle ich dazu Anleitung finden kann. Ich habe im Handbook nachgelesen
zum erstellen eigener DeviceDriver, aber ich bräuchte denke ich mal eine
kurze Schlagwort-Anleitung wie man vorgeht.
Ich sehe das derzeit so (korrigiert mich bitte wenn ich falsch liege):
Ich habe als Block meinen VHDL-Code von dem ich ähnlich wie beim Aufbau
der Testbench nur E/A sehe. Da herum baue ich jetzt einen Treiber, der
die zeitlichen Anforderungen kennt und die Daten aufbereitet über einen
Interrupt an die CPU weiterreicht über besagten Bus. So hab ich es
probiert über den SOPC-Builder, dort versucht meinen VHDL Block im
importieren. Das brachte mich aber nicht weiter. Geht es an der Stelle
in Tcl weiter oder wie geht man vor?
Danke vorab.
Duke Scarring schrieb:
>> einige Funktionen als deprecated bemängelt werden> Sind das Fehler oder nur Warnungen?
Hab ich vergessen zu beantworten: es waren nur Warnungen. Den Fehler bei
der Generierung kann ich nicht nachvollziehen. Wir haben den Code dann
verworfen und unsere CPU mit der neuen Funktion noch einmal von Grund
auf neu aufgebaut in einem ganz neuen Projekt. Wie oben schon erwähnt
generiert er nun ohne Probleme. Ich warte noch drauf den Code endlich
mal im Board laufen zu lassen.
Ich habe mir jetzt erstmal VHDL-Synthese von Reichardt/Schwarz bestellt.
Gibt es noch ein gutes Buch, dass die Entwicklung um den Softcore
abdeckt? Also auch detailliert beschreibt wie man IP/Cores/Code
anbindet?
Ich habe jetzt endlich die Möglichkeit mit dem Dev-Board zu testen
gehabt, leider funktioniert mein Code nicht. Ich habe mein Programm auf
Basis des hello_world_small-Templates erstellt und konnte auch Daten auf
dem LCD ausgeben.
Nun habe ich den Code ergänzt zu folgendem Programm:
auskommentiere wird auf dem LCD test Error... ausgegeben. Ich vermute,
dass die Initialisierung von ps2 STDOUT umkonfiguriert. Kann ich das
irgendwie manuell wieder zurückbiegen, wenn ich mit der small C Library
arbeite? (normalerweise hätte ich es mit File, fopen, fprintf versucht,
aber die stehen in diesem Fall ja nicht zur Verfügung)
Danke vorab.
Es ist nicht alt_up_ps2_open_dev ("/dev/up_avalon_ps2_0"); sondern
alt_up_ps2_open_dev("/dev/ps2_0");. Damit sollte es nun komplett laufen,
ich werde morgen testen können. Die Namen der Komponenten stehen in der
system.h. Ein Dozent von mir hat über den Code gesehen und es gefunden,
da wäre ich nicht mehr drauf gekommen, weil ich mich so auf das stdout
als Fehlerquelle festgefangen hatte.
Danke, damit funktioniert es nun wohl.