: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 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);
|
![]() |
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);
|
![]() |
![]() |
|
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);
|
![]() |
![]() |
|