[[dtpr_versuch_3]]

This is an old revision of the document!


Dieser Versuch führt sequentielle Schaltungen, d.h. Schaltungen mit Flipflops ein.

Zähler

Die erste sequentielle Schaltung ist ein Modulo 256 Zähler, d.h. ein Zähler, der von 0 bis 255 zählt und dann wieder von vorn mit 0 beginnt. Der Zählerstand soll als hexadezimale Ausgabe auf der 7-Segment Anzeige ausgegeben werden. Gleichzeitig soll der Zählerstand binär auf die roten LEDs ausgegeben werden.

Im ersten Schritt wird der Zähler mit der Taste KEY0 getaktet und kann mit KEY1 zurückgesetzt werden. Der Code für den Zähler ist hier:

Code für den Zähler

Aufgaben Teil 1

  1. Erstellen Sie ein Verzeichnis p1
  2. Laden Sie den Code in dieses Verzeichnis.
  3. Übernehmen Sie bin2seg.vhd aus dem letzten Versuch. Ergänzen Sie die Ziffern a-f.
  4. Simulieren Sie den Code mit Modelsim und erläutern Sie die Funktion.
  5. Ändern Sie den Code in counter.vhd um die Funktion des Zählers zu erhalten.
  6. Simulieren Sie die neue Schaltung und überprüfen Sie die Funktion.
  7. Synthetisieren Sie die Schaltung mit Quartus und laden Sie die Schaltung auf das FPGA.
  8. Demonstrieren Sie die Funktion
  9. Modifizieren Sie die Schaltung und takten Sie die Schaltung mit SW0.
  10. Überprüfen Sie die Funktion auf dem Board

Zähler mit Enable Signal

Bislang wird der Zähler direkt mit dem Taster KEY0 getaktet. Die Schaltung soll jetzt so umgebaut werden, dass als Systemtakt für alle Flipflops ein 50 MHz Takt von einem Taktgenerator vom Board verwendet werden soll. Weiterhin soll die Schaltungaber jeweils um eins hochzählen, wenn der Taster KEY0 gedrückt wird.

Die Flankenerkennung

Das Problem ist, dass auch ein sehr kurzes Drücken des Tasters KEY0 um Größenordnungen langsamer als die Taktperiode des 50 MHz Taktes ist. Zur Lösung des Problems müssen Sie eine Schaltung entwerfen, die nur für die Dauer eines Taktsignals ein Signal erzeugt, wenn sich der Zustand des Signals KEY0 von 0 nach 1 ändert.

Die Schaltungsidee ist die folgende:

  1. Speichern Sie den Zustand des Signals KEY0 in einem Flipflop, das mit dem Systemtakt von 50 MHz getaktet ist.
  2. Am Ausgang dieses Flipflops ist das Signal KEY0 um eine Taktperiode gegenüber dem Eingang des Flipflops verzögert.
  3. Wenn zwischen dem Ausgang des Flipflops und dem Signal KEY0 ein Unterschied besteht, dann hat sich das Signal KEY0 offensichtlich verändert.
  4. Werten Sie diesen Unterschied aus und erzeugen Sie ein Signal von der Dauer eines Taktes.
Das Enablesignal

Jetzt haben Sie ein Signal, dass einen Takt lang aktiv ist, wenn sich das Signal KEY0 von 0 auf 1 ändert. Nun muss der Zähler noch so verändert werden, dass er nur dann zählt, wenn ein “enable” signal aktiv ist.

Der noch nicht ganz fertige Code für die Schaltung ist hier:

Code für den Zähler mit Enable und die Flankenerkennung

Aufgaben Teil 2

  1. Erstellen Sie ein neues Verzeichnis p2 und laden Sie die Dateien in dieses Verzeichnis
  2. Übernehmen Sie counter.vhd und bin2seg.vhd aus dem Verzeichnis p1.
  3. Fügen Sie ein neues Signal “enable_i” in die Entity von counter ein.
  4. Ergänzen Sie die Funktionalität von counter so, dass er nur noch zählt, wenn dieses “enable_i” Signal “1” ist.
  5. Ergänzen Sie das neue Modul edge so, dass die steigende Flanke von key_i erkannt werden.
  6. Verbinden Sie auf dem Toplevel das Module edge und den counter.
  7. Simulieren Sie die Schaltung
  8. Laden Sie die Schaltung auf das FPGA
  • dtpr_versuch_3.1290972789.txt.gz
  • Last modified: 2010/11/28 20:33
  • by beckmanf