Versuch 7

Vorbereitung

Beschreibung der Zielarchitektur des Systems

Übersicht

Taktschema

Der genaue Pixeltakt des Systems bei einer Auflösung von 640×480 Punkten beträgt 25,175 MHz. Dieser Takt ist ohne PLL nicht genau zu treffen. Deshalb wird ein Pixeltakt von 25 MHz gewählt. Dazu werden alle Schaltungsteile mit 50 MHz getaktet und mit einem Enablesignal mit 25 MHz Frequenz jeweils für jeden zweiten Takt aktiviert. Der resultierende Pixeltakt ist deshalb 25 MHz.

HSYNC Generator, VSYNC Generator und Bildgenerator

Sync Generator

Der HSYNC Generator zählt die Pixel in einer Zeile im Pixeltakt hoch. Dazu wird das 25 MHz Enable verwendet. Der HSYNC Generator hat die Phasen

  • Active
  • Front porch
  • Sync
  • Back porch

Nach jeder Zeile zählt der VSYNC Generator eine Zeile weiter. Der VSYNC und HSYNC Generator sind weitgehend identisch aufgebaut und unterscheiden sich nur durch die Zählzeiten für die einzelnen Phasen. Der VSYNC Generator erhält nach jeder Zeile ein Enablesignal. Dieses Enablesignal wird vom HSYNC Generator erzeugt. Die Zähler vom HSYNC und VSYNC Generator liefern den aktuellen Pixel und die aktuelle Zeile. Deshalb können diese Signale direkt vom Bildgenerator genutzt werden um die VGA Farbsignale zu erzeugen. Allerdings zählen die Zähler auch in den nicht aktiven Phasen (Front Porch, Sync und Backporch). Deshalb erhält der Bildgenerator zusätzlich die Information, dass sowohl HSYNC als auch VSYNC sich in der aktiven Phase befinden. Ansonsten wird an den Farbausgängen Schwarz ausgegeben.

SYNC Generator Architektur

Sync Generator Architektur

Der Sync Generator besteht aus dem Zähler “synccnt” und einem Automaten “syncsm”. Der Automat repräsentiert die Phasen des Generators. Der Zähler ist für die Dauer der Phasen des Automaten verantwortlich. Dazu produziert der Zähler ein “done” Signal, wenn der Zähler einen bestimmten Zählerstand erreicht hat. Bei welchem Zählerstand ein “done” Signal kommt, kann über das “sel_cmp_i(1..0)” Signal ausgewählt werden. Es gibt vier Vergleichswerte, die über “sel_cmp_i(1..0)” ausgewählt werden können. Wenn das “done” Signal aktiviert wird, wird gleichzeitig der Zähler auf 0 zurückgesetzt. Der Automat erzeugt das sel_cmp_i Signal und benutzt das “done” Signal um in die nächste Phase zu welchseln.

Die folgende Darstellung zeigt den Signalverlauf des Zählerstandes, des done Signals und des Zustands des Automaten:

Sync Generator Timing

In diesem Ausschnitt geht der Automat vom Zustand “active” in den Zustand “fp” über. Das “done” Signal wird bei einem Zählerstand von 639 aktiviert. Dieses Verhalten wird über die Wahl selcmp = “00” gesteuert. Mit der folgenden Phase “fp” wird das selcmp Signal auf “01” gesetzt.

In der folgenden Abbildung ist das Zustandsdiagramm des Automaten dargestellt.

Sync Generator Zustandsautomat

Die Ausgangssignale des Automaten sind nicht eingezeichnet.

Beantworten Sie folgende Fragen:

  1. Welche Funktion hat der Eingang sel_cmp_i(1..0) am synccnt Modul?
  2. Welche Funktion hat das Modul syncsm?

Automatenbeschreibung in VHDL

Um die Automatenbeschreibung in VHDL kennenzulernen gibt es ein Spiel im Projektverzeichnis. Dieses Spiel sollen Sie analysieren.

Arbeiten Sie das Kapitel 6 Reichardt, VHDL Synthese, Kapitel 6 - Entwurf von Zustandsautomaten durch. Dort ist beschrieben wie Zustandsautomaten in VHDL beschrieben werden. Sie können den Text als PDF laden, wenn Sie von einem Rechner in der Hochschule aus zugreifen, oder wenn Sie sich über das VPN von daheim mit dem Hochschulnetz verbinden Siehe: Rechenzentrum/VPN.

