[[dtpr_versuch_7_hide]]

This is an old revision of the document!


Versuch 7

Ü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?

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.

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

Modifizieren Sie das Spiel derart, dass bei einem Tastendruck nicht sofort ein neues Leuchtbild erscheint, sondern der neue Leuchtzustand erst nach Ablauf der Wartesekunde erscheint. Ändern Sie den VHDL Code gemäß des Zustandsgraphen ab und probieren Sie das modifizierte Design auf dem FPGA aus.

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.

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.

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.

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.

Verifikationsphase

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

  • dtpr_versuch_7_hide.1384127970.txt.gz
  • Last modified: 2013/11/11 00:59
  • by beckmanf