MezData-Logo Lösungen Button :ISP: Synchroner Zähler 0 bis 15, ausgedrückt in der Abel-Sprache

DECLARATIONS
  takt         PIN 11;                           "Takteingang Y0
  bit3..bit0   PIN 7,8,9,10 ISTYPE'BUFFER,REG';  "Zählerausgänge

  ctr = [bit3..bit0];

EQUATIONS
  ctr.d   = ctr.q + 1  ;     "Zähler um 1 erhöhen
  ctr.clk = takt;

(Alternativen: ctr := ctr +1 oder ctr := ctr.fb +1
ctr.c = takt )

Vom Compiler erzeugte Gleichungen

bit3 := (!bit3.FB &  bit2.FB & bit1.FB & bit0.FB
     #    bit3.FB & !bit0.FB
     #    bit3.FB & !bit1.FB
     #    bit3.FB & !bit2.FB);
bit2 := (!bit2.FB &  bit1.FB & bit0.FB
     #    bit2.FB & !bit0.FB
     #    bit2.FB & !bit1.FB);
bit1 := ( bit1.FB & !bit0.FB
     #   !bit1.FB &  bit0.FB);
bit0 := (!bit0.FB);

bit3.C = (takt);
bit2.C = (takt);
bit1.C = (takt);
bit0.C = (takt);

Synchroner Zähler 0 bis 15 mit asynchronem Reset

DECLARATIONS
  takt,reset PIN 11,19;                       "Takteingang Y0, Reseteingang
  bit3..bit0 PIN 7,8,9,10 ISTYPE'BUFFER,REG'; "Zählerausgänge
  ctr = [bit3..bit0];       "Zusammenfassung der Zählerausgänge zum Zähler

EQUATIONS
  ctr.d   = ctr.q + 1;  "synchroner Zähler 0 bis 15
  ctr.clk = takt;       "Zähler-Takt
  ctr.ar  = reset;      "asynchroner Reset

TEST_VECTORS   ([takt,reset] -> [bit3..bit0     ]);
  @repeat 2   { [.c. ,1    ] -> [.x.,.x.,.x.,.x.]; }
  @repeat 10  { [.c. ,0    ] -> [.x.,.x.,.x.,.x.]; }
  @repeat 2   { [.c. ,1    ] -> [.x.,.x.,.x.,.x.]; }
  @repeat 4   { [.c. ,0    ] -> [.x.,.x.,.x.,.x.]; }
END

Vom Compiler erzeugte Gleichungen

  bit3 := (!bit3.FB &  bit2.FB &  bit1.FB &  bit0.FB
        #   bit3.FB & !bit0.FB
        #   bit3.FB & !bit1.FB
        #   bit3.FB & !bit2.FB);

  bit2 := (!bit2.FB &  bit1.FB &  bit0.FB
        #   bit2.FB & !bit0.FB
        #   bit2.FB & !bit1.FB);

  bit1 := ( bit1.FB & !bit0.FB
        #  !bit1.FB &  bit0.FB);

  bit0 := (!bit0.FB);

  bit3.AR = (reset);                    “Der taktunabhängige Reseteingang
  bit2.AR = (reset);                    “jedes Flipflops ist dem Reset-
  bit1.AR = (reset);                    “Schalter Pin 19 verbunden
  bit0.AR = (reset);

  bit3.C = (takt);
  bit2.C = (takt);
  bit1.C = (takt);
  bit0.C = (takt);

Synchroner Zähler 0 bis 15 mit synchronem Reset

DECLARATIONS
  takt,reset PIN 11,19;                       "Takteingang Y0, Reseteingang
  bit3..bit0 PIN 7,8,9,10 ISTYPE'BUFFER,REG'; "Zählerausgänge

  ctr = [bit3..bit0];        "Zusammenfassung der Zählerausgänge zum Zähler

EQUATIONS
  when reset then ctr.d = 0;              "synchroner Reset
             else ctr.d   = ctr.q + 1;    "synchroner Zähler 0 bis 15
  ctr.clk = takt;                         "Zähler-Takt

TEST_VECTORS   ([takt,reset] -> [bit3..bit0     ]);
  @repeat 2   { [.c. ,1    ] -> [.x.,.x.,.x.,.x.]; }
  @repeat 10  { [.c. ,0    ] -> [.x.,.x.,.x.,.x.]; }
  @repeat 2   { [.c. ,1    ] -> [.x.,.x.,.x.,.x.]; }
  @repeat 4   { [.c. ,0    ] -> [.x.,.x.,.x.,.x.]; }

END

Vom Compiler erzeugte Gleichungen

"Die Reset-Bedingung wurde in jede UND-Verknüpfung mit aufgenommen.
"Daher ist der Reset-Schalter PIN 19 jetzt mit dem taktabhängigen
"D-Eingang jedes Flipflops verbunden!

bit3 := (!bit3.FB &  bit2.FB &  bit1.FB &  bit0.FB & !reset
     #    bit3.FB & !bit0.FB & !reset
     #    bit3.FB & !bit1.FB & !reset
     #    bit3.FB & !bit2.FB & !reset);

bit2 := (!bit2.FB &  bit1.FB &  bit0.FB & !reset
     #    bit2.FB & !bit0.FB & !reset
     #    bit2.FB & !bit1.FB & !reset);

bit1 := ( bit1.FB & !bit0.FB & !reset
     #   !bit1.FB &  bit0.FB & !reset);

bit0 := (!bit0.FB & !reset);

bit3.C = (takt);
bit2.C = (takt);
bit1.C = (takt);
bit0.C = (takt);