Versuch 04: Digitaler Entwurf mit einem FPGA Board
Ansteuerung einer Siebensegmentanzeige
Implementierung einer logischen Gleichung in VHDL.
Tastenabfrage.


Länge: 35:20
0:0:58 Start Vivado

0:1:37 HEX2LEDAX

0:2:17 Gleichungssuche

0:5:15 Fehleranzeige

0:6:3 Run Simulation

0:7:4 Screenshot/Foto

0:7:20 Program and Debug

0:8:30 Open Target: Programmierung Fpga

0:9:0 Verifikation der Funktion

0:10:26 IP catalog wählen

0:11:17 Suchen nach dem Counter (Zähler)

0:13:17 Instantion template zum Einbau der Schaltung

0:13:59 Component einbauen

0:14:40 Signal deklarieren

0:15:34 LED anschliessen

0:16:11 Pins aktivieren

0:16:45 Anpassen der Simulationsdatei

0:17:40 Buttons einführen

0:19:20 Zustandsmaschine

0:21:6 Test vektoren einführen

0:23:0 Simulation starten

0:23:45 Diskussion Simulation

0:25:40 Zweites Umschalten

0:27:0 Text eintragen

0:28:0 Synthesis starten

0:29:0 Programmierung des Boards

0:31:0 Submit

Evaluation Vorlesung Digitaltechnik


Falls Sie noch keine Evaluierung abgegeben haben:
Bitte folgen Sie folgendem Link und führen Sie erst eine Evaluierung der Vorlesung durch!

→ Evaluation

Hinweise zur Durchführung


Lesen Sie vor dem Versuch die Anleitung. Dokumentieren Sie jeden Versuch in einer Ausarbeitung, Bildschirmkopien der Ergebnisse (< alt > < Druck >, < cmd > < F14 > ) und Ihren persönlichen Erfahrungen. Bitte beachten Sie folgende Hinweise:
  • Elektronikbauteile sind gefährdet durch elektrische Entladungen (ESD). Bevor Sie die Bauteile oder Komponenten des Boards berühren, berühren Sie bitte einen Massepunkt zwecks Entladung. Verwenden Sie ESD Schutzmaßnahmen. Berühren Sie bitte auch nicht eine andere Person, welche gerade mit Elektronikkomponenten / Bauteilen hantiert.

3 Aufgabenstellung


3.1 Entwicklungsumgebung


Sie verwenden das BASYS 3 Board der Fa. Digilent und die Entwicklungsumgebung Xilinx Vivado.
Revisionsstand der Tools (SS2020): BASYS3 Board, Xilinx Vivado HLx Webpack on Windows 10 PC.

4.2 Aufgabenbeschreibung:


Für das Basys 2 Board korrigieren Sie die logische Gleichung in einem VHDL-Programm, mit welchen die Siebensegmentanzeige angesteuert wird. Hierbei werden die Schiebeschalter SW0 bis SW3 als Dualzahl interpretiert und die entsprechende Dezimalzahl mit der Siebensegmentanzeige angezeigt. Danach wird ein Taktteiler mit Hilfe eines Zählers aus dem "IP Catalog" und einem "process" entworfen und zur Tastenabfrage benutzt.
Teil Aufgabe
1 Einfügen einer logischen Gleichung für Segment E der Anzeige.
Simulation und Implementierung der Schaltung.
2 Der Taster btn(0) soll die Schaltung initialisieren, den Punkt "dp" anschalten.
Der Taster btn(1) soll die Anzeige dp sicher an und aussschalten.
Der Takt (CLK) auf dem Basys 3 Board ist 100 MHz.
Mit dieser Frequenz können Schaltwerke laufen. Um langsamere Abläufe zu realisieren, werden clock enable (CE) Signale benutzt.
Mit einem Zähler kann man den Systemtakt herunter teilen.
Es wird ein Zähler benutzt, um ein CE Signal zu erzeugen und einen Taster abzufragen. Das CE Signal soll ungefähr 4 mal in der Sekunde für einen Clockzyklus gesetzt werden.

4.4 Versuchsdurchführung


Teil 1: Einfügen einer logischen Gleichung für Segment E der Anzeige.


Aktion
1 Starten Sie Xilinx Vivado. Click auf "Vivado 2019.1".

