Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Eigenes Projekt mit DE1-SoC: VGA, Speicher und Benutzereingabe meistern – Ein Tutorial für Lab 6

Lerne, wie du für das Lab 6 'Choose Your Own Project' ein kreatives Projekt mit DE1-SoC-Board umsetzt. Schritt-für-Schritt-Anleitung zu VGA-Anzeige, Speicherverwaltung und Benutzereingabe mit aktuellen Beispielen aus Gaming und KI.

DE1-SoC Projekt VGA Anzeige Tutorial Speicherverwaltung DE1-SoC Benutzereingabe NES Controller Ee371 Lab 6 FPGA Projektideen SystemVerilog VGA Treiber SDRAM DE1-SoC Side-Scrolling Spiel FPGA Beat Generator FPGA Audio Visualisierung FPGA Double Buffering VGA Debouncer Taster FPGA Signal Tap Debugging LabsLand DE1-SoC Retro Gaming FPGA Projekt

Einführung: Dein eigenes Projekt – Kreativität trifft auf Hardware

Im Lab 6 der Ee371 geht es darum, alles Gelernte in einem eigenen Projekt zu vereinen. Du nutzt den DE1-SoC-Board, um ein Spiel, eine Audio-Visualisierung oder ein interaktives Kunstwerk zu erschaffen. Die Anforderungen: VGA-Display, signifikanter Speicher (z.B. Pixel-, Audio- oder Spieldaten) und Benutzereingabe über Schalter, Taster oder Peripherie wie den NES-Controller. Dieses Tutorial führt dich durch die wichtigsten Schritte – von der Idee bis zur Umsetzung – und zeigt dir, wie du typische Stolpersteine umgehst.

Projektideen: Von Retro-Games bis KI-gestützter Kunst

Lass dich von aktuellen Trends inspirieren: Retro-Gaming erlebt ein Comeback, und viele Studierende setzen auf Side-Scrolling-Spiele wie Flappy Bird oder Tetris-Klone. Auch KI-generierte Musikvisualisierung oder ein Paint-Programm mit Filtern sind beliebt. Denkbar ist auch ein Beat-Generator, der über den NES-Controller gesteuert wird – ähnlich wie in Apps wie Endlesss. Wichtig: Dein Projekt muss VGA, Speicher und Eingabe kombinieren. Ein einfaches Pixel-Malen reicht nicht; erweitere es um Ebenen, Speicherfunktionen oder Spielmechaniken.

VGA-Anzeige: Grundlagen und Optimierung

Der VGA-Ausgang des DE1-SoC erzeugt ein 640x480-Bild mit 60 Hz. Du musst einen VGA-Treiber in SystemVerilog schreiben, der die horizontalen und vertikalen Synchronisationssignale sowie die Farbdaten liefert. Typischerweise verwendest du einen Frame Buffer im On-Chip-Speicher oder im SDRAM. Für flüssige Animationen empfiehlt sich Double Buffering: Während ein Puffer angezeigt wird, schreibst du in den zweiten. So vermeidest du Tearing-Effekte. Beispielcode für einen einfachen VGA-Treiber findest du in Lab 5 – baue darauf auf.

// VGA-Treiber (Ausschnitt)always_ff @(posedge clk) begin
    if (hcount < 640 && vcount < 480)
        rgb <= framebuffer[vcount*640 + hcount];
    else
        rgb <= 0;
end

Speicherverwaltung: Pixel, Audio und mehr

Die Anforderung „signifikanter Speicher“ bedeutet, dass du mehr als nur ein paar Register nutzt. Typische Optionen: On-Chip-Speicher (M9K-Blöcke) für kleine Framebuffer (z.B. 160x120) oder SDRAM für größere Auflösungen. Für Audioprojekte speicherst du PCM-Daten im SDRAM und gibst sie über den I2S-Codec aus. Ein Ringpuffer eignet sich für Live-Audio. Wenn du ein Spiel baust, speichere Levelkarten oder Highscores im Speicher. Denk an die Adressierung: Bei 640x480 mit 24-Bit-Farbe benötigst du etwa 900 KB – das passt in den SDRAM, aber nicht in den On-Chip-Speicher. Nutze daher den SDRAM-Controller aus früheren Labs.

