[[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 [2010/12/05 21:54]
beckmanf Code eingefügt
dtpr_versuch_4 [2023/04/02 17:03] (current)
beckmanf [Aufgabe Siebensegmentanzeige] How to setup a new module
Line 1: Line 1:
-==== Versuch ​====+===== Digitaltechnik Praktikum ​Versuch ​2 - Kombinatorische Schaltung / Hierarchische Schaltung =====
  
-In diesem Versuch werden Zustandsautomaten als sequentielle Schaltungen eingeführt. ​Das Thema der sequentiellen ​Schaltungen ​wird vertieft. ​+Das Ziel dieses Versuchs ist die Beschreibung von kombinatorischen ​Schaltungen ​mit Hilfe von
  
-=== Ziel des Versuchs ===+  * Booleschen Ausdrücken 
 +  * Conditional Signal Assignments 
 +  * with select Beschreibung
  
-Das Ziel des Versuchs ist der systematische Entwurf ​von einfachen Zustandsautomaten auf Basis von Moore und Mealy, der Entwurf von gekoppelten Automaten ​und die Umsetzung in VHDL+sowie die hierarchische Beschreibung ​von Schaltungen in VHDL. Als praktisches Beispiel werden Sie eine Schaltung entwerfendie 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 verbunden. Wenn beispielsweise die Schalter SW3..SW0 auf "​0101"​ stehen, dann soll die Ziffer "​5"​ an der Siebensegmentanzeige angezeigt werden.
  
-=== Die Flankenerkennung ​===+==== Projekt aktualisieren ====
  
-Im letzten Versuch wurde eine Flankenerkennung vorgestellt. In diesem Versuch soll die Flankenerkennung  +Um ihre lokalen Projektdateien ​mit eventuellen neuen Dateien auf dem git Server zu aktualisieren können sie im Verzeichnis ​"digitaltechnikpraktikum"
-systematisch als Moore Automat entworfen werden. Die Flankenerkennung hat einen Eingang "​key_i"​ und einen +
-Ausgang "​edge_o"​. Die Flankenerkennung wird an den Zähler ​mit Enable aus dem letzten Versuch angeschlossen. Die Flankenerkennung wird dazu verwendet, jedesmal wenn die Taste "KEY(0)" ​gedrückt wird, den Zähler um eins hochzuzählen. ​+
  
-{{:​dtpr_v4_edge_box.png|Ein- und Ausgänge der Flankenerkennung}}+<​code>​ 
 +git pull 
 +</​code>​
  
 +eingeben. Dann werden neue oder geänderte Daten vom git server geladen. Wenn auf dem Server Änderungen an Dateien vorgenommen wurden für die Sie auch Änderungen vorgenommen haben, dann wird die pull Aktion abgebrochen. In diesem Fall müssen die Dateien zusammengeführt werden, allerdings können Sie auch ihre Änderungen verwerfen. Sie können ihre Änderungen verwerfen und den letzten Stand wiederherstellen mit
  
-Die Flankenerkennung soll für die Dauer eines Taktes den Ausgang "​edge_o"​ auf "​1"​ setzen, wenn sich das Eingangssignal von "​0"​ auf "​1"​ ändert+<​code>​ 
 +cd 
 +cd digitaltechnikpraktikum/​src 
 +git checkout ​. 
 +cd .. 
 +</​code>​
  
-{{:​dtpr_v4_edge_timing.png| Timingdiagramm der Flankenerkennung}}+Danach sollte die pull Aktion funktionieren.
  
-Das Timingdiagramm zeigt die gewünschte Funktion der Schaltung zur Flankenerkennung. Das Zustandsdiagramm ist im folgenden Bild dargestellt+==== Beispiel ledcomb_rtl.vhd ====
  
-{{:dtpr_v4_edge_sd.png|Zustandsdiagramm der Flankenerkennung}}+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"​.
  
-Der Automat ​hat drei Zustände: ​"Start""Eins" und "Null"​. ​Der Automat startet nach dem Reset im Zustand ​"​Start"​Das Ausgangssignal "​edge_o"​ ist mit einem Schrägstrich "/"​ getrennt nach dem Zustandsnamen ​dargestellt. ​Der Automat bleibt im Zustand "​Null"​wenn am Eingang "​key_i"​ nur Nullen auftreten. Der Automat wechselt in den Zustand "​Eins",​ wenn er im Zustand "​Null"​ ist und am Eingang "​key_i"​ eine "​1"​ erscheintAus dem Zustand "​Eins"​ wechselt der Automat unabhängig vom Eingang ​in den Zustand "​Null"​. Der Ausgang "​edge_o"​ geht auf "​1",​ wenn der Automat im Zustand "​Eins"​ ist+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 anAn den grünen LEDs werden verschiedene boolesche Funktionen ​dargestellt. ​In der Schaltung ledcomb gibt es weiterhin drei Signale s0s1 und s2Die Signale können wie Netze in einem Schaltplan verstanden werden.
  
-Der Zähler mit Enable aus dem letzten Versuch soll jetzt mit dem Zustandsautomaten zur Flankenerkennung gesteuert werdenDer Code ist hier zu finden:+  - 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)? 
 +  - 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.
  
-[[dtpr_v4_flankenerkennung|Code für die Flankenerkennung]]+Wechseln Sie jetzt in das Verzeichnis "​pnr/​ledcomb",​ starten Sie die Schaltungssynthese und laden Sie das Design auf das FPGA Board.
  
-=== Aufgaben Teil 1 ===+  - 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]]?​
  
