Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| dtpr_v6 [2014/05/01 11:50] – created beckmanf | dtpr_v6 [2021/04/26 07:02] (current) – fix: gitlab links soeren | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Digitaltechnik Praktikum Versuch | + | ===== Digitaltechnik Praktikum Versuch |
| + | In diesem Versuch werden Flipflops und darauf aufbauend sequentielle Schaltungen entworfen. | ||
| + | ==== git update ==== | ||
| + | |||
| + | Zunächst müssen Sie Ihre git Datenbasis aktualisieren, | ||
| + | |||
| + | < | ||
| + | cd | ||
| + | cd projects/ | ||
| + | git pull | ||
| + | </ | ||
| + | |||
| + | ==== Analyse der Flipflopschaltung ==== | ||
| + | |||
| + | Analysieren Sie die Schaltung in der Datei [[https:// | ||
| + | |||
| + | - Zeichnen Sie die Schaltung auf Papier anhand der VHDL Beschreibung | ||
| + | - Beschreiben Sie in Worten welches Verhalten Sie am Ausgang LEDG(2) erwarten. | ||
| + | - Beschreiben Sie in Worten welches Verhalten Sie an den Ausgängen LEDG(6) und LEDG(7) erwarten. | ||
| + | - Beschreiben Sie die Schaltung, die das Verhalten an den Ausgängen LEDG(6) und LEDG(7) bestimmt als Automatengraph. | ||
| + | - Geben Sie dazu die Zustandsfolgetabelle und die Ausgangstabelle an. | ||
| + | |||
| + | Zu dieser Schaltung gibt es eine passende Testbench [[https:// | ||
| + | |||
| + | - Starten Sie die Simulation im Verzeichnis " | ||
| + | - Vergleichen Sie das Verhalten in der Simulation mit Ihrer Schaltungsanalyse | ||
| + | |||
| + | Weiterhin gibt es auch ein Syntheseverzeichnis inklusive makefiles für die Synthese der Schaltung. | ||
| + | |||
| + | - Starten Sie die Synthese der Schaltung im Verzeichnis " | ||
| + | - Laden Sie das Design auf das FPGA Board | ||
| + | - Demonstrieren Sie die Funktion der Schaltung! | ||
| + | |||
| + | ==== Entwurf Blinklicht ==== | ||
| + | |||
| + | Analog zum Blinklicht aus der Vorlesung entwerfen Sie jetzt eine Schaltung, mit der die roten LEDS mit einer bestimmten Blinkfolge leuchten sollen. Die Blinkfolge ist abhängig von der Schalterstellung an SW(0). | ||
| + | |||
| + | < | ||
| + | SW(0) = 0, dann | ||
| + | Schritt1 - XXX0000XXX | ||
| + | Schritt2 - 0XXX00XXX0 | ||
| + | Schritt3 - 000XXXX000 | ||
| + | |||
| + | SW(0) = 1, dann | ||
| + | Schritt1 - XXX0000XXX | ||
| + | Schritt2 - 0X0X0X0X0X | ||
| + | Schritt3 - 000XXXX000 | ||
| + | |||
| + | X = an, 0 = aus | ||
| + | </ | ||
| + | |||
| + | - Entwerfen Sie einen Mooreautomaten, | ||
| + | - Legen Sie eine binäre Zustandskodierung fest. Wie viele Flipflops benötigen Sie für die Kodierung? | ||
| + | - Welche Eingänge und welche Ausgänge hat der Automat? | ||
| + | - Zeichnen Sie die Zustandsfolgetabelle und die Ausgangstabelle. | ||
| + | - Geben Sie die Zustandsübergangslogik als boolesche Ausdrücke an. | ||
| + | |||
| + | Für den VHDL Entwurf des Blinklichtautomaten gibt es eine vorbereitete Datei [[https:// | ||
| + | |||
| + | - Entwerfen Sie den Automaten in VHDL | ||
| + | - Simulieren Sie den Entwurf | ||
| + | - Synthetisieren Sie die Schaltung und probieren Sie den Automaten auf dem FPGA Board aus. | ||
| + | |||
| + | ==== Entwurf Zähler ==== | ||
| + | |||
| + | In der Vorlesung haben Sie einen Zähler kennengelernt, | ||
| + | |||
| + | Der folgende Code beschreibt ein Register mit 16 Bit Breite. Mit jedem Takt werden die 16 Bit Daten am Eingang in das Register übernommen. Der Datentyp des Registers ist " | ||
| + | |||
| + | <code vhdl> | ||
| + | library ieee; | ||
| + | use ieee.std_logic_1164.all; | ||
| + | use ieee.numeric_std.all; | ||
| + | |||
| + | entity example is | ||
| + | port( | ||
| + | clk : in std_ulogic; | ||
| + | res_n : in std_ulogic; | ||
| + | d_i : std_ulogic_vector(15 downto 0)); | ||
| + | end entity; | ||
| + | |||
| + | architecture rtl of example is | ||
| + | |||
| + | signal cnt : unsigned(15 downto 0); --Zahlen von 0 bis 65535 | ||
| + | | ||
| + | begin | ||
| + | |||
| + | cnt <= " | ||
| + | |||
| + | end architecture rtl; | ||
| + | </ | ||
| + | |||
| + | Für den Zähler benötigen Sie dann noch einen Multiplexer, | ||
| + | |||
| + | <code vhdl> | ||
| + | y <= a_i when sel_i = ' | ||
| + | </ | ||
| + | |||
| + | Den Zahlenvergleich können Sie bei einem " | ||
| + | |||
| + | <code vhdl> | ||
| + | architecture rtl of example is | ||
| + | signal x : unsigned(7 downto 0); -- Zahlen von 0 bis 255 | ||
| + | signal x_is_greater_than_5 : std_ulogic; | ||
| + | begin | ||
| + | x_is_greater_than_5 <= ' | ||
| + | end architecture; | ||
| + | </ | ||
| + | |||
| + | Bei diesem Vergleich wird das Signal " | ||
| + | |||
| + | Für den folgenden Entwurf ist eine Datei [[https:// | ||
| + | |||
| + | * Der Zähler ist ladbar. Beim Laden soll der Zähler auf den Startwert 13 gesetzt werden. | ||
| + | * Wenn der Zähler den Wert 0 erreicht hat, dann soll der Zähler auf 0 stehen bleiben. | ||
| + | * Bei einem asynchronen Reset, soll der Zähler den Wert 0 haben. | ||
| + | |||
| + | Gehen Sie dazu so vor: | ||
| + | |||
| + | - Zeichnen Sie eine Architektur auf Papier bestehend aus Register, Addierer, Vergleicher und Multiplexer. | ||
| + | - Beschreiben Sie den Zähler in der Datei [[https:// | ||
| + | |||
| + | Dieser Zähler wird in der Datei [[https:// | ||
| + | |||
| + | - Zeichnen Sie die Schaltung, die in [[https:// | ||
| + | - Simulieren Sie die Gesamtschaltung im Verzeichnis " | ||
| + | - Synthetisieren Sie die Schaltung im Verzeichnis " | ||
| + | |||
| + | ==== Vermessung des Zählers ==== | ||
| + | |||
| + | Bislang wird der Zähler mit der Taster KEY(1) getaktet. Jetzt soll die Zählschaltung so verändert werden, dass der 50 MHz Taktoszillator verwendet wird und die Funktion des Zählers am Logikanalysator vermessen werden kann. | ||
| + | |||
| + | - Ergänzen Sie die Schaltung [[https:// | ||
| + | - Ändern Sie den Takteingang, | ||
| + | - Ergänzen Sie das [[https:// | ||
| + | - Stellen Sie die Funktion des Zählers am Logikanalysator dar. Benutzen Sie zum Anschluss der Digitaltastköpfe an die GPIO Pins die Klemmen. Dabei soll der Takt, der Load Eingang ld_i, der asynchrone Reset, der Zählerstand und der Ausgang done_o sichtbar sein. | ||