[[dtlab_t6]]

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dtlab_t6 [2024/04/28 17:30]
beckmanf [Flankendetektor über sechs Takte]
dtlab_t6 [2025/03/14 20:43] (current)
beckmanf switch code server
Line 7: Line 7:
  
 ===== Vorbereitung ===== ===== Vorbereitung =====
 +
 +==== Logikanalysator im MSO-X 4034A ====
 +
 +Das Oszilloskop MSO-X 4034A hat vier analoge Kanäle. Zusätzlich gibt es noch 16 digitale Kanäle. Wenn man mit digitalen Kanälen arbeitet, dann nennt sich dies Logikanalysator. ​
 +
 +{{::​dt-logicprobe.jpg|8 Kanal Logicprobe Agilent 54620-61601}}
 +
 +Abb. 1: 8 Kanal Logicprobe Agilent 54620-61601
 +
 +In Abbildung 1 ist eine 8 Kanal Logicprobe für die digitalen Kanäle 0 bis 7 dargestellt. Es gibt noch eine weitere Logicprobe für die Kanäle 8 bis 15. Das besondere an den Logicprobes ist, dass die analoge Spannung direkt am Eingang des Oszilloskops mit einer Vergleichsspannung verglichen wird. Danach wird nur noch gespeichert ob es sich um eine 0 oder 1 handelt. Wenn die Spannung größer als die Vergleichsspannung ist, dann wird eine 1 gespeichert,​ sonst eine 0. Wie Sie die Logicprobes einschalten und wie Sie die Vergleichsspannung einstellen finden Sie in Kapitel 6 vom [[dtlab_t2#​einfuehrung_oszilloskop|Handbuch des Oszilloskops]].
  
 ==== Projekt aktualisieren ==== ==== Projekt aktualisieren ====
Line 17: Line 27:
  
 ==== VHDL toplevel top_shift ==== ==== VHDL toplevel top_shift ====
-Die Datei [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​dtlab/​-/​blob/​master/​src/​top_shift.vhd|top_shift.vhd]] beschreibt das Modul "​top_shift"​. "​top_shift"​ stellt den toplevel auf dem FPGA dar. In Abbildung ​sind die Ein- und Ausgänge von "​top_shift"​ dargestellt.+Die Datei [[https://caeis.etech.fh-augsburg.de/​beckmanf/​dtlab.git/tree/​src/​top_shift.vhd|top_shift.vhd]] beschreibt das Modul "​top_shift"​. "​top_shift"​ stellt den toplevel auf dem FPGA dar. In Abbildung ​sind die Ein- und Ausgänge von "​top_shift"​ dargestellt.
  
 <​html>​ <​html>​
Line 23: Line 33:
 </​html>​ </​html>​
  
-Abb. 1: Toplevel top_shift+Abb. 2: Toplevel top_shift
  
-Im VHDL Code werden zunächst einige Eingänge vom FPGA auf Signale mit einem passenderen Namen zugewiesen. Das Taktsignal CLOCK_50 kommt vom 50 MHz Taktoszillator auf der FPGA Platine. ​+Im VHDL Code von "​top_shift.vhd" ​werden zunächst einige Eingänge vom FPGA auf Signale mit einem passenderen Namen zugewiesen. Das Taktsignal CLOCK_50 kommt vom 50 MHz Taktoszillator auf der FPGA Platine. ​
  
 <code vhdl> <code vhdl>
Line 50: Line 60:
 **Zeichnen Sie die Schieberegisterschaltung.** **Zeichnen Sie die Schieberegisterschaltung.**
  
-In Abbildung ​ist ein beispielhafter Signalverlauf für clk, rst_n und x dargestellt. **Ergänzen Sie das Timingdiagramm**.+In Abbildung ​ist ein beispielhafter Signalverlauf für clk, rst_n und x dargestellt. **Ergänzen Sie das Timingdiagramm**.
  
 <​html>​ <​html>​
Line 56: Line 66:
 </​html>​ </​html>​
  
-Abb. 2: Timingdiagramm Schieberegister+Abb. 3: Timingdiagramm Schieberegister
  
 ==== Anschluss an den Expansionport 1 ==== ==== Anschluss an den Expansionport 1 ====
Line 64: Line 74:
 {{::​exp-foto.jpg?​200|Expansionport auf dem FPGA}}{{::​exp-schem.jpg?​600| Schaltplan vom Expansionport}} {{::​exp-foto.jpg?​200|Expansionport auf dem FPGA}}{{::​exp-schem.jpg?​600| Schaltplan vom Expansionport}}
  
-Abb. 2: Expansionport auf dem FPGA und aus dem Schaltplan+Abb. 4: Expansionport auf dem FPGA und aus dem Schaltplan
  
-In Abbildung ​ist die Zuordnung des Ports EXP[7..0] zu den Pins auf der FPGA Platine zu sehen. Der folgende Code aus "​top_shift.vhd"​ zeigt welche Signale am Ausgangsport zu sehen sind. Auf EXP(0) wird beispielsweise das Signal vom Eingangsport CLOCK_50 ausgegeben. ​+In Abbildung ​ist die Zuordnung des Ports EXP[7..0] zu den Pins auf der FPGA Platine zu sehen. Der folgende Code aus "​top_shift.vhd"​ zeigt welche Signale am Ausgangsport zu sehen sind. Auf EXP(0) wird beispielsweise das Signal vom Eingangsport CLOCK_50 ausgegeben. ​
  
 <code vhdl> <code vhdl>
Line 86: Line 96:
 Der Eingang SW wird in der Simulation mit einem konstanten Wert simuliert. Der Eingang SW wird in der Simulation mit einem konstanten Wert simuliert.
  
-Für die Stimulation der Eingänge wird die Testbench in [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​dtlab/​-/​blob/​master/​src/​t_top_shift.vhd|t_top_shift.vhd]] eingesetzt.+Für die Stimulation der Eingänge wird die Testbench in [[https://caeis.etech.fh-augsburg.de/​beckmanf/​dtlab.git/tree/​src/​t_top_shift.vhd|t_top_shift.vhd]] eingesetzt.
  
 Dort ist die Schaltung top_shift als Device Under Test (DUT) instantiiert. In der Testbench gibt es VHDL Code für die Simulation des 50 MHz Taktsignals,​ den asynchronen Reset und den Taster KEY(1) für den Eingang x des Schieberegisters. Dort ist die Schaltung top_shift als Device Under Test (DUT) instantiiert. In der Testbench gibt es VHDL Code für die Simulation des 50 MHz Taktsignals,​ den asynchronen Reset und den Taster KEY(1) für den Eingang x des Schieberegisters.
Line 100: Line 110:
  
 {{::​ghdl-top-shift.jpg|ghdl Simulation von top_shift}} {{::​ghdl-top-shift.jpg|ghdl Simulation von top_shift}}
-Abb. 3: gtkwave zeigt die Simulationsergebnisse der ghdl Simulation von top_shift+Abb. 5: gtkwave zeigt die Simulationsergebnisse der ghdl Simulation von top_shift
  
-In Abbildung ​ist die Darstellung der Simulationsergebnisse mit gtkwave abgebildet.+In Abbildung ​ist die Darstellung der Simulationsergebnisse mit gtkwave abgebildet. gtkwave zeigt nicht alle Signale, sondern einige ausgewählte,​ die in der Datei view_signals.gtkw festgelegt sind. Mit der aktuellen Auswahl wird das Schieberegister mit Takt, reset und dem Eingang x dargestellt
  
-gtkwave zeigt nicht alle Signale, sondern einige ausgewählte,​ die in der Datei view_signals.gtkw festgelegt sind. Mit der aktuellen ​Auswahl ​wird das Schieberegister mit Takt, reset und dem Eingang x dargestellt+Diese Signale ​sollen auf dem Expansionport ausgegeben werden. Mit der aktuellen ​Signalauswahl ​wird der Expansionport in der Simulation nicht dargestellt. In der Testbench ist das Signal "​sim_exp"​ an den Ausgangsport EXP von top_shift angeschlossen. **Wählen Sie das Signal sim_exp links aus und stellen Sie sim_exp in gtkwave dar. Machen Sie einen Screenshot.** Beurteilen Sie ob alle relevanten Signale am Expansionport zu sehen sind.
  
-Diese Signale sollen auf dem Expansionport ausgegeben werden. Das ist mit der aktuellen ​Signalauswahl ​nicht möglichIn der Testbench ist das Signal ​"sim_exp" ​an den Ausgangsport EXP von top_shift angeschlossen. **Wählen Sie das Signal sim_exp links aus und stellen Sie sim_exp ​in gtkwave ​darMachen ​Sie einen Screenshot.**+Wenn Sie die Auswahl ​der dargestellten Signale in gtkwave geändert haben und gtkwave schließen und neu starten, dann wird wieder die vorkonfigurierte ​Signalauswahl ​dargestelltSie können gtkwave auch geöffnet lassen, den VHDL Code ändern, dann im Simulationsverzeichnis ​"make" ​eingeben ​und auf den Reloadknopf ​in gtkwave ​drückenAlternativ können ​Sie die Signalauswahl auch mit "File -> Write Save File" speichern. Dann wird auch nach einem Neustart von gtkwave die gespeicherte Signalauswahl dargestellt.
  
 ==== Umstrukturierung und Instantiierung des Flankendetektors ==== ==== Umstrukturierung und Instantiierung des Flankendetektors ====
  
-Die Funktion des Flankendetektors ist direkt in top_shift.vhd beschrieben. Der Flankendetektor soll jetzt in eigenes Modul und damit in eine eigene Datei bewegt werden. Die Funktion der Schaltung soll sich nicht ändern, d.h. wir strukturieren den Code nur etwas anders. Dazu ist schon die Datei [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​dtlab/​-/​blob/​master/​src/​edge.vhd|edge.vhd]] vorbereitet. Die Datei enthält schon die entity "​edge"​ mit den geplanten Ein- und Ausgängen.+Die Funktion des Flankendetektors ist direkt in top_shift.vhd beschrieben. Der Flankendetektor soll jetzt in eigenes Modul und damit in eine eigene Datei bewegt werden. Die Funktion der Schaltung soll sich nicht ändern, d.h. wir strukturieren den Code nur etwas anders. Dazu ist schon die Datei [[https://caeis.etech.fh-augsburg.de/​beckmanf/​dtlab.git/tree/​src/​edge.vhd|edge.vhd]] vorbereitet. Die Datei enthält schon die entity "​edge"​ mit den geplanten Ein- und Ausgängen.
  
 <​html>​ <​html>​
Line 116: Line 126:
 </​html>​ </​html>​
  
-Abb. 4: Das Modul "​edge"​ als Flankendetektor+Abb. 6: Das Modul "​edge"​ als Flankendetektor
  
-Wie in Abbildung ​dargestellt,​ hat "​edge"​ einen Takteingang "​clk",​ einen asynchronen Reseteingang "​rst_n",​ einen Eingang "​x_i"​ und einen Ausgang "​edge_o"​.+Wie in Abbildung ​dargestellt,​ hat "​edge"​ einen Takteingang "​clk",​ einen asynchronen Reseteingang "​rst_n",​ einen Eingang "​x_i"​ und einen Ausgang "​edge_o"​.
  
 Strukturieren Sie den Code um und bringen Sie die Funktion des Flankendetektors in das Modul "​edge"​. Das Modul "​edge"​ wird dann in "​top_shift"​ instantiiert. Überprüfen Sie mit dem Simulator, dass die Funktion sich nicht geändert hat. **Machen Sie einen Screenshot von der Simulation der neuen Schaltung.** Strukturieren Sie den Code um und bringen Sie die Funktion des Flankendetektors in das Modul "​edge"​. Das Modul "​edge"​ wird dann in "​top_shift"​ instantiiert. Überprüfen Sie mit dem Simulator, dass die Funktion sich nicht geändert hat. **Machen Sie einen Screenshot von der Simulation der neuen Schaltung.**
Line 124: Line 134:
 ==== Ringzähler für die roten LEDs ==== ==== Ringzähler für die roten LEDs ====
  
-Die roten LEDs werden derzeit direkt von den Schaltern SW gesteuert. Die roten LEDs sollen mit einem 10 Bit Ringzähler angesteuert werden. Der Ringzähler soll in die Datei [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​dtlab/​-/​blob/​master/​src/​ringcnt.vhd|ringcnt.vhd]] kommen. Die Datei ist schon vorbereitet,​ aber es fehlen u.a. die Ports in der entity.+Die roten LEDs werden derzeit direkt von den Schaltern SW gesteuert. Die roten LEDs sollen mit einem 10 Bit Ringzähler angesteuert werden. Der Ringzähler soll in die Datei [[https://caeis.etech.fh-augsburg.de/​beckmanf/​dtlab.git/tree/​src/​ringcnt.vhd|ringcnt.vhd]] kommen. Die Datei ist schon vorbereitet,​ aber es fehlen u.a. die Ports in der entity.
  
 <​html>​ <​html>​
Line 130: Line 140:
 </​html>​ </​html>​
  
-Abb. 5: Ein- und Ausgänge des Moduls ringcnt+Abb. 7: Ein- und Ausgänge des Moduls ringcnt
  
-Die Ein- und Ausgänge des Moduls "​ringcnt"​ sollen wie in Abbildung ​dargestellt sein. Der Ausgangsport y_o stellt den Zustand der zehn Flipflops im Ringzähler dar. Der Ringzähler wird dann im Toplevel top_shift instantiiert. Der Ausgang y_o soll die roten LEDs ansteuern. ​+Die Ein- und Ausgänge des Moduls "​ringcnt"​ sollen wie in Abbildung ​dargestellt sein. Der Ausgangsport y_o stellt den Zustand der zehn Flipflops im Ringzähler dar. Der Ringzähler wird dann im Toplevel top_shift instantiiert. Der Ausgang y_o soll die roten LEDs ansteuern. ​
  
   * Ergänzen Sie die port Definition in der entity von ringcnt   * Ergänzen Sie die port Definition in der entity von ringcnt
Line 179: Line 189:
 Stellen Sie im Labor Ihre Ergebnisse vor. Bringen Sie die Zeichnungen und die Screenshots der Simulationen mit. Stellen Sie im Labor Ihre Ergebnisse vor. Bringen Sie die Zeichnungen und die Screenshots der Simulationen mit.
  
-==== Nachweis ​Flankendetektor ​auf dem FPGA am Expansionport ====+==== Nachweis ​Ringzähler en_i = '​1' ​auf dem FPGA am Expansionport ====
  
 Schliessen Sie zunächst eine Analogprobe des Oszilloskops an den Expansionport an und zeigen Sie das Taktsignal. Schliessen Sie zunächst eine Analogprobe des Oszilloskops an den Expansionport an und zeigen Sie das Taktsignal.
  
-Schliessen Sie dann vier Probes vom Logikanalysator an den Expansionport an um die Signale clk, rst_n, x und en zu zeigenStellen Sie das Oszilloskop auf "​Singleshot"​ Betrieb um und zeigen ​Sie, dass die Flankenerkennung funktioniertMachen ​Sie einen Screenshot um die Funktion ​zu dokumentieren.+Schliessen Sie die Probes ​0 bis 7 vom Logikanalysator an den Expansionport an um die Signale clk, rst_n, xen und die vier Bit des Ringoszillators sichtbar ​zu machenSorgen ​Sie dafür, dass der en_i Eingang des Ringzählers permanent auf '​1'​ ist. Zeigen Sie die Funktion des Ringoszillators für en_i = '​1'​ am Logikanalysator anhand der vier beobachteten Bits des RingoszillatorsDokumentieren ​Sie die Funktion ​mit einem Screenshot.
  
-==== Nachweis ​Ringzähler en_i = '​1' ​auf dem FPGA am Expansionport ====+==== Nachweis ​Flankendetektor ​auf dem FPGA am Expansionport ====
  
-Schliessen ​Sie die restlichen vier Probes vom Logikanalysator an den Expansionport an um zusätzlich die vier Bit des Ringoszillators sichtbar zu machen. Sorgen ​Sie dafür, dass der en_i Eingang des Ringzählers permanent auf '​1'​ ist. Zeigen Sie die Funktion des Ringoszillators für en_i = '​1'​ am Logikanalysator anhand der vier beobachteten BitsDokumentieren ​Sie die Funktion ​mit einem Screenshot.+Stellen ​Sie das Oszilloskop auf "​Singleshot"​ Betrieb ​um und zeigen ​Sie, dass die Flankenerkennung funktioniertMachen ​Sie einen Screenshot um die Funktion ​zu dokumentieren.
  
 ==== Nachweis Ringzähler + Flankenerkennung auf dem FPGA am Expansionport ==== ==== Nachweis Ringzähler + Flankenerkennung auf dem FPGA am Expansionport ====
  • dtlab_t6.1714318200.txt.gz
  • Last modified: 2024/04/28 17:30
  • by beckmanf