Benutzereingabe: Schalter, Taster und NES-Controller

Die DE1-SoC bietet 10 Schalter und 4 Taster. Für komplexere Eingaben steht der N8-Controller (NES-Controller) zur Verfügung: 4 Richtungstasten, Select, Start, A, B. Du musst den Controller über den GPIO-Anschluss einlesen und entprellen. Ein Beispiel: Für ein Jump 'n' Run liest du die Richtungstasten und A für Sprung ein. Verwende einen Debouncer, um Prellen zu vermeiden. Der virtuelle Joystick (über LabsLand) funktioniert ähnlich. Teste die Eingaben mit einer LED-Rückmeldung, bevor du sie ins Spiel integrierst.

Projektbeispiel: Side-Scrolling-Spiel mit Highscore-Speicher

Nehmen wir an, du baust ein Spiel, bei dem ein Vogel durch Hindernisse fliegt (inspiriert von Flappy Bird). Du benötigst: VGA für die Grafik, SDRAM für den Hintergrund und die Vogelpositionen, sowie den NES-Controller für die Steuerung. Der Highscore wird in einem EEPROM (über I2C) gespeichert. Die Kollisionserkennung erfolgt pixelgenau im VGA-Timing. Ein Tipp: Nutze Hardware-Beschleunigung für die Kollision, indem du die Pixelwerte vergleichst. Das spart Taktzyklen.

Audio-Integration: Beat-Generator mit NES-Controller

Ein Audio-Projekt kann ein Beat-Generator sein, der über den NES-Controller gesteuert wird. Du speicherst Drum-Samples im Speicher und spielst sie auf Tastendruck ab. Die Ausgabe erfolgt über den I2S-Codec und den Lautsprecher. Achtung: Auf LabsLand hörst du den Ton nicht live; nimm dein Ergebnis als WAV-Datei auf. Ein einfacher Sequenzer mit 16 Schritten und 4 Spuren ist machbar. Du benötigst einen Puffer für die Audio-Daten und einen Timer für das Timing. Das ist eine herausfordernde, aber lohnende Erweiterung.

Debugging und Testen

Verwende Testbenches für jede Komponente: VGA-Treiber, Speichercontroller, Eingabedebouncer. Simuliere mit ModelSim oder Questa. Für das Gesamtsystem hilft der Signal Tap Logic Analyzer, um interne Signale zu beobachten. Häufige Fehler: falsche Adressierung im SDRAM, Timing-Probleme im VGA-Signal (z.B. zu kurze Sync-Pulse) oder nicht entprellte Taster. Arbeite iterativ: Teste zuerst die VGA-Ausgabe mit einem Testbild, dann die Eingabe, dann die Kombination. Notiere alle Schritte im Design Procedure deines Reports.

Report und Demo: So überzeugst du die Kursleitung

Dein Projektbericht muss Design Procedure, Results und Experience Report enthalten. Im Design Procedure erklärst du deine Architekturentscheidungen (z.B. warum du SDRAM statt On-Chip-Speicher gewählt hast). Die Results zeigen Screenshots und ggf. eine Videoaufnahme. Der Experience Report reflektiert, was gut lief und was du anders machen würdest. Bei der Demo auf LabsLand präsentierst du live und beantwortest Fragen. Bereite dich vor: Erkläre, wie Speicher und VGA zusammenspielen und wie du die Eingabe verarbeitest. Bonus-Punkte gibt es für besonders kreative oder komplexe Projekte – etwa eine KI-gestützte Bilderkennung oder ein Multiplayer-Spiel.

Fazit: Dein Projekt – deine Chance

Lab 6 ist die Gelegenheit, deine Fähigkeiten unter Beweis zu stellen und etwas Einzigartiges zu schaffen. Egal ob Spiel, Musikgenerator oder Malprogramm – mit den richtigen Grundlagen (VGA, Speicher, Eingabe) und einer guten Planung wirst du erfolgreich sein. Nutze die Ressourcen aus den vorherigen Labs, tausche dich mit Kommilitonen aus und hab Spaß am Entwickeln. Viel Erfolg!