-  - Legen Sie ein Verzeichnis "​p1"​ an.  +=== Analyse des Syntheseergebnisses ===
-  - Laden Sie den [[dtpr_v4_flankenerkennung|Code für die Flankenerkennung]] in das Verzeichnis "​p1"​.  +
-  - Kopieren Sie das Module "​bin2seg.vhd"​ aus einem der vorherigen Versuche in dieses Verzeichnis.  +
-  - Simulieren Sie die Schaltung mit Modelsim +
-  - Der VHDL Code in "​edge.vhd"​ gibt das Zustandsdiagramm oben wieder. Erläutern Sie warum dieser Automat nicht wie gewünscht funktioniert und ändern Sie den Automaten so ab, dass er funktioniert. Zeichnen Sie das korrekte Zustandsdiagramm.  +
-  - Korrigieren Sie den Code in "​edge.vhd"​ analog zu Ihrem neuen Zustandsdiagramm.  +
-  - Verifizieren Sie die Funktion im Simulator.  +
-  - Laden Sie das Design auf das FPGA und überprüfen Sie die Funktion auf dem FPGA.+
  
-=== Dekodieren eines Quadratur Encoders ===+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.
  
-Bei der nächsten Aufgabe geht es um das Dekodieren eines Quadratur Encoders. Eine solcher Encoder dient zur Auswertung von Drehbewegungen. Im folgenden Bild ist die Funktion eines solchen Encoders skizziert+Wechseln Sie in das Syntheseverzeichnis,​ starten Sie die Synthese und starten Sie die Quartus GUI.
  
- ​{{:​dtpr_v4_quadrature_encoder.png|Funktion eines Quadrakturenkoders}}+<​code>​ 
 +cd 
 +cd digitaltechnikpraktikum/​pnr/​ledcomb 
 +make compile 
 +make quartus 
 +</​code>​
  
-In diesem Beispiel ist ein inkrementeller optischer Encoder dargestellt. Auf einer transparenten Scheibe sind im Abstand d lichtundurchlässige Flächen ​mit der Länge d aufgebracht. Oberhalb der Scheibe befindet sich eine Leuchte. Unterhalb der Scheibe sind zwei Sensoren S1 und S2 im Abstand 1,5 d angeordnet. Aus dem Verlauf der Signale der Sensoren S1 und S2 lässt sich die Drehrichtung und die Drehgeschwindigkeit bestimmen. Informationen über die Drehbewegung lassen sich nur ermitteln, wenn es zu einer Änderung des Ausgangssignals bei einem der Sensoren kommt+Starten Sie mit "Tools → Netlist Viewers → RTL Viewer" ​die graphische Darstellung Ihres VHDL Codes.
  
-An das FPGA soll ein solcher Quadraturenkoder angeschlossen werden. Je nach Drehrichtung soll ein Zähler hoch- oder runterzählen. Der Zählerstand soll wie bislang an der 7-Segment Anzeige angezeigt werden+{{  :ledcomb01.jpg  | Quartus RTL Viewer}}
  
-{{:​dtpr_v4_qdec_top.png|Übersicht über den Quadraturdekoder}} ​+Sie können für die Ausgänge LEDG(0), LEDG(1), LEDG(2) und LEDG(3) die graphische Darstellung der booleschen Gleichung sehenSie 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.
  
-In diesem Bild ist der Verschaltung der einzelnen Komponenten dargestellt+Starten Sie mit "Tools → Chip Planner"​ die Gesamtansicht des FPGA Chips.
  
-=== Aufgabe Teil 2 ===+{{  :​ledcomb02.jpg ​ | Quartus Chip Planner}}
  