2 Bei Bedarf kopieren Sie ihr Projektverzeichnis vom USB Stick in ein lokales Verzeichnis.
Laden Sie Ihr Project des vorigen Versuches "File" -> "Open Project".
3 Durch einen Doppelklick auf "FUN0 - HEX2LEDAX" öffnen Sie die VHDL Datei HEX2LEDAX.vhd.
Suchen Sie die Zeile für die LED(4).
4 Öffnen Sie den Internetbrowser Firefox und suchen Sie nach Segmentanzeige, Wikipedia.
Suche Sie die logische Funktion für Segment E heraus und erstellen Sie den entsprechenden VHDL code.
Dokumentieren Sie hier ihr Ergebnis:
5 Simulieren Sie genauso wie im letzten Versuch die Funktion.
Linke Spalte: Simulation -> Run Simulation
Stellen Sie sicher, dass alle Testvektoren sichtbar sind.
Dokumentieren Sie ihr Ergebnis und fügen Sie hier den Screenshot ein:


Remove

Verhalten sich die Eingangssignale sw und die Ausgangssignale led und seg wie erwartet?
Wie viele Zählschritte haben Sie simuliert?

6 Implementieren Sie die Funktion auf dem Basys 3 Board und testen Sie die Schaltung.
Linke Spalte: Synthesis -> Run Synthesis
Linke Spalte: Implementation -> Run Implementation
Linke Spalte: Program and Debug -> Generate Bitstream
Verbinden Sie-falls noch nicht geschehen-, das BASYS 3 Board per USB mit dem Rechner.
Linke Spalte: Program and Debug -> Open Hardware Manager
Erstmalig: -> Open Target
Danach: -> Program Device

Dokumentieren Sie hier ihr Ergebnis:

Teil 2: Ein Taster (Button) wird sicher abgefragt


Erstellung eines Zählers mit dem IP Catalog

Die 100 MHz Boardtakt werden mit einem Zähler auf eine niedrige Frequenz zur Tastenabfrage herunter geteilt.
7 Linke Spalte: Project Manager ->IP Catalog
Im Feld search geben sie "counter" ein, um nach einem Zähler zu suchen.
Durch Doppelcklick auf binary counter erscheint das Fenster "Customize IP"
Hier haben Sie die Möglichkeit den Zähler zu konfigurieren.

Wählen Sie Output Width 32
Click "ok". Click "generate".

VHDL code zum Einbau des Zählers in die Schaltung wird ausgewählt.

8 Im Unterfenster Sources wähen Sie unten IP Sources und klappen dann den counter auf, um die Instantiation Templates auswählen zu können.


Bearbeitung von Versuch3.vhd zum Einbau des Zählers.

9 Um c_counter_binary_0 zu benutzen kopieren Sie nun den Abschnitt COMPONENT in den architecture Abschnitt von VERSUCH3 vor dem 'Begin'.
Der Clockteiler wird in die Schaltung eingebaut in dem der Abschnitt UUT: nach dem 'Begin' hinein kopiert wird und die Eingänge und Ausgänge verbunden werden: CLK mit CLK, CE mit sw(7) und Q mit count.
Dazu muss das signal count noch vor dem begin definiert werden.

architecture Behavioral of VERSUCH3 is

  COMPONENT HEX2LEDAX
  PORT(
        hex : in std_logic_vector (3 downto 0);
        ledn: out std_logic_vector (6 downto 0)
       );                                       
  END COMPONENT;
  
COMPONENT c_counter_binary_0
  PORT (
    CLK : IN STD_LOGIC;
    CE : IN STD_LOGIC;
    Q : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
  );
END COMPONENT;

  signal count: STD_LOGIC_VECTOR(31 DOWNTO 0);
begin
  
clk_div : c_counter_binary_0
  PORT MAP (
    CLK => CLK,
    CE => sw(7),
    Q => count
  );
Damit Sie sehen, wie langsam das oberste Bit des Zählers zählt, verbinden Sie led(10 downto 6) mit count(26 downto 22).
Erweitern Sie in der Datei Versuch3.vhd im Abschnitt entity den led-Bus (10 downto 0).
Die led pins 10..6 müssen in der constraints Datei Basys3_Master.xdc aktiviert werden (Entfernen des '#' Kommentarzeichens).

  led(4 downto 0) <= sw (4 downto 0); 
  led(5) <= clk;
  led(10 downto 6) <= count(26 downto 22); 
  -- dp <= not sw(4);
  an <= "1110";  
11 Die btn Eingänge werden oben in der entity im Abschnitt port eingefügt:

btn: in STD_LOGIC_VECTOR ( 3 downto 0);

Bearbeitung von Basys3_Master.xdc zum Einbau des Zählers.

12 Außerdem werden die btn Eingänge in der Basys3_Master.xdc Datei durch löschen der Kommentarzeichen # aktiviert.


Bearbeitung von Versuch3.vhd zur Implementierung einer Zustandsmaschine für die Taster (Buttons).

