VHDL Test (4)

URL: ../../..dic/programmierbare_logik/test_vhdl/test4.html

VHDL Test (4)

Allgemeines link symbol

  • Projektordner herunterladen und entpacken
  • Insgesamt gibt es 20 Punkte
  • Die einzelnen Punkte bauen meist nicht aufeinander auf. Statt langer Fehlersuche lieber auf das nächste Beispiel wechseln.

Serielle Datenübertragung link symbol

Vorbereitung link symbol

  • Projekt transmitter.xise öffnen

Aufgabenstellung link symbol

Um Daten zu Übertragen wird oft die serielle Schnittstelle verwendet. In diesem Beispiel soll ein Transmitter entsprechend RS232 realisiert werden.

RS232 Timingdiagramm
RS232 Timingdiagramm (Quelle: Gerald.deppe, Lizenz Public Domain)

Zum Testen soll mittels der acht Umschaltern (SW0 bis SW7) ein 8 Bit Datenwort definiert werden und durch Drücken des Tasters BTN0 wird dieses dann versendet. Zum Versenden wird der Pegel der Sendeleitung mittels LED angezeigt. Die Baudrate wird auf 1 Baud gestellt.

uart_tx Komponente link symbol

Zustandsmaschine link symbol

10 Punkte

  • Die erforderliche Zustandsmaschine hat die Zustände IDLE, START, DATA und STOP
  • Eingänge:
    • send_i - startet die Übertragung
    • Überlauf den Baudraten Generators - wechselt bei einer laufenden Übertragung zum nächsten Symbol
  • Ausgänge:
    • tx_o - das zu sendende Bit (bzw. Symbol)
    • busy_o - zeigt eine laufende Übertragung an ('1' wenn eine Übertragung läuft)
  • Wenn die Zustandsmaschine im Zustand IDLE ist und send_i gleich '1' ist, dann wird in den Zustand START gewechselt.
  • Vom Zustand START wird in den Zustand DATA gewechselt, sobald der Zähler für die Baudrate übergelaufen ist
  • Im Zustand DATA läuft ein Bit Zähler und zählt die Bits von 0 bis 7 (LSB zuerst)
  • Jedes Bit wird für die Dauer ausgegeben, die sich aus der Baudrate ergibt
  • Nach dem 8. Datenbit wird in den Zustand STOP gewechselt
  • Vom Zustand STOP wird in den Zustand IDLE gewechselt, sobald der Zähler für die Baudrate übergelaufen ist
  • Ausgabe von tx_o
    • Ist in IDLE und STOP auf '1'
    • Ist in START auf '0'
    • Entspricht während DATA dem zu übertragenden Datenbit

Baudratengenerierung link symbol

2 Punkte

Für die Baudratengenerierung wird der bestehende Zähler (counter) verwendet. Die Entity enthält die beiden Generics BAUDRATE_WIDTH und BAUDRATE_DIVIDER, die den Zähler konfigurieren.

Bit Zähler link symbol

2 Punkte

Um die einzelnen Datenbits zu zählen (während des Zustands DATA) wird eine weitere Zählerinstanz verwendet. Diese Zählerinstanz zählt von 0 bis 7.

Der Ausgang value_o des Bit Zählers ist vom Typ std_ulogic_vector. Dieser muss zuerst in einen unsigned und dann mittels to_integer in einen Integer gewandelt werden, um mittels Indexzugriff das gewünschte Bit aus dem data_i Vektor zu holen (z.B. data_i(0) holt Bit 0 des Vektors).

Blockschaltbild link symbol

Dieses Blockschaltbild zeigt die einzelnen Komponenten der uart_tx Komponente. Die resultierende VHDL Beschreibung sollte äquvivalent zu diesem Blockschaltbild sein.

Blockschaltbild uart_tx

Testbenchseverity symbol

Teste die Implementierung mittels der Testbench uart_tx_tb.vhd.

Implementierung des Top Levels link symbol

3 Punkte

Zur Verfügung stehen die Komponenten button_dectect und uart_tx. Diese Komponenten werden genutzt, um im Top Level transmitter.vhd die gewünschte Funktionalität zu realisieren.

Einige benötigte Signale sind bereits vordefiniert.

Erstelle das Top Level anhand des folgenden Blockschaltbildes:

Blockschaltbild transmitter

Testbenchseverity symbol

Teste die Implementierung mittels der Testbench transmitter_tb.vhd.

Erweiterung der Constraints Datei link symbol

2 Punkte

In der Datei transmitter.ucf ist nur das Signal clk definiert. Erweitere die Datei um folgende Zuordnungen

  • button_send_i liegt an Pin G12
  • switches_data_i(0) liegt an Pin P11
  • switches_data_i(1) liegt an Pin L3
  • switches_data_i(2) liegt an Pin K3
  • switches_data_i(3) liegt an Pin B4
  • switches_data_i(4) liegt an Pin G3
  • switches_data_i(5) liegt an Pin F3
  • switches_data_i(6) liegt an Pin E2
  • switches_data_i(7) liegt an Pin N3
  • led_tx_o liegt an Pin M5
  • led_busy_o liegt an Pin M11
Pinout des BASYS2 Boards
Pinout des BASYS2 Boards (Quelle: Digilent Inc. BASYS2 Manual, Lizenz © Digilent)

Test am Board link symbol

1 Punkt

Synthetisiere das Projekt und teste das Ergebnis am Board