-Es wird ein Vorwärts-/​Rückwärtszähler benötigtDieser Zähler soll in diesem Aufgabenteil entworfen werden. Verwenden ​Sie für den Test den folgende Toplevel und Testbench [[dtpr_v4_code_counter|Code Testbench und Toplevel für den Countertest]]+Die hellblauen Felder sind die Felder mit leeren LogikelementenZoomen ​Sie in den Bereich mit den dunkelblauen Feldern. Die belegten Logikelemente sind blau markiert.
  
-  - Legen Sie ein neues Verzeichnis "​p2"​ an. +{{  :ledcomb03.jpg  | Quartus Chip Planner Detail}}
-  - Modifizieren Sie den Counter derart, dass er hochzählt, wenn der Eingang "up_i = 1" ist und runterzählt,​ wenn "​up_i"​ = "​0"​ ist. Der Zähler soll weiterhin nur zählen, wenn enable_i = "​1"​ ist. +
  
-=== Aufgabe Teil 3 ===+Mit einem Doppelklick auf ein Logikelement können Sie den Inhalt und die Belegung des Logikelementes darstellen.
  
-Die Flankenerkennung "​edge"​ muss erweitert werden und die fallende und steigende Flanke erkennen könnenDie Flankenerkennung hat dann zwei Ausgänge. Der Ausgang "​rising_edge_o"​ wird bei einem 01 Übergang von "​key_i"​ aktiviert. Der Ausgang "​falling_edge_o"​ wird bei einem 10 Übergang an "​key_i"​ aktiviert. Verwenden Sie folgenden [[dtpr_v4_code_edge_falling_rising|Code für Testbench und Toplevel für die Erweiterung von edge]]. ​+{{  :ledcomb04.jpg  ​Quartus Chip Planner Logicelement}}
  
-  - Zeichnen ​Sie ein Zustandsdiagramm für einen Automaten ​mit dem dem Sie sowohl 01 also auch 10 Übergänge erkennen können +Starten ​Sie mit "Tools → Netlist Viewers → Technology Map Viewer (Post Fitting)"​ eine Schaltplananzeige mit der Verschaltung der einzelnen Logikelemente nach der Synthese.
-  - Modifizieren Sie den VHDL Code von edge gemäß dieses Zustandsdiagramms. +
-  - Prüfen Sie die Funktion im VHDL Simulator+
  
-=== Aufgabe Teil 4 ===+{{  :​ledcomb05.jpg | Quartus Technology Map Viewer}}
  
-Benutzen Sie den folgenden [[dtpr_v4_qdec|Code für qdec]].  +Mit einem Doppelklick auf die Logikelemente wird die Konfiguration der Lookuptabelle als Schaltplan mit Logikgattern dargestellt.
- +
-  - Entwerfen Sie das Zustandsdiagram für den Automaten "​qdec"​. Die Eingänge des Automaten sind:  s1, s2, rising_edge_s1,​ falling_edge_s1,​ rising_edge_s2 und falling_edge_s2.  +
-  - Implementieren Sie den Automaten im der VHDL Datei "​qdec.vhd"​ +
-  - Prüfen Sie die Funktion im VHDL Simulator.  +
-  - Laden Sie die Schaltung auf das FPGA und prüfen Sie die Funktion auf dem FPGA+
  
 +  - 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?​
  
 +==== Beispiel hierarchisches Design ====
  
 +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. ​
  
 +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.
  
 +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"​.
  
 +  - An welcher Stelle ist festgelegt, dass 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.
  
 +==== 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.
  
 +  * 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.
  
 +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.
  
 +  * 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
  
 +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.
  
 +==== Abgabe Versuchsbericht ====
  
 +Geben Sie einen Untersuchungsbericht zur "​Siebensegmentanzeige"​ mit den Ergebnissen Ihrer Analysen als Bericht im Moodlekurs Digitaltechnik ab. 
  
 +[[https://​moodle.hs-augsburg.de/​mod/​assign/​view.php?​id=185914|Abgabe Bericht zum Versuch "​Kombinatorische Schaltungen"​]]
  
 +Orientieren Sie sich inhaltlich an folgenden Punkten:
  
 +  * Skizzieren Sie die Designhierarchie
 +  * Kopieren Sie den von Ihnen geschriebenen VHDL Code in den Bericht und erläutern Sie die Funktion
 +  * 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
  
 +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 ===
  
 +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]].
  
  • dtpr_versuch_4.1291582483.txt.gz
  • Last modified: 2010/12/05 21:54
  • by beckmanf