home *** CD-ROM | disk | FTP | other *** search
- module shiftcnt flag '-t1'
- title 'universial counter / shift register
- Bjorn Benson Data I/O Corp 9 Mar 1984'
-
- IFL4 device 'F82S159';
-
- Clk,JKD,I1,I2,I3,OE pin 1,2,3,4,5,11;
- F0,F1,F2,F3 pin 12,13,14,15;
- FC,RA node 21,25;
-
- H,L,X,Z,Ck = 1,0,.X.,.Z.,.C.;
- INTACT,OPEN = ^hFF,0;
-
- " Define counter/shift modes
- mode = [I3,I2,I1,JKD]; " [I3,I2,I1,JKD]
- Down = [ 0, 1, 0, 1 ]; Left = [ 0, 1, 0, 0 ];
- Up = [ 0, 0, 1, 1 ]; Right = [ 0, 0, 1, 0 ];
- Clear = [ 1, X, X, X ];
-
- " Group register outputs into sets
- count = [F3,F2,F1,F0];
-
- equations
- ENABLE count = !OE;
-
- [F3.M,F2.M,F1.M,F0.M] = INTACT;
- FC = JKD; "JK when High, D when Low
-
- " Count Down JK (T) Flip/Flop
- !F0 := (mode == Down) ;
- F0.K = (mode == Down) ;
- !F1 := (mode == Down) & F0;
- F1.K = (mode == Down) & F0;
- !F2 := (mode == Down) & F1 & F0;
- F2.K = (mode == Down) & F1 & F0;
- !F3 := (mode == Down) & F2 & F1 & F0;
- F3.K = (mode == Down) & F2 & F1 & F0;
-
- " Count Up JK (T) Flip/Flop
- [!F0,F0.K] := (mode == Up) ;
- [!F1,F1.K] := (mode == Up) & !F0;
- [!F2,F2.K] := (mode == Up) & !F1 & !F0;
- [!F3,F3.K] := (mode == Up) & !F2 & !F1 & !F0;
-
- " Shift Left D Flip/Flop
- !F0 := (mode == Left) & !F3;
- !F1 := (mode == Left) & !F0;
- !F2 := (mode == Left) & !F1;
- !F3 := (mode == Left) & !F2;
-
- " Shift Right D Flip/Flop
- !F0 := (mode == Right) & !F1;
- !F1 := (mode == Right) & !F2;
- !F2 := (mode == Right) & !F3;
- !F3 := (mode == Right) & !F0;
-
- " Clear
- RA = (mode == Clear);
-
- @page
- test_vectors 'Count Up and Shift Left'
- ([Clk,OE,mode ] -> count)
- [ Ck, L,Clear] -> !0 ;
- [ Ck, L,Up ] -> !1 ;
- [ Ck, L,Up ] -> !2 ;
- [ Ck, L,Up ] -> !3 ;
- [ Ck, L,Left ] -> !6 ;
- [ Ck, L,Left ] -> !12 ;
-
- test_vectors 'Shift right'
- ([Clk,OE,mode ] -> count )
- [ Ck, L,Clear] -> ^b1111;
- [ Ck, L,Down ] -> ^b0000;
- [ Ck, L,Down ] -> ^b0001;
- [ Ck, L,Right] -> ^b1000;
- [ Ck, L,Right] -> ^b0100;
- [ Ck, L,Right] -> ^b0010;
- [ Ck, L,Right] -> ^b0001;
-
- test_vectors 'Shift left'
- ([Clk,OE,mode ] -> count )
- [ Ck, L,Clear] -> ^b1111;
- [ Ck, L,Up ] -> ^b1110;
- [ Ck, L,Left ] -> ^b1101;
- [ Ck, L,Left ] -> ^b1011;
- [ Ck, L,Left ] -> ^b0111;
- [ Ck, L,Left ] -> ^b1110;
-
- test_vectors 'Count up'
- ([Clk,OE,mode ] -> count )
- [ Ck, L,Clear] -> !0 ;
- [ Ck, L,Up ] -> !1 ;
- [ Ck, L,Up ] -> !2 ;
- [ Ck, L,Up ] -> !3 ;
- [ Ck, L,Up ] -> !4 ;
- [ Ck, L,Up ] -> !5 ;
- [ Ck, L,Up ] -> !6 ;
- [ Ck, L,Up ] -> !7 ;
- [ Ck, L,Up ] -> !8 ;
- [ Ck, L,Up ] -> !9 ;
- [ Ck, L,Up ] -> !10 ;
- [ Ck, L,Up ] -> !11 ;
- [ Ck, L,Up ] -> !12 ;
- [ Ck, L,Up ] -> !13 ;
- [ Ck, L,Up ] -> !14 ;
- [ Ck, L,Up ] -> !15 ;
- [ Ck, L,Up ] -> !0 ;
- end
-