Analysieren Sie das Design “play_rtl.vhd” und “de1_play_structure.vhd”.

  1. Zeichnen Sie einen Schaltplan von de1_play_structure.vhd
  2. Beschreibt der Zustandsautomat in “play_rtl.vhd” einen Moore- oder einen Mealyautomaten? Warum?
  3. Welche Ein- und Ausgänge hat der Automat?
  4. Zeichnen Sie den Zustandsgraphen des Automaten anhand des VHDL Codes.
  5. Simulieren Sie den Automaten mit der vorbereiteten Testbench t_play im Verzeichnis sim/play
  6. Zeichnen Sie ein Timingdiagramm auf dem der Übergang vom Zustand “chance_s” in “hit0_s” zu sehen ist.
  7. Beschreiben Sie wie das Spiel funktioniert! Machen Sie eine Skizze um das Spiel zu erläutern.
  8. Synthetisieren Sie das Design im Verzeichnis pnr/de1_play.
  9. Analysieren Sie den Zustandsautomaten mit “Tools → Netlist Viewer → State Machine Viewer”. Schauen Sie im Tab “Encoding” nach.
  10. Wie viele Flipflops benötigt der Zustandsautomat?
  11. Ändern Sie die Einstellung Assignments → Settings → Analysis & Synthesis Settings → More Settings → State Machine Settings und vergleichen Sie die Syntheseergebnisse bei “one-hot” und “minimal-bits”.

Laborarbeiten

Drucken Sie die Checkliste V7 aus.

Spiel ausprobieren

Synthetisieren Sie die play Schaltung im Verzeichnis pnr/de1_play. Laden Sie das Spiel auf das FPGA und probieren Sie das Spiel aus.

Spiel erweitern

Im folgenden soll das Spiel modifiziert werden. Dazu sind hier einige Spielvarianten dargestellt. Welche Variante Sie mit ihrer Gruppe entwerfen sollen, wird im Praktikum festgelegt. Zeichnen Sie für den modifizierten Entwurf den Zustandsgraphen auf Papier. Ändern Sie den VHDL Code für den Automaten und die Testbench des Automaten. Verifizieren Sie den Automaten im Simulator und auf dem FPGA.

Variante 1 - Wartesekunde

Modifizieren Sie das Spiel derart, dass bei einem Tastendruck nicht sofort mit der alternativen Blinkfolge begonnen wird, sondern erst nach Ablauf der Wartesekunde.

Variante 2 - Doppelklick

Um in die alternative Blinksequenz zu kommen soll man nicht einmal, sondern zweimal innerhalb von einer Sekunde den Taster drücken.

Variante 3 - Langer Ausgang

Nach Erreichen der alternativen Blinksequenz soll man nicht sofort bei einem Tastendruck wieder in die Standardblinkfolge zurückkehren. Stattdessen soll nach dem Tastendruck erst noch bis zum Ablauf der Wartesekunde die aktuelle LED wetterleuchten. Danach soll die andere LED aus der alternativen Blinksequenz für eine Sekunde leuchten und erst dann soll wieder die Standardblinkfolge leuchten.

Variante 4 - Ausgang alle LEDs

Nach Erreichen der alternativen Blinksequenz durch einen Tastendruck soll die alternative Blinkfolge dann verlassen werden, wenn während der Leuchtdauer jeder LED aus der alternativen Blinksequenz mindestens einmal die Taste gedrückt wurde.

Variante 5 - Klick bei Eins blockt

Wenn während der Standardblinkfolge während der Leuchtdauer der ersten LED eine Taste gedrückt wird, dann soll bei der nächsten möglichen Gelegenheit um mit einem Tastendruck die alternative Blinkfolge zu aktivieren, der Tastendruck wirkungslos bleiben. Durch Drücken der Taste während der Leuchtdauer der ersten LED wird also das Verlassen der Standardblinkfolge für einen Durchgang blockiert und erst beim darauf folgenden Durchgang kann man wieder durch einen Tastendruck zum richtigen Zeitpunkt in die alternative Blinkfolge gelangen.

Variante 6 - Eins / Zwei / Drei

Man kommt in die alternative Blinkfolge, wenn man während der Leuchtdauer der ersten LED die Taste drückt, dann bei der zweiten LED die Taste drückt und dann bei der dritten LED die Taste drückt. Wenn man das Drücken bei einer LED verpasst, muss man wieder mit dem Drücken bei der ersten LED anfangen.

Variante 7 - Zweimal vorher

Man kann die alternative Blinkfolge durch Tastendruck während der Leuchtdauer der mittleren LED nur dann erreichen, wenn man während der Leuchtdauer der zweiten LED genau zweimal die Taste gedrückt hat.

Variante 8 - Spring drüber

Wenn man während der Leuchtdauer der zweiten LED den Taster drückt, dann wird nach Ablauf der Wartesekunde das Aufleuchten der mittleren LED übersprungen.

Synchron rücksetzbarer Zähler

Für den Zähler “synccnt” benötigen Sie als eine Komponente einen synchron rücksetzbaren Zähler mit Enable Eingang. Das Enablesignal soll höher priorisiert sein, als das synchrone Resetsignal. Das bedeutet, dass der synchrone Reset nur funktioniert und den Zähler zurücksetzt, wenn gleichzeitig das Enable aktiv ist.

Zähler mit synchronen Reset und Enable

