Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| dtpr_versuch_3 [2010/11/28 20:29] – Teil 2 geändert beckmanf | dtpr_versuch_3 [2020/09/28 15:32] (current) – Modelsim Images / new gitlab beckmanf | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ==== Versuch 3 ==== | + | ===== Digitaltechnik Praktikum - Tutorial Simulation mit Modelsim ===== |
| - | Dieser Versuch führt sequentielle Schaltungen, | + | In diesem Tutorial lernen Sie den Schaltungssimulator Modelsim kennen. Als Beispiel wird die ledsw Schaltung aus [[dtpr_versuch_2|Digitaltechnik Praktikum - Einführung Quartus]] verwendet. |
| - | === Zähler | + | ==== Simulation mit Modelsim - Manuelles Aufsetzen des Projektes ==== |
| - | Die erste sequentielle Schaltung ist ein Modulo 256 Zähler, d.h. ein Zähler, der von | + | Ähnlich wie bei der Software Quartus gibt es auch bei dem Simulator einen Assistenten um ein Projekt aufzusetzen. Wechseln Sie dazu in das Verzeichnis " |
| - | 0 bis 255 zählt und dann wieder von vorn mit 0 beginnt. Der Zählerstand soll als hexadezimale | + | |
| - | Ausgabe auf der 7-Segment Anzeige ausgegeben werden. Gleichzeitig soll der Zählerstand binär auf | + | |
| - | die roten LEDs ausgegeben werden. | + | |
| - | Im ersten Schritt wird der Zähler mit der Taste KEY0 getaktet und kann mit KEY1 zurückgesetzt werden. | + | < |
| - | Der Code für den Zähler ist hier: | + | cd |
| + | cd digitaltechnikpraktikum | ||
| + | cd sim | ||
| + | cd ledsw | ||
| + | </ | ||
| - | [[dtpr_v3_code_zaehler|Code für den Zähler]] | + | In diesem Verzeichnis befinden sich schon zwei Dateien, die allerdings erst später bei der make basierten Umgebung verwendet werden. Für die Simulation der Schaltung werden zwei VHDL benötigt: |
| - | === Aufgaben Teil 1 === | + | * [[https:// |
| + | * [[https:// | ||
| - | - Laden Sie den Code in ein Verzeichnis. | + | die sich beide im [[https:// |
| - | - Simulieren Sie den Code mit Modelsim und erläutern Sie die Funktion. | + | |
| - | | + | |
| - | - Simulieren | + | |
| - | - Synthetisieren Sie die Schaltung mit Quartus und laden Sie die Schaltung auf das FPGA. | + | |
| - | - Demonstrieren Sie die Funktion | + | |
| - | - Modifizieren Sie die Schaltung und takten Sie die Schaltung mit SW0. | + | |
| - | - Überprüfen Sie die Funktion auf dem Board | + | |
| - | === Zähler mit Enable Signal === | + | < |
| + | vsim | ||
| + | </ | ||
| - | Bislang wird der Zähler direkt mit dem Taster KEY0 getaktet. Die Schaltung soll jetzt so umgebaut werden, dass | + | {{ :: |
| - | als Systemtakt für alle Flipflops | + | Drücken Sie " |
| - | Weiterhin soll die Schaltungaber jeweils um eins hochzählen, | + | {{ :: |
| + | und dann " | ||
| + | {{ :: | ||
| + | Geben Sie als Projektnamen " | ||
| + | {{ :: | ||
| + | Fügen Sie die beiden VHDL Dateien zum Projekt hinzu. | ||
| + | {{ :: | ||
| + | Geben Sie dazu die Dateien mit den relativen Pfaden an. Also | ||
| - | == Die Flankenerkennung == | + | * ../ |
| + | * ../ | ||
| - | Das Problem ist, dass auch ein sehr kurzes Drücken des Tasters KEY0 um Größenordnungen langsamer als die Taktperiode | + | {{ :: |
| - | des 50 MHz Taktes ist. Zur Lösung des Problems | + | Danach erscheinen |
| - | erzeugt, wenn sich der Zustand des Signals KEY0 von 0 nach 1 ändert. | + | {{ :: |
| + | Die VHDL Dateien | ||
| + | {{ :: | ||
| + | Wechseln Sie dann in Ansicht | ||
| + | {{ :: | ||
| - | Die Schaltungsidee | + | Zum Start der Simulation müssen Sie auf t_ledsw / tbench Architecture Doppelklicken. Dann wird der Simulator gestartet und die Daten aus der Library werden geladen. |
| - | - Speichern Sie den Zustand des Signals KEY0 in einem Flipflop, das mit dem Systemtakt von 50 MHz getaktet | + | {{ :: |
| - | - Am Ausgang dieses Flipflops ist das Signal KEY0 um eine Taktperiode gegenüber dem Eingang des Flipflops verzögert. | + | Links in der Simulatoransicht können Sie die Designhierarchie anschauen. Bei diesem einfachen Design ist der toplevel die Testbench " |
| - | | + | {{ :: |
| - | - Werten | + | Wählen Sie dazu in der Simulatoransicht mit der rechten Maustaste das Kontextmenü bei " |
| + | {{ :: | ||
| + | Wenn Sie das Waveform Fenster anklicken sehen Sie die beiden Signale. | ||
| + | {{ :: | ||
| + | Jetzt starten | ||
| + | {{ :: | ||
| + | Um das Simulationsergebnis im Waveform Fenster anzuschauen, | ||
| + | {{ :: | ||
| + | Um den gesamten Verlauf der Signale zu sehen drücken Sie auf den Knopf mit der Lupe (siehe Pfeil), oder wählen das Menü "Wave -> Zoom -> Zoom Full". Sie können im Waveformfenster auch einfach die Taste " | ||
| - | == Das Enablesignal == | + | Jetzt haben Sie das Simulationsergebnis angeschaut. Im folgenden wird erläutert wie Sie vorgehen müssen um den Inhalt von VHDL Dateien zu ändern und die Simulation neu zu starten. Dazu wird hier als Beispiel ein neuer Simulationsvektor " |
| + | {{ :: | ||
| + | Gehen Sie dazu zurück in die Projektansicht und doppelklicken Sie auf " | ||
| + | {{ :: | ||
| + | Jetzt ist das Editorfenster innerhalb von Modelsim geöffnet und Sie können den Inhalt der Datei ändern. | ||
| + | {{ :: | ||
| + | Nach der Änderung müssen Sie das Projekt neu kompilieren mit " | ||
| + | {{ :: | ||
| + | Danach müssen die Simulationsdaten neu geladen werden. Drücken Sie dazu auf den mit dem Pfeil markierten Knopf " | ||
| + | {{ :: | ||
| + | Es erscheint ein Dialogfenster zum Simulationsneustart. Drücken Sie auf " | ||
| + | {{ :: | ||
| + | Jetzt ist die Simulation neu geladen und zurückgesetzt. Starten Sie die Simulation über den mit dem Pfeil markierten Knopf oder das Menü " | ||
| + | {{ :: | ||
| + | Wenn sie danach das Waveformfenster anschauen sehen Sie den zusätzlichen Simulationsvektor. | ||
| - | Jetzt haben Sie ein Signal, dass einen Takt lang aktiv ist, wenn sich das Signal KEY0 von 0 auf 1 ändert. Nun muss der Zähler noch so verändert werden, dass er nur dann zählt, wenn ein " | + | ==== Simulation mit Modelsim - Aufsetzen des Projektes mit Make ==== |
| - | Der noch nicht ganz fertige Code für die Schaltung ist hier: | + | Wie bei der Synthese mit Quartus kann auch die Simulation |
| - | + | ||
| - | [[dtpr_v3_code_zaehler_mit_enable|Code für den Zähler | + | |
| - | + | ||
| - | === Aufgaben Teil 2 === | + | |
| - | + | ||
| - | - Erstellen Sie ein neues Verzeichnis p2 und laden Sie die Dateien in dieses Verzeichnis | + | |
| - | - Fügen Sie ein neues Signal " | + | |
| - | - Ergänzen Sie die Funktionalität von counter so, dass er nur noch zählt, wenn dieses " | + | |
| - | - Ergänzen Sie das neue Modul edge so, dass die steigende Flanke von key_i erkannt | + | |
| - | - Verbinden Sie auf dem Toplevel das Module edge und den counter. | + | |
| - | - Simulieren Sie die Schaltung | + | |
| - | - Laden Sie die Schaltung auf das FPGA | + | |
| + | < | ||
| + | cd | ||
| + | cd digitaltechnikpraktikum | ||
| + | cd sim | ||
| + | cd ledsw | ||
| + | </ | ||
| + | Wenn Sie im Simulationsverzeichnis einfach " | ||
| + | < | ||
| + | fritz@ubuntu: | ||
| + | " | ||
| + | "make mproject" | ||
| + | "make compile" | ||
| + | "make modelsim" | ||
| + | "make sim" to start modelsim gui with the top testbench of the project | ||
| + | "make clean" to remove all generated files | ||
| + | </ | ||
| + | Sie können das Projekt mit den zugehörigen Dateien aufsetzen und die graphische Benutzeroberfläche mit | ||
| + | < | ||
| + | make modelsim | ||
| + | </ | ||
| + | starten. Wenn Sie gleich alle Toplevelsignale in das Waveformfenster übertragen und die Simulation starten wollen, dann können Sie das mit | ||
| + | < | ||
| + | make sim | ||
| + | </ | ||
| + | Wenn ihr Code allerdings noch Fehler enthält, dann wird die graphische Oberfläche nicht gestartet. Sie können dann besser mit "make modelsim" | ||
| + | < | ||
| + | make clean | ||
| + | </ | ||
| + | werden alle temporär erzeugten Dateien gelöscht. | ||
| + | In der Datei [[https:// | ||
| + | In dem Beispiel hier sind ist die Datei [[https:// | ||