Projekt: BlinkingLed

Im Projekt SimpleLed wurde eine rein logische Schaltung ohne interne Zustände implementiert. Dafür sind FPGAs natürlich nicht gedacht. Normale Schaltungen in FPGAs besitzen jede Menge interne Register (also Zustände) die über logische Verknüpfungen zu den nächsten Registern geführt werden.

Das Projekt SimpleLed wird um einenTakteingang und einen weiteren Taster erweitert. Ein- und Ausgangssignale werden über IO-Flipflops eingelesen bzw. ausgegeben.

Spezifikation

Die LED-Ansteuerung wird grundsätzlich geändert. Die LED soll nun blinken und die Blink-Frequenz durch die Taster 2 und 3 gesteuert werden. Der Taster 0 soll eine Reset-Funktion bekommen.

Nr Name Spezifikation
1 Reset Nach dem Einschalten und nach Taster 0 blinkt die LED mit 250 Hz/256(ca. 1 Hz)
2 FrqUp Nach Taster 2 blinkt die LED mit doppelter Frequenz
3 FrqUp Nach Taster 3 blinkt die LED mit halber Frequenz
4 MaxFreq Die maximale Frequenz ist 250 Hz
5 MinFreq Die minimale Frequenz ist 250 Hz/4096 (ca. 1/16 Hz)
SimSpeed Die Simulation soll um den Faktor 10.000 beschleunigt ablaufen.

Neu in diesem Projekt

  • Der Typ std_logic_vector
  • Register
  • Zähler
  • Logische Funktionen
  • Multiplexer

Diese Projekt ist in einzelne Schritte unterteilt in denen Stück für Stück das endgültige Modul erstellt wird.

Analyse der Aufgabenstellung

Letztendlich benötigt man um die Spezifikation zu erfüllen einen Frequenzgenerator der im Bereich 250 Hz bis 1/16 Hz Rechtecksignale ausgibt. Das erreicht man mit einem Zähler, der alle 1/500 Sekunde inkrementiert wird.

Ein weiterer Zähler, der im Bereich 0 bis 12 arbeitet, wählt über einen Multiplexer das entsprechende Bit des Frequenzgenerators aus, welches die LED zum blinken bringt. Dieser Zähler wird mit den Tastern beeinflusst.

Struktur von BlinkingLed

In dem obigen Bild ist nur der Kern der Schaltung enthalten, da der Rest ziemlich trivial ist.

Wichtig bei der Programmierung von FPGAs ist allerdings, dass man sich ein Vorstellung davon macht, wie die Schaltung auf die Hardware abgebildet werden soll. Nur so kann man einen vernünftig synthetisierbaren Code erstellen.

Macht man sich darüber keine Gedanken wird man in komplexen Schaltungen schnell an die Grenzen der Synthetisierbarkeit kommen und u. U. nur noch lächerlich niedrige Verarbeitungsfrequenzen realisieren können.

Weiter zur Vorbereitung