[[dtpr_versuch_4]]

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
dtpr_versuch_4 [2013/10/17 16:35]
beckmanf Version von Hans
dtpr_versuch_4 [2023/04/02 17:03] (current)
beckmanf [Aufgabe Siebensegmentanzeige] How to setup a new module
Line 1: Line 1:
-====== Praktikum ​Digitaltechnik ​Versuch ​4 ======+===== Digitaltechnik ​Praktikum ​Versuch ​2 - Kombinatorische Schaltung / Hierarchische Schaltung ​=====
  
-===== Ziele: ===== +Das Ziel dieses Versuchs ist die Beschreibung ​von kombinatorischen Schaltungen mit Hilfe von
-In dieser Versuchseinheit stehen folgende Lernziele im Vordergrund:​ +
-  * Entwicklung und vollständige Überprüfung einfacher Zustandsautomaten +
-  * Kopplung ​von Zustandsautomaten +
-  * Synchrone Standardelemente und -schaltungen einsetzen +
-  * Aufbau ​von schnellen Zählern aus einem Schieberegister ​+
  
 +  * Booleschen Ausdrücken
 +  * Conditional Signal Assignments
 +  * with select Beschreibung
  
-===== Anerkennung als Studienarbeit ===== +sowie die hierarchische Beschreibung ​von Schaltungen in VHDL. Als praktisches Beispiel werden Sie eine Schaltung entwerfen, die jeweils vier SW Schalter binär interpretiert als Ziffer an einer Siebensegmentanzeige anzeigt. Die Eingänge der Schaltung werden mit den Schaltern verbunden und die Ausgänge werden ​mit der Siebensegmentanzeige und den roten LED's verbundenWenn beispielsweise die Schalter SW3..SW0 auf "​0101"​ stehen, dann soll die Ziffer "​5"​ an der Siebensegmentanzeige angezeigt werden.
-Zur Anerkennung dieses Praktikumsversuchs als Teilstudienleistung ist es notwendig, alle vorbereitenden Teilaufgaben und Laboraufgaben ​von den jeweiligen Betreuern ​mit Unterschrift auf dem {{:​public:​praktikum_digitaltechnik:​versuch4:​praktikumsprotokoll-digitaltechnik-versuch4.pdf|Praktikumsprotokoll}} bestätigen zu lassen.+
  
-===== Theoretischer Hintergrund ​===== +==== Projekt aktualisieren ​====
-Die bisher kennen gelernten Standardelemente und Entwurfstechniken sollen wiederholt und damit vertieft werden. Im Fokus steht hier aber die Entwicklung von Zustandsautomaten.+
  
-Da wir uns bewußt nur auf endliche Automaten vom Typ Moore beschränken,​ werden die Entwurfsregeln für synchrone Schaltungen noch um einen Punkt erweitert:+Um ihre lokalen Projektdateien mit eventuellen neuen Dateien ​auf dem git Server zu aktualisieren können sie im Verzeichnis "​digitaltechnikpraktikum"​
  
