Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
dtlab_t4 [2024/03/08 22:17] beckmanf headings |
dtlab_t4 [2025/03/14 20:38] (current) beckmanf switch code server |
||
---|---|---|---|
Line 4: | Line 4: | ||
===== Aufgabenstellung ===== | ===== Aufgabenstellung ===== | ||
- | Mit dem [[altera_boards|Altera DE 1 Board]], der [[ubuntu_virtual_cae_system|CAD Software]] und dem [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab|VHDL Projektverzeichnis]] starten Sie mit VHDL und steuern die roten und grünen LEDs auf dem Board abhängig von den Schaltern. | + | Mit dem [[altera_boards|Altera DE 1 Board]], der [[ubuntu_virtual_cae_system|CAD Software]] und dem [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/|VHDL Projektverzeichnis]] starten Sie mit VHDL und steuern die roten und grünen LEDs auf dem Board abhängig von den Schaltern. |
In der Vorbereitung installieren Sie die virtuelle Maschine und das Projektverzeichnis und nehmen eine Änderung am Code vor. | In der Vorbereitung installieren Sie die virtuelle Maschine und das Projektverzeichnis und nehmen eine Änderung am Code vor. | ||
Line 61: | Line 61: | ||
==== Download des VHDL Projektverzeichnisses ==== | ==== Download des VHDL Projektverzeichnisses ==== | ||
- | Die [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab|VHDL Projektdateien]] sind auf dem gitlab Server der Fakultät Elektrotechnik. Laden Sie die Projektdateien über git in das Verzeichnis "projects". | + | Die [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/|VHDL Projektdateien]] sind auf dem git server des Labors. Laden Sie die Projektdateien über git in das Verzeichnis "projects". |
<code> | <code> | ||
cd /home/caeuser/projects | cd /home/caeuser/projects | ||
- | git clone https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab | + | git clone https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git |
</code> | </code> | ||
Line 111: | Line 111: | ||
==== VHDL Entity und Architecture ==== | ==== VHDL Entity und Architecture ==== | ||
+ | |||
+ | Nach einer [[dt-code|Einführung zu dem Konzept von Entity und Architecture]] dann die Entity und Architecture für "top_simple". | ||
=== VHDL Entity === | === VHDL Entity === | ||
- | Die VHDL Datei [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/top_simple.vhd|"top_simple.vhd"]] enthält eine "entity". | + | Die VHDL Datei [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/src/top_simple.vhd|"top_simple.vhd"]] enthält eine "entity". |
<code vhdl> | <code vhdl> | ||
Line 193: | Line 195: | ||
</code> | </code> | ||
- | Die Quartus Synthesesoftware stellt den Zusammenhang zwischen den Portnamen in der Entity "top_simple" und den Pins am FPGA über die [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/pnr/top_simple/top_simple_pins.tcl|Pinkonfigurationsdatei top_simple_pins.tcl]] her. Dort sehen Sie, dass dem Pin L22 der Portname SW(0) zugeordnet ist. | + | Die Quartus Synthesesoftware stellt den Zusammenhang zwischen den Portnamen in der Entity "top_simple" und den Pins am FPGA über die [[https://caeis.etech.fh-augsburg.de/beckmanf/dtlab.git/tree/pnr/top_simple/top_simple_pins.tcl|Pinkonfigurationsdatei top_simple_pins.tcl]] her. Dort sehen Sie, dass dem Pin L22 der Portname SW(0) zugeordnet ist. |
==== VHDL Code ändern ==== | ==== VHDL Code ändern ==== | ||
Line 219: | Line 221: | ||
Im RTL Viewer sollte dann ein XOR Gatter zu sehen sein und auf dem Board hat sich die Funktion an LEDG1 geändert. | Im RTL Viewer sollte dann ein XOR Gatter zu sehen sein und auf dem Board hat sich die Funktion an LEDG1 geändert. | ||
+ | ==== Schaltplan zeichnen ==== | ||
+ | Zeichnen Sie auf Papier (oder elektronischem Papier) einen Schaltplan, der das FPGA mit der Schaltung von top_simple darstellt. Bringen Sie den Schaltplan mit in das Labor. | ||
+ | |||
+ | ===== Aufgaben ===== | ||
+ | |||
+ | Ändern Sie den VHDL Code von top_simple.vhd so ab, dass die grünen LEDs folgende Funktion haben | ||
+ | |||
+ | ==== LEDG7 ==== | ||
+ | |||
+ | soll leuchten, wenn mindestens ein Schalter eingeschaltet ist. | ||
+ | |||
+ | ==== LEDG6 ==== | ||
+ | |||
+ | soll leuchten, wenn die Schalter 9..5 die gleiche Schalterstellung haben wie die Schalter 4..0. | ||
+ | |||
+ | ==== LEDG5..0 ECC ==== | ||
+ | |||
+ | Flashspeicher und auch RAM Speicher werden häufig mit zusätzlichen [[https://de.wikipedia.org/wiki/Fehlerkorrekturverfahren|Fehlerkorrekturverfahren]] (englisch: ECC: Error Correcting Code oder Error Checking and Correction) betrieben. Dazu werden Prüfsummen von den Daten berechnet, die dann zusammen mit den Daten abgespeichert werden. In {{ ::samsung_ecc_algorithm_for_256b.pdf |Samsung, NAND Flash ECC Algorithm, June 2004}} wird ein solches Verfahren erläutert. | ||
+ | |||
+ | Auf Seite 3 "ECC Code Generation Example" wird das Verfahren für die Berechnung von sechs Prüfbits (P4´, P2´, P1´, P4, P2 , P1) für ein Datenwort mit acht Bit beschrieben. | ||
+ | |||
+ | Verwenden Sie dieses Vorgehen analog für die Berechnung der Prüfbits (P2´, P1´, P2 , P1) für ein 4 Bit Datenwort. Geben Sie die Prüfbits (P2´, P1´, P2 , P1) für die Berechnung der Daten auf den grünen LEDs LEDG[3..0] aus. Das Datenwort D[3..0] = "1011" sollte dann (P2´, P1´, P2 , P1) = "0110" ergeben. Mit P2´=D1 xor D0, P1´= D2 xor D0, P2=D3 xor D2 und P1 = D3 xor D1. | ||
+ | |||
+ | ^ ^D3 ^D2 ^ D1 ^ D0 ^ | ||
+ | |P2 |x |x | | | | ||
+ | |P2' | | |x |x | | ||
+ | |P1 |x | |x | | | ||
+ | |P1' | |x | |x | | ||
+ | |||
+ | Simulieren Sie jetzt einen Lesezugriff auf ein 4 Bit Datenwort mit den zugehörigen 4 Prüfbits mit den Schaltern. Die Datenbits sollen auf SW[3..0] und die gelesenen Prüfbits (P2´, P1´, P2 , P1) auf SW[7..4] sein. Durch Vergleich der aus den Daten SW[3..0] berechneten neuen Prüfbits mit den gelesenen Prüfbits an SW[7..4] kann man verschiedene Fehlersituationen bei der Annahme von einem Bitfehler unterscheiden. | ||
+ | |||
+ | ^ Situation ^ Erkennung ^ | ||
+ | | Kein Fehler | Die neu berechneten Prüfbits sind gleich den gelesenen an SW[7..4] | | ||
+ | | Korrigierbarer Fehler | Es unterscheiden sich genau zwei Prüfbits und es ändern sich nicht gleichzeitig P1 und P1´ oder P2 und P2´. | | ||
+ | | ECC Fehler (Ein Bit) | Genau ein Prüfbit unterscheidet sich | | ||
+ | | Nicht korrigierbar | Alles andere | | ||
+ | |||
+ | Signalisieren Sie das an LEDG[5..4]. | ||
+ | |||
+ | ^ LEDG[5..4] ^ Bedeutung ^ | ||
+ | | 00 | Kein Fehler | | ||
+ | | 01 | Korrigierbarer Fehler | | ||
+ | | 10 | ECC Fehler | | ||
+ | | 11 | Nicht korrigierbarer Fehler | | ||
+ | |||
+ | Geben Sie an LEDR[7..4] das ggf. korrigierte Datenwort aus. | ||
+ | |||
+ | ==== Hinweise VHDL ==== | ||
+ | |||
+ | In top_simple.vhd gibt es nur Ausdrücke, die LEDR oder LEDG direkt aus SW berechnen. Sie können jedoch auch Zwischensignale einführen. | ||
+ | |||
+ | === Signale === | ||
+ | <code vhdl> | ||
+ | architecture rtl_new of top_simple is | ||
+ | signal one_is_on : std_ulogic; | ||
+ | begin | ||
+ | one_is_on <= SW(0) xor SW(1); | ||
+ | LEDR(0) <= one_is_on; | ||
+ | end architecture; | ||
+ | </code> | ||
+ | |||
+ | === selected signal assignment === | ||
+ | Mit einem "selected signal assignment" kann man einem Signal oder einem Ausgangsport einen Wert in Abhängigkeit von einem anderen Signal oder Eingangsport zuweisen. | ||
+ | |||
+ | <code vhdl> | ||
+ | architecture rtl_new of top_simple is | ||
+ | signal one_is_on : std_ulogic; | ||
+ | begin | ||
+ | with SW(2 downto 0) select | ||
+ | one_is_on <= '1' when "001"|"010"|"100", | ||
+ | '0' when others; | ||
+ | LEDG(0) <= one_is_on; | ||
+ | end architecture; | ||
+ | </code> | ||
Line 226: | Line 302: | ||
- | |||
+ | ===== Labor ===== | ||
+ | Stellen Sie Ihre Lösungen im Labor vor. | ||