13 Mit der Taste btn(1) soll nun dp ein und ausgeschaltet werden.
Die Signalanweisung kommt vor das begin der architecture:

SIGNAL dpi:STD_LOGIC;
Der process für die Zustandsmaschine wird nach dem begin eingefügt.

   process(CLK,btn(0),btn(1))
     begin
       if ( btn(0) = '1') then   -- asynchron reset with button 0
            dpi <= '0';
            ce <= '0';
       elsif  (rising_edge(clk)) then 
          if (count(23 downto 0)="100000000000000000000000") then
            ce <= '1';
            if (btn(1) = '1') then
                dpi <= not(dpi);
            end if;  
          else
            ce <= '0';
          end if;     
 	   end if;
     end process;
     dp <= dpi;
Wir benötigen den process, um eine Zustandsmaschine zu bauen.
Zeile 4: Die erste if Anweisung initialisiert dpi und ce asynchron, wenn btn(0) gedrückt wird.
Zeile 7: "elsif" definiert die Aktionen bei einer steigenden clk Flanke.
Zeile 8: Nur wenn der Zähler einen bestimmten Wert hat wird ce gesetzt (Zeile 9) und dpi invertiert (Zeile 10).
Zeile 13-15: ce wird auf "0" zurück gesetzt und ist nur einen clk Zyklus aktiv.
Die letzte Zeile ersetzt die Zeile "dp <= sw(7);".
Zustandsmaschinen in VHDL sehen immer ähnlich aus. im nächsten Versuch wird ausgehend von diesem process ein weiterer für btn(2) und btn(3) eingefügt.

Bearbeitung von Test_V3.vhd zum Test der Schaltung.

14 Da die entity geändert wurde, muss auch die Simulationsdatei angepasst werden:
Ansicht: Simulation, dann Auswahl der Testdatei Test_V3.vhd
Im Abschnitt component VERSUCH 3 wird die Zeile für die Buttons eingefügt:

btn: in STD_LOGIC_VECTOR ( 3 downto 0);
Die led wird auf die Anzahl (10 downto 0) erweitert.
Entsprechend benötigt man ein Signal im --Inputs Bereich:

   signal btn : std_logic_vector(3 downto 0):= (others => '0');
Auch drot wird der Bereich für led angepasst.
Die Unit under test UUT: muss ergänzt werden:

 			 btn => btn,
Nun ergänzen Sie noch die Testvektoren am Anfang durch kurzzeitiges setzen des btn(0) auf '1', um den Zähler zu initialisieren, und danach langes setzen des btn(1) auf '1' und btn(0) auf '0'.

Simulieren Sie genauso wie im letzten Versuch die Funktion.
Sie untersuchen, ob count richtig zählt, der Taster abgefragt wird und dp sich ändert.
count finden Sie, wenn sie die Testschaltung durch Klick auf das Dreieck aufklappen.


Remove

Verhält sich die Simulation wie erwartet? Gibt es Schwierigkeiten?

15 Klicken Sie dafür auf Generate Bitstream und warten Sie bis die Datei erzeugt wurde (drehendes grünes Rad oben rechts).
Sollte dort kein grüner Haken erscheinen, dann haben Sie einen Fehler im Quellcode.
Falls kein Fehler erscheint können Sie weitermachen, ansonsten bessern Sie den Fehler aus.

Falls das Basys3 Board nicht am PC angesteckt und angeschaltet sein sollte, so machen Sie das.

Drücken Sie auf Open Hardware Manager -> Open Target -> Auto Connect. Warten Sie bis sich das Fenster geschlossen hat.



Anschließenend drücken Sie auf Program Device -> xc7a35t_0.
Im neuen Fenster bestätigen Sie mit Program.

17 Testen Sie nun die Funktion. Drücken Sie den Taster und beobachten Sie den Anzeigepunkt dp. Passt alles? Gratuliere…!

Kommentieren Sie hier das Ergebnis.

Hinweis: Sie benötigen dieses Projekt im nächsten Versuch!!!
Sichern Sie Ihr Projekt!!!

In Vivado sehen Sie am oberen Rand das aktuelle Verzeichnis in dem Sie arbeiten.
Machen Sie eine Kopie ihres Verzeichnisses auf einen USB-Stick.
Achten Sie darauf, dass Sie das Verzeichnis von Versuch 3 nicht überschreiben.




Bitte geben Sie Gruppennummer und Namen ein:


Drucken Sie diese Seite für Ihre Unterlagen als pdf Datei aus. Verwenden Sie den Drucker pdf Creator.
Last Saved:




Submit     Recall     Save     Print