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.
entity  MODULO5 is
  port (
        RESET,CLK  : in STD_LOGIC; 
		B: out STD_LOGIC_VECTOR(2 downto 0));	  
end MODULO5;

architecture VERHALTEN of MODULO5  is
signal BINT: STD_LOGIC_VECTOR(2 downto 0);

Modulo 5 VHDL code (2)

begin
SYN_COUNT:process (CLK, RESET) 
begin
   if RESET = '1' then 
       BINT <= "000";
   elsif CLK='1' and CLK'event then
	case BINT is
		when "000" => BINT <= "001";
		when "001" => BINT <= "010";
		when "010" => BINT <= "011";
		when "011" => BINT <= "100";
		when "100" => BINT <= "000";
		when others => BINT <= "000"; 
	end case;
    end if;			
end process SYN_COUNT;
B <= BINT;
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


entity Modulo5Test is
--  Port ( );
end Modulo5Test;

architecture Behavioral of Modulo5Test is
    COMPONENT  MODULO5
      port (
            RESET,CLK  : in STD_LOGIC; 
            B: out STD_LOGIC_VECTOR(2 downto 0)
           );	  
    end COMPONENT;
    -- Inputs
    signal RESET,CLK  : STD_LOGIC;
    -- Ouputs
    signal B: STD_LOGIC_VECTOR(2 downto 0);

Test Modulo5: VHDL code (2)


begin
 uut: MODULO5 PORT MAP( RESET => RESET, CLK => CLK,
        B => B ); 
 clk_proc: process        -- Clock process
 begin
   CLK <= '0'; wait for 5 ns;
   CLK <= '1'; wait for 5 ns;
 end process;
 stim_proc: process         -- Stimulus process
 begin
   reset <= '1'; wait for 10 ns;
   reset <= '0'; wait for 10 ns;
   wait;
 end process;
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
Zustandsdiagramm, Modulo 5 Zähler, Karnaugh Veitch, process,