[[dtlab_t9]]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
dtlab_t9 [2024/05/27 23:16]
beckmanf created
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. ​+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 25: Line 25:
   * 57600 Baud   * 57600 Baud
   * Acht Datenbits, kein Paritybit   * Acht Datenbits, kein Paritybit
-  * Zwei Stopbits+  * Ein Stopbit
  
 Die Architektur des UART Receivers ist in Abbildung 1 dargestellt. Die Architektur des UART Receivers ist in Abbildung 1 dargestellt.
Line 41: Line 41:
 Die Daten kommen auf UART_RXD seriell an. Nach dem Empfang werden die acht empfangenen Datenbits auf den roten LEDs dargestellt. Die Daten kommen auf UART_RXD seriell an. Nach dem Empfang werden die acht empfangenen Datenbits auf den roten LEDs dargestellt.
  
-{{ :​public:​praktikum_digitaltechnik:​dt-uart-tx-timing.svg |}}+{{ :​public:​praktikum_digitaltechnik:​uart-rx-timing.svg | UART Receiver Timing}}
  
-{{ :​public:​praktikum_digitaltechnik:​dt-uart-tx-timing.svg?​linkonly |Abbildung 3}}: UART Receiver Timing+{{ :​public:​praktikum_digitaltechnik:​uart-rx-timing.svg?​linkonly |Abbildung 3}}: UART Receiver Timing
  
 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/edge.vhd|"edge"]] Komponente enth盲lt ​den Flankendetektor ​aus den vorherigen Projekten+  * 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
 +
 +==== uart_rx_edge ====
 +
 +Die Komponente "​uart_rx_edge"​ enth盲lt einen Flankendetektor und eine Synchronisierstufe. Das Modul sorgt daf眉r, dass das Flankenerkennungssignal "​edge"​ aktiv wird, bevor das Signal an "​rxd_o"​ von 1 auf 0 geht.
 +
 +  * Analysieren Sie den VHDL Code in "​uart_rx_edge"​.
 +  * Zeichnen Sie die Schaltung auf Papier
 +  * Erl盲utern Sie das Verhalten mit einem Timingdiagramm in dem die Signale UART_RXD, uart_rxd_sync,​ sr, edge und clk vorkommen
 +
 +Im Timingdiagramm in Abbildung 3 sind die Signale uart_rxd_sync und edge dargestellt. Ihr Timingdiagramm soll erl盲utern wie es dazu kommt und wie sich UART_RXD dazu verh盲lt.
  
 ==== 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. ​+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"​.
   * Die Architektur soll f眉r eine Baudrate von 57600 Baud geeignet sein.   * Die Architektur soll f眉r eine Baudrate von 57600 Baud geeignet sein.
 +  * Fangen Sie zun盲chst mit einer Bitdauer von 4 Takten an, wie in Abbildung 3 dargestellt.
 +  * Der Eingang "​sres_i"​ hat die Funktion eines high aktiven, synchronen Resets.
   * Zeichnen Sie die Architektur auf Papier auf   * Zeichnen Sie die Architektur auf Papier auf
-  * Zeigen Sie die Funktion im Simulator wie in Abbildung 3+  ​* Instantiieren Sie das Modul in "​uart_rx"​.听
 +  * Der Eingang "​sres_i"​ wird sp盲ter von dem jetzt noch nicht vorhandenen Modul "​uart_rx_bitcnt"​ erzeugt. Schreiben Sie direkt in "​uart_rx"​ einen kurzen Code f眉r den Simulator, der das Signal f眉r 30 Takt auf '​0',​ dann f眉r drei Takte auf '​1'​ und dann wieder auf '​0'​ setzt.听
 +  ​* Zeigen Sie die Funktion im Simulator wie in Abbildung 3, d.h. zeigen Sie, dass en_h und en_f korrekt erzeugt werden.听
 +
 +Jetzt sollte das Modul "​uart_rx_baudcnt"​ fertig sein. Es muss sp盲ter im Gesamtmodell noch die korrekte Funktion unter Beweis stellen.
  
 ==== 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. ​+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 an UART_RXD ​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.
   * Zeichnen Sie die Architektur auf Papier auf   * Zeichnen Sie die Architektur auf Papier auf
-  * Zeigen ​Sie die Funktion der Gesamtuart im Simulator+  * Schreiben ​Sie den VHDL Code f眉r das Schieberegister听
 +  * Instantiieren Sie das Modul in "​uart_rx"​听
 +
 +Jetzt muss das Schiebesignal "​shift_i"​ zum richtigen Zeitpunkt wie in Abbildung 3 dargestellt kommen. Das Schiebesignal wird vom Modul "​uart_rx_bitcnt"​ erzeugt. Pr眉fen Sie im Simulator ​die Funktion ​des Schieberegister zun盲chst mit einem kurzen Code, der das Schiebesignal zweimal aktiviert.听
 +
  
 ==== 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.
Line 93: Line 114:
 ==== Software auf dem Rechner ==== ==== Software auf dem Rechner ====
  
-Auf dem Rechner wird ein Terminalprogramm ben枚tigt, mit dem die Daten von der seriellen Schnittstelle angezeigt werden k枚nnenAuf Linux oder MacOS ist das "​screen"​ und auf Windows [[https://www.putty.org|putty]].+Nach dem Einstecken des Modems erscheint unter /​dev/​ttyXXXXXXX ​ein neues DeviceUnter Linux ist dies /​dev/​ttyUSB0,​ unter MacOS ist dies /dev/tty.usbserial-DM000IKG
  
-  * Unter Linux oder MacOS kann man "​screen"​ als terminal verwenden听+Auf dem Rechner wird ein Terminalprogramm ben枚tigtmit dem die Daten von der seriellen Schnittstelle angezeigt werden k枚nnen
-  * Nach dem Einstecken des Modems erscheint unter /​dev/​ttyXXXXXXX ​ein neues Device. Unter Linux ist dies /​dev/​ttyUSB0unter MacOS ist dies /dev/tty.usbserial-DM000IKG+
-  * Unter Linux muss man das terminal als root starten ​und die Baudrate von 57600 Baud angeben.+  * Unter MacOS ist ''​screen''​ vorinstalliert ​und kann so verwendet werden:
  
 <​code>​ <​code>​
Line 103: Line 124:
 </​code>​ </​code>​
  
-  * Unter MacOS ist kein sudo notwendig+  * 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:听
 +
 +<​code>​听
 +gtkterm --port /​dev/​ttyUSB0 --speed 57600 --echo听
 +</​code>​
  
 Tippen Sie im Terminalprogramm Zeichen ein und beobachten Sie, ob die Zeichen korrekt auf den roten LEDs angezeigt werden. Die [[https://​de.wikipedia.org/​wiki/​American_Standard_Code_for_Information_Interchange#​Zusammensetzung|ASCII Tabelle]] zeigt die Codes f眉r die verschiedenen Buchstaben. Tippen Sie im Terminalprogramm Zeichen ein und beobachten Sie, ob die Zeichen korrekt auf den roten LEDs angezeigt werden. Die [[https://​de.wikipedia.org/​wiki/​American_Standard_Code_for_Information_Interchange#​Zusammensetzung|ASCII Tabelle]] zeigt die Codes f眉r die verschiedenen Buchstaben.
  
  
  • dtlab_t9.1716844604.txt.gz
  • Last modified: 2024/05/27 23:16
  • by beckmanf