Entwurfsphase

  • Entwerfen Sie auf dem Papier mit Ihrer Gruppe einen synchron rücksetzbaren Zähler mit Enableeingang auf Basis der erlaubten Komponenten aus Versuch 6.
  • Skizzieren Sie ein Timingdiagramm mit dem Synchronen Reset und dem Enablesignal.

Erklärphase

Jeweils vier Gruppen bilden ein Plenum.

  • Stellen Sie im Plenum Ihren Entwurf vor. Erläutern Sie Ihr Timingdiagramm.
  • Diskutieren Sie den Entwurf im Plenum.

Designphase

  • Entwerfen Sie jetzt den Zähler in VHDL. Dazu ist die Datei “counter_rtl.vhd” vorbereitet.
  • Simulieren Sie den Zähler mit der vorbereiteten Testbench im Verzeichnis sim/counter.

Verifikationsphase

In dieser Phase stellt jede Gruppe einen “Prüfer”. Dieser Prüfer verifiziert das Design in einer anderen Gruppe. Jede Gruppe muss in der Lage sein dem Prüfer das eigene Design mit Designdaten, RTL Viewer und Simulationsergebnissen zu erläutern.

  • Wählen Sie einen Prüfer in Ihrer Gruppe.
  • Der “Prüfer” geht in eine andere Gruppe und prüft dort das Design. Der Prüfer zeichnet das Design auf dem Papierentwurf ab.

Zähler für den Sync Zähler (synccnt)

Sie haben jetzt den synchron rücksetzbaren Zähler “counter”. Dieser Zähler soll als Komponente für den “synccnt” Zähler verwendet werden, den Sie jetzt entwerfen und in VHDL umsetzen.

 synccnt

Entwurfsphase

Entwerfen Sie einen Zähler der bei einem wählbaren Zählerstand ein “done” Signal aktiviert und im darauffolgenden Takt wieder bei 0 startet. Es sollen insgesamt vier Vergleichswerte mit dem Signal “sel_cmp_i(1..0)” wählbar sein. Zeichnen Sie Ihren Entwurf auf Papier. Verwenden Sie nur die aus Versuch 6 zugelassenen Komponenten sowie schon vorhandene Komponenten wie den “Counter”.

Erklärphase

Erklären Sie einer anderen Gruppe Ihren Entwurf. Zeichnen Sie dazu Timingdiagramme.

Designphase

Setzen Sie jetzt das Design in VHDL um. Dazu gibt es die Vorlage “synccnt_rtl.vhd” Simulieren Sie das Design im Simulator im Verzeichnis sim/synccnt. Es kann hilfreich sein die Pfade der Komponenten, die in sim/makefile.sources sind auf Vollständigkeit zu überprüfen.

Verifikationsphase

Wählen Sie einen “Prüfer” und lassen Sie Ihr Design von einem Prüfer einer anderen Gruppe überprüfen.

Entwurf einer Schaltung zur Erzeugung des horizontalen Synchronisationssignals (HSYNC)

Jetzt sollen Sie einen Entwurf für einen HSYNC Generator machen, der das VGA_HS Signal für den VGA Anschluss erzeugt. Das Bild soll eine Auflösung von 640×480 Punkten und eine Bildwiederholfrequenz von etwa 60 Hz haben. Auf dem FPGA Board soll das 50 MHz Taktsignal genutzt werden.

VGA Bildgenerator

Der Entwurf soll zunächst komplett auf dem Papier erfolgen. Versuchen Sie bei Ihrem Entwurf einen Ausblick für die Erzeugung des VSYNC Signals und die RGB Signale zu geben. Für den Entwurf sollen ausschliesslich die folgenden Komponenten verwendet werden. Andere, komplexere Komponenten müssen Sie auf Basis der aufgeführten zulässigen Komponenten erstellen.

Vorgehen

  1. Arbeiten Sie in Ihrer Gruppe einen Entwurf aus. Im Entwurf müssen Schaltpläne und geeignete Timingdiagramme enthalten sein. Sie müssen in der Lage sein, anderen Gruppen den Entwurf zu erläutern. Einigen Sie sich auf einen Gruppensprecher, der den Entwurf vorstellt. Kontaktieren Sie in dieser Zeit nicht die anderen Gruppen. (45 min)
  2. Jeweils vier Gruppen bilden ein Plenum und diskutieren die Entwürfe untereinander. Jede Gruppe stellt dazu Ihren Entwurf den anderen Gruppen vor (5 min). Danach wird der Entwurf diskutiert (5 min).
  3. Wählen Sie im Plenum einen Entwurf aus, der dem anderen Plenum vorgestellt werden soll
  4. Definieren Sie gegebenenfalls noch notwendige Änderungen, Ergänzungen und Verbesserungen, die in der Diskussion aufgefallen sind. (10 min)
  5. Dieser überarbeitete Entwurf wird dann dem anderen Plenum vorgestellt (5 min) und diskutiert (5 min).
  • dtpr_versuch_7_hide.txt
  • Last modified: 2018/05/28 16:33
  • by anpf