-  * Es gibt nur ein gemeinsames Taktsignal clk, welches an allen Takteingängen angeschlossen wird. +<​code>​ 
-  * Ein Taktsignal wird niemals über kombinatorische Elemente verknüpft. +git pull
-  * Jedes synchrone Modul besitzt ein asynchrones Rücksetzsignal,​ das nicht über kombinatorische Logikelemente geführt werden darf. +
-  * Als Zustandsautomaten dürfen nur Moore-Maschinen eingesetzt werden. +
- +
-Das Blockdiagramm eines Moore-Automaten ist nachfolgend nochmal abgebildet. +
- +
-{{:​public:​praktikum_digitaltechnik:​versuch4:​fsm-blockdiagram-deutsch.png|Moore-Automat - Blockdiagramm}} +
- +
-Außerdem wird ein Ansatz zur Entwicklung und Überpüfung einfacher Zustandsautomaten unter Verwendung eines Zustandsmaschineneditors gezeigt. +
- +
-==== 2-Bit Modulo-3 Abwärtszähler ==== +
-Automatendiagramme (engl. State Machine Diagram) können mit Hilfe des Zustandsmaschineneditors QFSM sehr einfach erstellt werden. QFSM bietet außerdem verschiedene Möglichkeiten,​ um aus der grafischen Darstellung in verschiedene Beschreibungssprachen zu exportieren. +
- +
-=== Entwurf === +
-Nachfolgend sind Symbol und Zustandsdiagramm eines 2-Bit Modulo-3 Abwärtszählers **cnt2dnmod3** dargestellt. Nach dem obligatorischen asynchronen Reset (durch rst_n) in den Zustand s0 ist der Zählzyklus 2, 1, 0. Dabei wird bei Erreichen des Zählwerts 0 das Ausgangssignal tc_o auf '​1'​ gesetzt. +
- +
-{{:​public:​praktikum_digitaltechnik:​versuch4:​cnt2dnmod3_symbol.png|2-Bit Modulo-3 Abwärtszählers - Symbol}} +
-   +
-Ohne Legende ist es nicht einfach bis unmöglich, das Diagramm zu interpretieren. Welche Eingangssignale stehen an den Zustandsübergängen ? Welche Bedeutung haben die einzelnen Bits in den Zuständen ? Deshalb ist es immer notwendig, eine Legende, welche direkt aus QFSM erstellt werden kann, zu erzeugen. +
- +
-  Inputs: ​  ​en_pi +
-  State/​Output tc_o count_o[1] count_o[0] +
-  s0           ​1 ​   0          0           +
-  s1           ​0 ​   1          0           +
-  s2           ​0 ​   0          1           +
- +
-{{:​public:​praktikum_digitaltechnik:​versuch4:​cnt2dnmod3_statediagram.png|2-Bit Modulo-3 Abwärtszählers - Zustandsdiagramm}} +
- +
-Beim Export der VHDL-Beschreibung steht die Legende nochmals als Kommentar am Anfang des Quellcodes. +
- +
-<​code ​vhdl cnt2dnmod3_qfsm.vhd+
--- Inputs: ​  ​en_pi +
--- State/​Output tc_o count_o[1] count_o[0] +
--- s0           ​1 ​   0          0           +
--- s1           ​0 ​   1          0           +
--- s2           ​0 ​   0          1           +
- +
-LIBRARY IEEE; +
- +
-USE IEEE.std_logic_1164.ALL;​ +
- +
-ENTITY cnt2dnmod3 IS +
-  PORT (clk     : IN  std_ulogic;​ +
-        rst_n   : IN  std_ulogic;​ +
-        en_pi   : IN  std_ulogic;​ +
-        tc_o    : OUT std_ulogic;​ +
-        count_o : OUT std_ulogic_vector(1 DOWNTO 0)); +
-END cnt2dnmod3;​ +
- +
-ARCHITECTURE qfsm OF cnt2dnmod3 IS +
- +
-  TYPE state_type IS (s0, s1, s2); +
-  SIGNAL next_state, current_state : state_type;​ +
- +
-BEGIN +
-  state_register : PROCESS (rst_n, clk) +
-  BEGIN +
-  ...+
 </​code>​ </​code>​
  
-=== Verifikation === +eingebenDann werden neue oder geänderte Daten vom git server geladenWenn auf dem Server Änderungen an Dateien vorgenommen wurden für die Sie auch Änderungen vorgenommen haben, dann wird die pull Aktion abgebrochenIn diesem Fall müssen die Dateien zusammengeführt werden, allerdings können Sie auch ihre Änderungen verwerfenSie können ihre Änderungen verwerfen und den letzten Stand wiederherstellen mit
-Zur vollständigen Verifikation einer Zustandsmaschine ist es notwendig, alle Zustandsübergänge zu durchlaufen,​ d.h. zu stimulieren. Dies geschieht am besten systematisch. +
- +
-<code vhdl> +
-  stimuli_p : PROCESS +
- +
-  BEGIN +
- +
-    WAIT UNTIL rst_n = '​1'; ​           -- wait until asynchronous reset ... +
-                                        -- ... is deactivated +
- +
-    -- Complete Verification of State Machine means: stimulate every transition:​ +
-    -- Transition 0 +
-    en_pi <= '​0'; ​                      -- deactivate enable input en_pi +
-    WAIT FOR period; +
- +
-    -- Transition 1 +
-    en_pi <= '​1'; ​                      -- activate enable input en_pi +
-    WAIT FOR period; +
- +
-    -- Transition 2 +
-    en_pi <= '​0'; ​                      -- deactivate enable input en_pi +
-    WAIT FOR period; +
- +
-    -- Transition 3 +
-    en_pi <= '​1'; ​                      -- activate enable input en_pi +
-    WAIT FOR period; +
- +
-    -- Transition 4 +
-    en_pi <= '​0'; ​                      -- deactivate enable input en_pi +
-    WAIT FOR period; +
- +
-    -- Transition 5 +
-    en_pi <= '​1'; ​                      -- activate enable input en_pi +
-    WAIT FOR period; +
- +
-    clken_p <= false; ​                  -- switch clock generator off +
- +
-    WAIT;                               -- suspend process +
-  END PROCESS;+
  
 +<​code>​
 +cd
 +cd digitaltechnikpraktikum/​src
 +git checkout .
 +cd ..
 </​code>​ </​code>​
  
