Loading [MathJax]/jax/input/TeX/config.js
Hochschule Kempten      
Fakultät Elektrotechnik      
Digitaltechnik       Fachgebiet Elektronik, Prof. Vollrath      

Digitaltechnik

11 Modulo 5 Zähler

Prof. Dr.

Jörg Vollrath


10 Zustandsmaschinen


Ein kurze Videozusammenfassung der Vorlesung



Länge: 6:23 min

Ein kurze Videozusammenfassung der Vorlesung



Länge: 7:41 min

Zeitverhalten einer VHDL-Beschreibung



Länge: 6:03 min

Rückblick und Heute

Rückblick:




Heute:


Lesen:

Zustandsdiagramm, Zustandsgraph

  • Einzelne Zustände werden als Kreise dargestellt.
    Im Kreis ist die Zustandsinformation
  • Zustandsübergänge werden mit Pfeilen gekennzeichnet.
    Am Pfeil stehen die auslösenden Signale
NrUD SnSn+1
0 0 0 0 1 0
1 0 0 1 0 0
2 0 1 0 0 1
3 0 1 1 1 0
4 1 0 0 0 1
5 1 0 1 1 0
6 1 1 0 0 0
7 1 1 1 0 0
Ein Zustandsdiagramm benötigt immer eine Legende, damit man weiss was dargestellt wird.

Modulo 5 Zähler: Aufgabenstellung

Bauen Sie einen Modulo 5 Zähler.

Modulo 5 Zähler: Zustandsdiagramm

3 Speicherzellen
8 Zustände
5 Zustände werden benutzt.
Kein Signal an den Pfeilen, da die Zustandsänderung auf jeden Fall durchgeführt wird.

Modulo 5 Zähler: Zustandstabelle

Eine Zustandstabelle wird erzeugt und mit Karnaugh Veitch minimiert.
Clk NrBnBn+1
0 0 0 0 0 0 1
1 0 0 1 0 1 0
2 0 1 0 0 1 1
3 0 1 1 1 0 0
4 1 0 0 0 0 0
5 1 0 1 D/0 D/1 D/0
6 1 1 0 D/0 D/1 D/0
7 1 1 1 D/1 D/0 D/0

B0n+1=/B0n·/B2n

B1n+1=(B0n·/B1n) + (/B0n·B1n)

B2n+1= B0n·B1n

Modulo 5 Zähler: Schaltungsrealisierung

LTSPICE code
Man sieht eine typische Medwedew-Zustandsmaschine. Die Ausgänge werden für die Erzeugung des nächsten Zustands invertiert und nichtinvertiert links bereitgestellt.
Die disjunktive Normalform wird durch NAND Gatter in der Mitte dargestellt.
Je nach logischer Verknüpfung werden mehrere NAND Gatter zusammengeschaltet und mit den entsprechenden Signalen verbunden.

Modulo 5 Zähler: Schaltungssimulation

LTSPICE code

In der Simulation sieht man das CLK-Signal, clr, und die Zählerausgänge b0, b1, b2.
Am Anfang kann man sehen wie b2 durch das clr-Signal "1" auf "0" gesetzt wird.
Dann sieht man das Hochzählen von b2,b1,b0 bei steigender CLK-Flanke.
000, 001, 010, 011, 100, 000,...
Das clr-Signal bei 0.8us setzt b0 und b1 auf "0" zurück.

Modulo5: VHDL code

Als Basis dient der Code des D-Flip-Flops und der Code für eine Wahrheitstabelle.
  1. entity MODULO5 is
  2. port (
  3. RESET,CLK : in STD_LOGIC;
  4. B: out STD_LOGIC_VECTOR(2 downto 0));
  5. end MODULO5;
  6.  
  7. architecture VERHALTEN of MODULO5 is
  8. signal BINT: STD_LOGIC_VECTOR(2 downto 0);

