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) |
6 | 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.
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