-=== WAIT-Anweisungen in Testbenches === +Danach sollte die pull Aktion funktionieren.
-In VHDL erfolgen Wertzuweisungen an Signale über ein sogenanntes Transaktionskonzept. Signalaktualisierungen erfolgen erst dann, wenn alle im vorherigen Simulationszyklus aktivierten Prozesse abgearbeitet wurden und wieder in einen Wartezustand übergegangen sind.+
  
-Da aufgrund von Entwurfsregeln nur synchrone Maschinen entwickelt werden dürfen, erfolgen in der Verifikation im Simulator (wie auch im Prototypentest) alle Signalzuweisungen synchron. Damit kann als Referenz eine vorher definierte Periode verwendet werden, wie in obigem Stimulusprozess ''​stimuli_p''​.+==== Beispiel ledcomb_rtl.vhd ====
  
-<code vhdl> +Im Projektverzeichnis finden Sie als Beispiel für die Darstellung von kombinatorischen Schaltungen die Datei [[https://​gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​src/​ledcomb_rtl.vhd|ledcomb_rtl.vhd]]. Dazu passend gibt es das Syntheseverzeichnis "pnr/ledcomb"​.
-    en_pi <= '​1'; ​                      -- activate enable input en_pi +
-    WAIT FOR period; +
-</code>+
  
-**Syntax:**+Die Schaltung ledcomb hat als Eingänge die Schalter "​SW"​. Die Ausgänge sind die roten LEDs "​LEDR"​ und die grünen LEDs "​LEDG"​. Die roten LEDs zeigen den Zustand der Schalter an. An den grünen LEDs werden verschiedene boolesche Funktionen dargestellt. In der Schaltung ledcomb gibt es weiterhin drei Signale s0, s1 und s2. Die Signale können wie Netze in einem Schaltplan verstanden werden.
  
-  ​WAIT [FOR time_expression]; ​-- stoppt ​die Prozessabarbeitung ​für die angegebene Zeitdauer +  - Skizzieren Sie die Schaltungen ​für die Ausgänge LEDG(0), LEDG(1), LEDG(2), LEDG(3) 
-   +  ​- Für welche Schalterkombinationen leuchtet der Ausgang LEDG(0)? 
-**Beispiele:​**+  - Für welche Schalterkombinationen leuchtet der Ausgang LEDG(1)? 
 +  - Für welche Schalterkombinationen leuchtet der Ausgang LEDG(2)? 
 +  - Für welche Schalterkombinationen leuchtet der Ausgang LEDG(3)? 
 +  - Für welche Schalterkombinationen leuchtet der Ausgang LEDG(4)? 
 +  - Skizzieren Sie die Schaltung für den Ausgang LEDG(4) 
 +  - Erläutern Sie wie die Ausgänge LEDG(7..5) von den Eingängen SW(9..6) abhängen.
  
-<code vhdl> +Wechseln Sie jetzt in das Verzeichnis "pnr/ledcomb",​ starten Sie die Schaltungssynthese und laden Sie das Design auf das FPGA Board.
-  WAIT FOR 5 NS; +
-  WAIT FOR period; +
-  WAIT FOR period ​2; +
-  WAIT FOR 6 * period; +
-</​code>​+
  
-**Syntax:**+  - Zeigen Sie, dass die grünen LEDs LEDG(7..5) die Anzahl der eingeschalteten Schalter SW(9..6) als Binärzahl anzeigt. 
 +  - Wie und Warum unterscheiden sich die Dateien [[https://​gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​pnr/​ledcomb/​ledcomb_pins.tcl|ledcomb_pins.tcl]] und [[https://​gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​pnr/​ledsw-make/​ledsw_pins.tcl|ledsw_pins.tcl]]?​
  
-  WAIT; -- warte für immer, beendet somit den Prozess (engl. suspend)+=== Analyse des Syntheseergebnisses ===
  
-**Beispiel:** +Die Quartussoftware erlaubt eine Analyse des Syntheseergebnisses. In Figure 2-1 im [[https://​www.hs-augsburg.de/​~beckmanf/​restricted/​DE1_V.1.0.1_CDROM/​Datasheets/​Cyclone_II/​cyc2_cii5v1_01.pdf|Cyclone II Datenblatt]] ist die Chipstruktur des FPGA dargestellt. Ein Großteil des FPGA besteht aus Logikelementen (LE), die konfigurierbar miteinander verbunden werden können. Ein Logikelement ist in Figure 2-3 im Datenblatt dargestellt. Mit der "​Four-Input LUT" (eine Lookuptabelle mit 4 Eingängen) kann jede boolesche Funktion mit 4 Eingängen und einem Ausgang dargestellt werden. Im Logikelement befindet sich zusätzlich noch ein Flipflop, das in diesem Versuch nicht benutzt wird. Insgesamt befinden sich auf dem FPGA auf dem Board 18752 Logikelemente. Bei der Synthese müssen die Logikelemente konfiguriert werden, d.h. die boolesche Funktion der "​Four-Input LUT" wird festgelegt, und die Logikelemente müssen miteinander verbunden werden.
-   +
-<code vhdl> +
-    WAIT; +
-  END PROCESS; +
-</code>+
  
-**Syntax:**+Wechseln Sie in das Syntheseverzeichnis,​ starten Sie die Synthese und starten Sie die Quartus GUI.
  
-  WAIT [ON signal_name_1] {,​signal_name_n};​ -- warte, bis sich ein Signalwert in der Liste ändert +<​code>​ 
- +cd 
-**Beispiele:​** +cd digitaltechnikpraktikum/​pnr/​ledcomb 
- +make compile 
-<code vhdl> +make quartus
-  WAIT ON tc_o;+
 </​code>​ </​code>​
  
 +Starten Sie mit "Tools → Netlist Viewers → RTL Viewer"​ die graphische Darstellung Ihres VHDL Codes.
  
-**Syntax:​** +{{  :ledcomb01.jpg  ​| ​Quartus RTL Viewer}}
- +
-  WAIT [UNTIL condition]; -- unterbricht die Prozessbearbeitung solange, bis die Bedingung erfüllt ist +
- +
-**Beispiele:​** +
- +
-<code vhdl> +
-  WAIT UNTIL falling_edge(clk_i);​ +
-  WAIT UNTIL rising_edge(clk_i);​ +
-  WAIT UNTIL count_o = "​1001";​ +
-</​code>​ +
- +
- +
-===== Vorbereitetung ===== +
- +
-Alle nachfolgend beschriebenen Aufgaben müssen wieder vor dem Versuchstermin bearbeitet werden. +
- +
-Laden Sie sich den **QFSM Zustandsmaschineneditor** aus dem Downloadbereich für [[http://​www.hs-augsburg.de/​~haf/​index.php?​site=rgs/​cadtools/​index.html|CAD Tools]] und installieren Sie dieses auf Ihrem persönlichen Computer. Alternativ können Sie die Installation in den PC-Räumen des Rechenzentrums unserer Hochschule nutzen. +
- +
-Arbeiten Sie die {{:​public:​praktikum_digitaltechnik:​versuch4:​qfsm-tutorial.pdf|Kurzanleitung}} zu QFSM durch. +
- +
- +
- +
-==== 3-Bit Modulo-6 Aufwärtszähler ==== +
-Mit Hilfe des Zustandsmaschineneditors QFSM soll ein 3-Bit Modulo-6 Aufwärtszähler **cnt3upmod6** entwickelt werden. Im Gegensatz zu einem Abwärtszähler,​ bei dem das Terminal Count Signal tc_o bei erreichen des Zählwerts 0 gesetzt wird, ist bei einem Aufwärtszähler der maximale Zählwert (hier: der dezimale Wert 5) das Kriterium zum Setzen von tc_o. +
- +
-{{:​public:​praktikum_digitaltechnik:​versuch4:​cnt3upmod6_symbol.png?​300|3-Bit Modulo-6 Aufwärtszähler - Symbol}} +
- +
-Die Hierarchie des Zählermoduls:​ +
- +
-  t_cnt3upmod6(tbench) +
-    cnt3upmod6(qfsm) +
- +
- +
- +
-  * Zeichnen Sie mit QFSM das Zustandsdiagramm und speichern es in ''​src/​cnt3upmod6.fsm''​ im Quellcodeverzeichnis ''​DigitaltechnikPraktikum/​src''​ ab. +
- +
-  * Exportieren Sie daraus eine VHDL-Beschreibung in die Datei ''​DigitaltechnikPraktikum/​src/​cnt3upmod6_qfsm.vhd''​. +
- +
-  * Egänzen Sie die Testbench ''​DigitaltechnikPraktikum/​src/​t_cnt3upmod6.vhd''​ und führen Sie mit ModelSim eine vollständige Verifikation der Maschine durch. Stellen Sie in der Simulationsausgabe auch den aktuellen Zustand (SIGNAL current_state) dar. +
- +
- +
-==== 4-Bit Modulo-10 Aufwärtszähler ==== +
-Mit Hilfe des Zustandsmaschineneditors QFSM soll ein 4-Bit Modulo-10 Aufwärtszähler **cnt4upmod10** entwickelt werden. +
- +
-{{:public:​praktikum_digitaltechnik:​versuch4:​cnt4upmod10_symbol.png?​300|4-Bit Modulo-10 Aufwärtszähler - Symbol}} +
- +
-Gehen Sie bei der Entwicklung des Moduls in den gleichen Schritten vor, wie bei dem Modul 3-Bit Modulo-6 Aufwärtszähler. +
- +
-==== Zweistelliger Dezimalzähler ==== +
-Aus den obigen Zählerblöcken kann nun ein Dezimalzähler für zwei Stellen (Einer- und Zehnerstelle) erstellt werden. Da dieser als Sekundenzähler verwendet werden soll, hat er einen Zahlenraum von 0 .. 59. +
- +
-{{:​public:​praktikum_digitaltechnik:​versuch4:​decimal_upcounter_block_diagram_simple.png?​400|Dezimalzähler - Einfach}} +
- +
-Die Hierarchie des Zählermoduls:​ +
- +
-  t_decimal_upcounter(tbench) +
-    decimal_upcounter(structure) +
-      cnt3upmod6(qfsm) +
-      cnt4upmod10(qfsm) +
- +
- +
-  * Verbinden Sie im Architecture Body ''​structure''​ des Entwurfs **decimal_upcounter** die beiden Zählermodule wie oben gezeigt. +
- +
-  * Ergänzen Sie den Prozess ''​stimuli_p''​ der Testbench **t_decimal_upcounter**,​ um einen vollständigen Zählzyklus zu simulieren. +
- +
-  * Der vollständige Zählzyklus soll auch im Prototypentest auf dem DE1-Board mit dem Logikanalysator gemessen werden. Die Ein-/​Ausgangssignale müssen dazu in der Testumgebung **de1_decimal_upcounter** an folgende General Purpose I/Os geführt werden: +
- +
-  Connector GPIO_1: ​       +
-  GPO_1[3:0] = digit_one_o +
-  GPO_1[6:4] = digit_ten_o +
-  GPO_1[7] ​  = tc_o          +
-  GPO_1[8] ​  = clk_i         +
-   +
- +
-==== Verkehrsampel - Vereinfachte Version 0.1 ==== +
-Zähler werden in der Regel nicht mit Hilfe von Zustandsdiagrammen konstruiert,​ unser Ansatz beruht auf didaktischen Überlegungen. Für die Modellierung von Zählern gibt es in VHDL abstrakte und leistungsfähige Konstrukte, die sich an die Methode aus Versuch 3 (Inkrementer und Zustandsregister) anlehnen.  +
- +
-Ein klassisches Beispiel für den Entwurf von Zustandsmaschinen stellt eine Verkehrsampel dar. +
- +
-Die vier Ampelphasen +
- +
-  * Rot +
-  * Rot und Gelb +
-  * Grün +
-  * Gelb +
- +
-werden zyklisch durchlaufen. Vereinfacht kann damit jeder Phase ein Zustand in einem Zustandsdiagram zugewiesen werden: +
- +
-{{:​public:​praktikum_digitaltechnik:​versuch4:​traffic_light_v0.1_state_diagram.png?​180|Verkehrsampel v0.1 - Zustandsdiagramm}} +
- +
-Die Legende für die Ein-/​Ausgangssignale des Zustandsdiagramms:​ +
- +
-  Inputs: ​  ​next_phase_en_pi ​            +
-  Output: ​  red_o yellow_o green_o +
-      +
- +
-Diese erste Version soll auf dem Prototypenboard DE MAX II Micro Kit (= DE-nano) realisert werden. Das Board besitzt ebenfalls einen Taktgenerator mit 50 MHz und acht verschiedenfarbige LEDs, geeignet für unsere Ampelanlage. Wir verwenden davon +
- +
-  LED4 = Rot +
-  LED3 = Gelb +
-  LED2 = Grün +
- +
-Die Hierarchie der einfachen Ampelsteuerung zum Prototypentest:​ +
- +
-  demmk_traffic_light(structure) +
-    traffic_light(qfsm) +
- +
-  * Erstellen Sie mit QFSM das Zustandsdiagramm ''​traffic_light-v0.1.fsm''​ mit Export in die Datei ''​DigitaltechnikPraktikum/​src/​traffic_light_qfsm.vhd''​ +
- +
-  * Beim Prototypentest im Labor soll schrittweise über den Taster Button2 von einer Ampelphase in die nächste geschaltet werden, Button1 wird als asynchroner Reset verwendet. +
- +
-  * Zeichnen Sie ein Blockschaltbild basierend auf dem Prototypentest ''​DigitaltechnikPraktikum/​src/​demmk_traffic_light_structure.vhd'',​ das die Verbindung der Taster (Button1 und 2) und LEDs mit dem Ampelmodul zeigt. +
- +
-  * Von einer Verifikation im Simulator wird hier abgesehen. +
- +
- +
-===== Laboraufgaben ===== +
-Zunächst haben Sie die Gelegenheit,​ mit den Betreuern die aufgetretenen Fragen und Probleme bei der Vorbereitung zu klären. +
- +
-==== Messung: Dezimalzähler am Logikanalysator ==== +
- +
-  * Projektverzeichnis +
- +
-  DigitaltechnikPraktikum/​pnr/​de1_decimal_upcounter +
- +
-  * Überprüfen Sie die Funktion des Dezimalzählers mit Hilfe des Logikanalysators. Messen Sie dabei das Taktsignal und alle Ausgangssignale. Stellen Sie einen vollständigen Zählzyklus dar. +
- +
- +
-==== Dezimalzähler an 7-Segmentanzeige ==== +
-Für den Einsatz als Sekundenzähler an zwei 7-Segmentanzeigen ist wieder das Frequenzteilermodul **cntdnmodm** aus Versuch 3 notwendig. +
- +
-{{:​public:​praktikum_digitaltechnik:​versuch4:​de1_decimal_upcounter_block_diagram.png?​600|Dezimalzähler an 7-Segmentanzeige auf DE1-Board}} +
- +
-  * Projektverzeichnis +
- +
-  DigitaltechnikPraktikum/​pnr/​de1_decimal_upcounter_1sec +
- +
-  * Führen Sie einen Prototypentest durch, welches Ihren vorher verifizierten Dezimalzähler verwendet. Stellen Sie sich folgenden Fragen: +
-    * Funktioniert Ihr Zähler wie erwartet ? +
-    * Welche Informationen benötigen Sie, um den Fehler genauer zu analysieren ? +
-    * Worin unterscheidet sich dieser Prototypentest im Vergleich zum vorangegangenen ?+
  
 +Sie können für die Ausgänge LEDG(0), LEDG(1), LEDG(2) und LEDG(3) die graphische Darstellung der booleschen Gleichung sehen. Sie können die zusammengefassten Ports wie SW(9..0) auch als einzelne Ports darstellen. Wählen Sie dazu den Port aus, klicken Sie dann auf die rechte Maustaste und wählen Sie "​Ungroup Selected Nodes"​. Der Code aus den "with … select"​ Anweisungen wird als Multiplexer mit konstanten Dateneingängen dargestellt.
  
-  * Zur genaueren Analyse des Problems bietet sich das Simulationswerkzeug an. Modifizieren ​Sie die Testbench **t_decimal_upcounter**,​ indem Sie das Frequenzteilermodul **cntdnmodm** mit den Parametern n=3, m=4 an den Aktivierungseingang en_pi des Dezimalzähler anschließen. +Starten ​Sie mit "Tools → Chip Planner" ​die Gesamtansicht ​des FPGA Chips.
-    * Warum werden hier andere Parameter (n=3, m=4) statt im Prototypentest verwendet ?  +
-    * Führen Sie damit eine erneute Simulation durch. Stellen Sie zusätzlich das interne Signal ''​tc_digit_one''​ dar. +
-    * Was passiert hier bei einem Übertrag von der Einer- auf die Zehnerstelle ?+
  
-Die bisherige einfache Verknüpfung der Zählerstufen reicht hier leider nicht aus. Die Module müssen über einen Logikblock verbunden werden, damit der Übertrag von einer auf die nächste Stufe korrekt funktioniert.+{{  :ledcomb02.jpg  | Quartus Chip Planner}}
  
-{{:​public:​praktikum_digitaltechnik:​versuch4:​decimal_upcounter_block_diagram_correct.png?​500|Dezimalzähler ​mit korrekter Verknüpfung der Zählerstufen}}+Die hellblauen Felder sind die Felder mit leeren LogikelementenZoomen Sie in den Bereich ​mit den dunkelblauen Feldern. Die belegten Logikelemente sind blau markiert.
  
 +{{  :​ledcomb03.jpg ​ | Quartus Chip Planner Detail}}
  
-  * Nachdem ​Sie das Problem verstanden haben, ergänzen Sie im Dezimalzählermodul **decimal_upcounter** ​die notwendige Logik zur Verbindung der Zählerstufen und verifizieren erneut im Simulator.+Mit einem Doppelklick auf ein Logikelement können ​Sie den Inhalt und die Belegung des Logikelementes darstellen.
  
-  * Schließlich sollte das richtige Verhalten auch im Prototoypentest **de1_decimal_upcounter_1sec** bestätigt werden.+{{  :ledcomb04.jpg  | Quartus Chip Planner Logicelement}}
  
 +Starten Sie mit "Tools → Netlist Viewers → Technology Map Viewer (Post Fitting)"​ eine Schaltplananzeige mit der Verschaltung der einzelnen Logikelemente nach der Synthese.
  
-==== Verkehrsampel - Version 0.1 ====+{{  :ledcomb05.jpg | Quartus Technology Map Viewer}}
  
-  * Projektverzeichnis+Mit einem Doppelklick auf die Logikelemente wird die Konfiguration der Lookuptabelle als Schaltplan mit Logikgattern dargestellt.
  
-  ​DigitaltechnikPraktikum/​pnr/​demmk_traffic_light+  ​- Weisen Sie nach, dass die Eingänge des Logikelementes,​ dessen Ausgang an LEDG(3) angeschlossen ist, die Eingänge SW(0) und SW(1) sind. 
 +  - Warum hat dieses Logikelement vor LEDG(3) eine ODER Funktion mit den Eingängen SW(0) und SW(1)? 
 +  - Warum wird die Funktion für LEDG(0) nicht mit einem, sondern mit zwei Logikelementen berechnet?​ 
 +  - Warum ist das Logikelement an LEDG(7) als UND Gatter konfiguriert?​
  
-  * Erstellen und übersetzten Sie das Quartus-Projekt mit+==== Beispiel hierarchisches Design ====
  
-  $ make compile+In der Datei [[https://​gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​src/​cntones_rtl.vhd|cntones_rtl.vhd]] finden Sie eine Schaltungsbeschreibung für eine Schaltung, die die Anzahl der Einsen an den vier Eingängen zählt. ​
  
-  * Starten Sie die grafische Benutzeroberfläche von Quartus mit dem Ampelprojekt+Diese Einserzählschaltung soll jetzt genutzt werden um die Anzahl der Einsen an den SW(3..0) und SW(9..6) zu zählen. Das Ergebnis für SW(3..0) soll an LEDG(2..0) und für SW(9..6) an LEDG(7..5) dargestellt werden.
  
-  $ make quartus+In der Datei [[https://​gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​src/​de1_ledcntsw_rtl.vhd|de1_ledcntsw_rtl.vhd]] finden Sie die Schaltungsbeschreibung,​ die die Schaltung cntones zweimal instantiiert und mit den entsprechenden Eingängen und Ausgängen verbindet. Dazu gibt es das Syntheseverzeichnis "​pnr/​de1_ledcntsw"​.
  
-  ​* Starten Sie den Programmersetzen Sie darin die Haken bei den Optionen Program/​Configure ​und konfigurieren ​Sie damit das CPLD mit der Version 0.1 Ihrer Verkehrsampel auf dem Prototypenboard DE MAXII MicroKit (= DE-nano).+  ​- An welcher Stelle ist festgelegtdass jetzt die zwei VHDL Dateien de1_ledcntsw_rtl.vhd ​und cntones_rtl.vhd notwendig sind? 
 +  - Synthetisieren Sie die Schaltung. 
 +  - Stellen ​Sie mit dem RTL Viewer die Struktur ​der Schaltung dar. 
 +  ​Überlegen Sie wieviele Logikelemente sie für die Schaltung verbrauchen und begründen Sie dies. 
 +  - Stellen Sie mit dem Technology Map Viewer das Ergebnis der Synthese dar und vergleichen Sie die Anzahl der benötigten Logikelemente mit Ihren Überlegungen.
  
-  * Können Sie mit dem Button2 von einer Ampelphase in die folgende schalten ?+==== Aufgabe Siebensegmentanzeige ====
  
 +Sie sollen eine Schaltung mit einer hierarchischen Schaltungsbeschreibung entwerfen, mit der die Schalter SW(3..0) als Binärdarstellung interpretiert als Hexadezimalzahl an HEX0 angezeigt wird. Weiterhin sollen die Schalter SW(9..6) als Hexdezimalzahl an HEX1 angezeigt werden.
  
-==== Verkehrsampel - Version ​0.2 ==== +  * Erstellen Sie hierzu zunächst eine neue Datei bin2seg_rtl.vhd. Diese Schaltung bin2seg soll 4 Eingänge bin_i(3..0) und sieben Ausgänge seg_o(6..0) haben. Diese Schaltung berechnet ​die Übersetzung von Binärdarstellung in die Siebensegmentansteuerung.
-Im Unterschied zur ersten einfachen Version sollen ​die Rot- und Grünphasen hier länger sein.+
  
-Zusätzlich müssen die Phasen ​auf Basis einer Sekunde selbständig durchlaufen ​werden.+In der Datei de1_bin2seg_rtl.vhd soll das Design de1_bin2seg ​auf Basis der bin2seg Schaltung enthalten sein. Dort werden ​die Schalter und HEX0 und HEX1 Anschlüsse vom FPGA Board mit der bin2seg Schaltung verbunden. Sie müssen dazu die Schaltung bin2seg mehrfach instantiieren - analog wie bei der cntsw Schaltung.
  
-{{:​public:​praktikum_digitaltechnik:​versuch4:​traffic_light_v0.2_state_diagram.png?​500|Verkehrsampel v0.2 - Zustandsdiagramm}}+  * Erstellen Sie die Datei de1_bin2seg_rtl.vhd 
 +  * Erstellen Sie ein Syntheseverzeichnis "​pnr/​de1_bin2seg"​ mit den zugehörigen Synthesedateien 
 +  * Synthetisieren Sie die Schaltung und laden Sie das Design auf das Board. 
 +  * Überprüfen Sie die gewünschte Funktion auf dem Board
  
-  * Projektverzeichnis+Sie müssen hierfür einige VHDL Dateien und das Syntheseprojekt neu anlegen. In [[dtpr_new_module_howto|How to setup a new Module]] wird das Anlegen eines neuen Moduls Schritt für Schritt beschrieben.
  
-  DigitaltechnikPraktikum/​pnr/​demmk_traffic_light_1sec+==== Abgabe Versuchsbericht ====
  
-  * Erstellen ​Sie mit QFSM das Zustandsdiagramm ''​traffic_light-v0.2.fsm''​ mit Export in die Datei ''​DigitaltechnikPraktikum/​src/​traffic_light_qfsm.vhd''​+Geben Sie einen Untersuchungsbericht zur "​Siebensegmentanzeige" ​mit den Ergebnissen Ihrer Analysen als Bericht im Moodlekurs Digitaltechnik ab
  
-  * Quellcodedatei für den Prototypentest ist ''​DigitaltechnikPraktikum/src/demmk_traffic_light_1sec_structure.vhd''​Zeichnen Sie davon das Blockdiagramm auf Papier.+[[https://moodle.hs-augsburg.de/​mod/​assign/​view.php?​id=185914|Abgabe Bericht zum Versuch "​Kombinatorische Schaltungen"​]]
  
-Die Hierarchie der erweiterten Ampelsteuerung zum Prototypentest:+Orientieren Sie sich inhaltlich an folgenden Punkten:
  
-  ​demmk_traffic_light_1sec(structure) +  ​* Skizzieren Sie die Designhierarchie 
-    ​traffic_light(qfsm) +  * Kopieren Sie den von Ihnen geschriebenen VHDL Code in den Bericht und erläutern Sie die Funktion 
-    ​cntdnmodm(rtl)+  * Zeigen Sie die Schaltung im RTL Viewer 
 +  * Dokumentieren Sie die Anzahl der benötigten Logikelemente für die Schaltung 
 +  * Dokumentieren Sie die Funktion der Schaltung auf dem Board
  
-  * Durchlaufen ​Sie alle Entwurfsschritte bis zum Prototypentest.+Bitte belegen ​Sie alle Aussagen im Bericht mit Nachweisen. Belegen Sie beispielsweise die Anzahl der benötigten Logikelemente für eine Schaltung mit einem geeigneten Screenshot von der Synthesesoftware.
  
 +=== Form ===
  
-===== Hinweise ​zu den Aufgaben des nächsten Versuchstermins ===== +Alle Abbildungen im Bericht müssen fortlaufend numeriert und untertitelt sein. Tabellen müssen auch numeriert und mit einer Überschrift versehen sein. Für jede Abbildung und jede Tabelle muss im Text eine Erläuterung ​zu finden sein was in der Abbildung dargestellt ist. Ein Beispiel für die Form mit Titel, Abstract, Abbildung, Tabelle und Literaturverzeichnis ist die [[https://​gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​maschine/​-/​blob/​master/​maschine.pdf|Maschine]].
-Am Ende jedes Labortermins werden Ihnen von den Betreuern noch einige Hinweise zu den Aufgaben des nächsten Versuchs gegeben.+
  
  • dtpr_versuch_4.1382020551.txt.gz
  • Last modified: 2013/10/17 16:35
  • by beckmanf