====== UART Transmitter mit FPGA und VHDL ====== [[dtlab_start|Zurück zur Themenübersicht]] ===== Aufgabenstellung ===== Bauen Sie einen UART Transmitter und senden Sie über die UART Schnittstelle Buchstaben vom FPGA zu einem angeschlossenen Rechner. ===== Vorbereitung ===== ==== Projekt aktualisieren ==== Aktualisieren Sie das dtlab Projekt mit cd ~/projects/dtlab git pull ==== VHDL toplevel top_uart ==== Die Datei [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/top_uart.vhd|top_uart.vhd]] beschreibt das Modul "top_uart". "top_uart" stellt den toplevel auf dem FPGA dar. ==== Die UART ==== Auf dem FPGA soll ein UART Transmitter aufgebaut werden, mit dem man Zeichen an einen Rechner schicken kann. Die Übertragung hat die folgenden Parameter * 57600 Baud * Acht Datenbits, kein Paritybit * Zwei Stopbits Die Architektur ist in Abbildung 1 dargestellt. {{ :public:praktikum_digitaltechnik:dt-uart-tx-simple.svg |UART Transmitter}} {{ :public:praktikum_digitaltechnik:dt-uart-tx-simple.svg?linkonly |Abbildung 1}}: UART Transmitter Architektur auf dem FPGA Wenn man auf den KEY1 drückt, dann sollen die Daten an den Schaltern SW[7..0] über die UART seriell übertragen werden. Die Übertragungsgeschwindigkeit wird mit dem "baudcnt" Modul gesteuert. {{ :public:praktikum_digitaltechnik:dt-uart-tx-timing.svg |}} {{ :public:praktikum_digitaltechnik:dt-uart-tx-timing.svg?linkonly |Abbildung 2}}: UART Transmitter Timing In Abbildung 2 ist das Timing der Schaltung für eine Bitdauer von drei Systemtakten dargestellt. Das wäre eine Baudrate von 16,6 MBit/s bei einer Systemtaktfrequenz von 50 MHz. Das wäre also viel zu schnell. So kann aber das Zusammenspiel der Komponenten "baudcnt" und "uart_tx_shift" einfacher dargestellt werden. * Die Komponenten [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/baudcnt.vhd|"baudcnt"]] und [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/uart_tx_shift.vhd|"uart_tx_shift"]] sind als leere Architectures schon im Projekt vorhanden * Die [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/edge.vhd|"edge"]] Komponente enthält den Flankendetektor aus den vorherigen Projekten * Instantiieren Sie die Komponenten "baudcnt" und "uart_tx_shift" in "top_uart" und verbinden Sie die Komponenten gemäß Abbildung 1 * Überprüfen Sie die Struktur mit dem RTL Viewer aus der Synthese Die Testbench [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/t_top_uart.vhd|"t_top_uart"]] dient zur Simulation von "top_uart". * Stellen Sie im Simulator sicher, dass das Signal "start" bei einem simulierten Tastendruck an KEY1 korrekt erzeugt wird ==== baudcnt ==== Das Modul [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/baudcnt.vhd|"baudcnt"]] steuert die Übertragungsrate wie in Abbildung 2 dargestellt. Das Enablesignal sorgt im "uart_tx_shift" Modul dafür, dass das nächste Bit ausgegeben wird. * Entwerfen Sie eine Architektur für "baudcnt", die das Enablesignal wie in Abbildung 2 dargestellt erzeugt. * Die Architektur soll auch für eine Baudrate von 57600 Baud geeignet sein. * Zeichnen Sie die Architektur auf Papier auf * Was muss man für eine Baudrate von 57600 Baud in baudcnt einstellen? * Zeigen Sie die Funktion im Simulator wie in Abbildung 2 ==== uart_tx_shift ==== Das Modul [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/uart_tx_shift.vhd|"uart_tx_shift"]] dient zur Serialisierung des 8 Bit Datenwortes, das von den Schaltern SW[7..0] kommt. * Entwerfen Sie eine Architektur für das Modul "uart_tx_shift", mit der die Daten serialisiert werden * Das Modul soll auch das Startbit für die UART Übertragung erzeugen * Zeichnen Sie die Architektur auf Papier auf * Zeigen Sie die Funktion der Gesamtuart im Simulator ===== Labor ===== Im Labor gibt es ein FTDI-RS232 Kabel zum Anschluss eines Rechners an eine RS-232 Schnittstelle. Auf dem FPGA Board ist ein MAX232 Chip mit dem die 3,3V Logiksignal auf RS-232 (+7/-7V) Niveau gewandelt werden. Das Kabel enthält einen [[https://ftdichip.com/products/ft231xq/|USB-UART Konverterchip von FTDI]]. Das Kabel kann also per USB an einen Rechner angeschlossen werden. {{ :dt-ftdi-uart.jpg?600 | FTDI RS-232 Kabel}} Abbildung 3: FTDI RS-232 Kabel ==== Software auf dem Rechner ==== Nach dem Einstecken des Modems erscheint unter /dev/ttyXXXXXXX ein neues Device. Unter Linux ist dies /dev/ttyUSB0, unter MacOS ist dies /dev/tty.usbserial-DM000IKG Auf dem Rechner wird ein Terminalprogramm benötigt, mit dem die Daten von der seriellen Schnittstelle angezeigt werden können. * Unter MacOS ist ''screen'' vorinstalliert und kann so verwendet werden: sudo screen /dev/ttyUSB0 57600 * Unter MS Windows kann [[https://www.putty.org|putty]] installiert und genutzt werden. * Unter Linux ist bei unseren virtuellen Maschinen ''gtkterm'' installiert und kann direkt so gestartet werden: gtkterm --port /dev/ttyUSB0 --speed 57600 --echo Stellen Sie auf dem FPGA Board über die Schalter verschiedende Zeichen ein und übertragen Sie das Zeichen an den Rechner. Die [[https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#Zusammensetzung|ASCII Tabelle]] zeigt die Codes für die verschiedenen Buchstaben.