Modulo 5 VHDL code (2)

  1. begin
  2. SYN_COUNT:process (CLK, RESET)
  3. begin
  4. if RESET = '1' then
  5. BINT <= "000";
  6. elsif CLK='1' and CLK'event then
  7. case BINT is
  8. when "000" => BINT <= "001";
  9. when "001" => BINT <= "010";
  10. when "010" => BINT <= "011";
  11. when "011" => BINT <= "100";
  12. when "100" => BINT <= "000";
  13. when others => BINT <= "000";
  14. end case;
  15. end if;
  16. end process SYN_COUNT;
  17. B <= BINT;
  18. end VERHALTEN;
RESET Signal wurde eingeführt.
Sicherer Zustand "000" für den Fall others.
Ein Test benötigt nur die CLK. Diese wird meist automatisch erzeugt.

Kommentare zum VHDL Code

  • Synchron versus Asynchron
  • Busse: BINT: std_logic_vector(2 downto 0)
  • Busse und einzelne Leitungen:
    A <= BINT(3);
    Q (1 downto 0) <= BINT(2 downto 1);
    Ziel          Quelle
  • Signalfluss: Quelle zum Ziel
  • Process
    • Sequentielle Abarbeitung
    • Vorteil: Lesbarkeit
    • Nachteil: Implizite Register, Speicherzellen
    • If, case Anweisung

Test Modulo5: VHDL code


  1. entity Modulo5Test is
  2. -- Port ( );
  3. end Modulo5Test;
  4.  
  5. architecture Behavioral of Modulo5Test is
  6. COMPONENT MODULO5
  7. port (
  8. RESET,CLK : in STD_LOGIC;
  9. B: out STD_LOGIC_VECTOR(2 downto 0)
  10. );
  11. end COMPONENT;
  12. -- Inputs
  13. signal RESET,CLK : STD_LOGIC;
  14. -- Ouputs
  15. signal B: STD_LOGIC_VECTOR(2 downto 0);

Test Modulo5: VHDL code (2)


  1. begin
  2. uut: MODULO5 PORT MAP( RESET => RESET, CLK => CLK,
  3. B => B );
  4. clk_proc: process -- Clock process
  5. begin
  6. CLK <= '0'; wait for 5 ns;
  7. CLK <= '1'; wait for 5 ns;
  8. end process;
  9. stim_proc: process -- Stimulus process
  10. begin
  11. reset <= '1'; wait for 10 ns;
  12. reset <= '0'; wait for 10 ns;
  13. wait;
  14. end process;
  15. end Behavioral;

Modulo 5 simulation output

Rezept für Digitaltechnik

  1. Lege eine Dokumentation an und erfasse jeden Schritt
  2. Identifiziere Eingänge, Zustände und Ausgänge im Text
  3. Identifiziere unvollständige oder fehlende Informationen
  4. Vergebe Namen und Zuordnungen: Button B, '1' An, '0' Aus
  5. Evtl: Zerlege das Problem in Teilprobleme und starte zur Bearbeitung von Teilproblemen neu
  6. Erstelle eine Zustandstabelle:
    Zustandsgleichungen, Zustandsdiagramm
  7. Erstelle einen Schaltplan und Eingangssignale und simuliere.
    Alle Zustandskombinationen und Eingangskombinationen müssen getestet werden.
  8. Erstelle VHDL code für die Zustandstabelle und Eingangssignale und simuliere
  9. Überprüfe die korrekte Funktion
  10. Reflektiere 'lessons learned' in einer Zusammenfassung
  11. Gratulation zum Ergebnis

Fragen und Diskussion

  • Woran erkennt man eine Zustandsmaschine im VHDL code?
  • Wie kommt man von einer Zustandstabelle zu einem Zustandsdiagramm?
  • Wie schreibt man VHDL Code?
  • Warum muss man den VHDL Code testen?

12 Speicherfelder

Begriffe

Begriff/Objekt Kenn ich
nicht
Kenne ich Verstehe ich Kann ich erklären Kann ich anwenden
einsetzen
Zustandsdiagramm
Modulo 5 Zähler
Karnaugh Veitch
process
Frage?


Submit


Digitaltechnik      
  Hochschule für angewandte Wissenschaften Kempten, Jörg Vollrath, Bahnhofstraße 61 · 87435 Kempten
  Tel. 0831/25 23-0 · Fax 0831/25 23-104 · E-Mail: joerg.vollrath(at)fh-kempten.de
Impressum