Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
dtlab_t9 [2024/06/17 11:11] haf [Die UART] |
dtlab_t9 [2025/03/14 20:51] (current) beckmanf switch code server |
||
---|---|---|---|
Line 17: | Line 17: | ||
==== VHDL toplevel top_uart ==== | ==== 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. Das ist der gleiche toplevel wie bei der letzten Aufgabe. In das Modul wird zusätzlich zu dem vorhanden UART Transmitter jetzt der UART Receiver eingebaut. Die Gesamtschaltung kann dann senden und empfangen. | + | Die Datei [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/top_uart.vhd|top_uart.vhd]] beschreibt das Modul "top_uart". "top_uart" stellt den toplevel auf dem FPGA dar. Das ist der gleiche toplevel wie bei der letzten Aufgabe. In das Modul wird zusätzlich zu dem vorhanden UART Transmitter jetzt der UART Receiver eingebaut. Die Gesamtschaltung kann dann senden und empfangen. |
==== Die UART ==== | ==== Die UART ==== | ||
Line 47: | Line 47: | ||
In Abbildung 3 ist das Timing der Schaltung für eine Bitdauer von vier Systemtakten dargestellt. Das wäre eine Baudrate von 15 MBit/s bei einer Systemtaktfrequenz von 50 MHz. Das wäre also viel zu schnell. So kann aber das Zusammenspiel der Komponenten einfacher dargestellt werden. | In Abbildung 3 ist das Timing der Schaltung für eine Bitdauer von vier Systemtakten dargestellt. Das wäre eine Baudrate von 15 MBit/s bei einer Systemtaktfrequenz von 50 MHz. Das wäre also viel zu schnell. So kann aber das Zusammenspiel der Komponenten einfacher dargestellt werden. | ||
- | * Die Komponenten [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/uart_rx_baudcnt.vhd|"uart_rx_baudcnt"]], [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/uart_rx_bitcnt.vhd|"uart_rx_bitcnt"]], [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/uart_rx_shift.vhd|"uart_rx_shift"]] und [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/uart_rx.vhd|"uart_rx"]]sind als leere Architectures schon im Projekt vorhanden | + | * Die Komponenten [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/uart_rx_baudcnt.vhd|"uart_rx_baudcnt"]], [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/uart_rx_bitcnt.vhd|"uart_rx_bitcnt"]], [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/uart_rx_shift.vhd|"uart_rx_shift"]] und [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/uart_rx.vhd|"uart_rx"]]sind als leere Architectures schon im Projekt vorhanden |
- | * Die [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/uart_rx_edge.vhd|"uart_rx_edge"]] Komponente enthält einen Flankendetektor und eine Verzögerungs- und Synchronisierstufe. | + | * Die [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/uart_rx_edge.vhd|"uart_rx_edge"]] Komponente enthält einen Flankendetektor und eine Verzögerungs- und Synchronisierstufe. |
* Instantiieren Sie die Komponenten "uart_rx_bitcnt", "uart_rx_baudcnt", "edge" und "uart_rx_shift" in "uart_rx" und verbinden Sie die Komponenten gemäß Abbildung 1 | * Instantiieren Sie die Komponenten "uart_rx_bitcnt", "uart_rx_baudcnt", "edge" und "uart_rx_shift" in "uart_rx" und verbinden Sie die Komponenten gemäß Abbildung 1 | ||
* Instantiieren Sie "uart_rx" in "top_uart" gemäß Abbildung 2 | * Instantiieren Sie "uart_rx" in "top_uart" gemäß Abbildung 2 | ||
* Überprüfen Sie die Struktur mit dem RTL Viewer aus der Synthese | * Ü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". Dort ist ein simulierter UART Transmitter mit 57600 Baud enthalten. | + | Die Testbench [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/t_top_uart.vhd|"t_top_uart"]] dient zur Simulation von "top_uart". Dort ist ein simulierter UART Transmitter mit 57600 Baud enthalten. |
* Stellen Sie im Simulator sicher, dass die Daten korrekt empfangen werden | * Stellen Sie im Simulator sicher, dass die Daten korrekt empfangen werden | ||
Line 69: | Line 69: | ||
==== uart_rx_baudcnt ==== | ==== uart_rx_baudcnt ==== | ||
- | Das Modul [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/uart_rx_baudcnt.vhd|"uart_rx_baudcnt"]] sorgt für das Timing der Bits. Es wird ein Signal "en_f_o" am Ende eines Bits und das Signal "en_h_o" zur Hälfte der Bitzeit ausgegeben. Dieses Timing beruht auf dem eigenen Systemtakt. Im Timingdiagramm in Abbildung 3 ist der Signalverlauf uart_rxd_sync dargestellt, der in der Abbildung perfekt zu dem Zähler "baudcnt" passt. Das echte System erzeugt die UART Signale allerdings mit einer abweichenden Frequenz. Bei der Konstruktion des Baudzähler geht man einfach davon aus, dass die eigene Taktfrequenz perfekt ist. | + | Das Modul [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/uart_rx_baudcnt.vhd|"uart_rx_baudcnt"]] sorgt für das Timing der Bits. Es wird ein Signal "en_f_o" am Ende eines Bits und das Signal "en_h_o" zur Hälfte der Bitzeit ausgegeben. Dieses Timing beruht auf dem eigenen Systemtakt. Im Timingdiagramm in Abbildung 3 ist der Signalverlauf uart_rxd_sync dargestellt, der in der Abbildung perfekt zu dem Zähler "baudcnt" passt. Das echte System erzeugt die UART Signale allerdings mit einer abweichenden Frequenz. Bei der Konstruktion des Baudzähler geht man einfach davon aus, dass die eigene Taktfrequenz perfekt ist. |
* Entwerfen Sie eine Architektur für "uart_rx_baudcnt". | * Entwerfen Sie eine Architektur für "uart_rx_baudcnt". | ||
Line 84: | Line 84: | ||
==== uart_rx_shift ==== | ==== uart_rx_shift ==== | ||
- | Das Modul [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/uart_rx_shift.vhd|"uart_rx_shift"]] dient zum Empfang der Daten, die an UART_RXD ankommen. Die Daten von UART_RXD gehen allerdings erst durch die Synchronisierstufe in "uart_rx_edge" und werden um zwei Takte verzögert. | + | Das Modul [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/uart_rx_shift.vhd|"uart_rx_shift"]] dient zum Empfang der Daten, die an UART_RXD ankommen. Die Daten von UART_RXD gehen allerdings erst durch die Synchronisierstufe in "uart_rx_edge" und werden um zwei Takte verzögert. |
* Entwerfen Sie eine Architektur für das Modul "uart_rx_shift", mit der die Daten am Eingang "ser_i" seriell in das Schieberegister übernommen werden. | * Entwerfen Sie eine Architektur für das Modul "uart_rx_shift", mit der die Daten am Eingang "ser_i" seriell in das Schieberegister übernommen werden. | ||
Line 97: | Line 97: | ||
==== uart_rx_bitcnt ==== | ==== uart_rx_bitcnt ==== | ||
- | Das Modul [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/uart_rx_bitcnt.vhd|"uart_rx_bitcnt"]] zählt nicht nur die empfangenen Bits, sondern erzeugt gleichzeitig das "shift" Signal für das Schieberegister und setzt den Baudzähler "uart_rx_baudcnt" zurück. | + | Das Modul [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/uart_rx_bitcnt.vhd|"uart_rx_bitcnt"]] zählt nicht nur die empfangenen Bits, sondern erzeugt gleichzeitig das "shift" Signal für das Schieberegister und setzt den Baudzähler "uart_rx_baudcnt" zurück. |
* Der Zähler wird von dem Signal der Flankenerkennung "edge_i" und dann von den Signalen vom Baudcounter "uart_rx_baudcnt" beeinflusst. | * Der Zähler wird von dem Signal der Flankenerkennung "edge_i" und dann von den Signalen vom Baudcounter "uart_rx_baudcnt" beeinflusst. |