home *** CD-ROM | disk | FTP | other *** search
- module unictr2
- title 'Universal counter / Shift register
- Bjorn Benson Data I/O Corp 9 Mar 1984'
-
- IFL2 device 'F82S105';
-
- " Assign pin and node names
-
- Clk pin 1;
- I3 pin 6; " Clear
- I2 pin 7; " Down/Left
- I1 pin 8; " Up/Right
- I0 pin 9; " Count
- OE pin 19; " Output Enable
-
- F0 pin 18; RF0 node 29;
- F1 pin 17; RF1 node 30;
- F2 pin 16; RF2 node 31;
- F3 pin 15; RF3 node 32;
-
- " Internal state counter
- P0 node 37; RP0 node 43;
- P1 node 38; RP1 node 44;
- P2 node 39; RP2 node 45;
- P3 node 40; RP3 node 46;
-
- " Define special constants
- H,L,X,Z,Ck = 1, 0, .X., .Z., .C.;
- HiZ = [Z,Z,Z,Z];
- " Define counter/shift modes
- mode = [I3,I2,I1,I0]; " [I3,I2,I1,I0]
- 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 = [P3,P2,P1,P0];
- output = [F3,F2,F1,F0];
-
- @page
- equations
- ENABLE output = !OE;
-
- " Count Down
- [ F0, P0] := !I3 & I2 & !I1 & I0 & !P0;
- [RF0,RP0] := !I3 & I2 & !I1 & I0 & P0;
- [ F1, P1] := !I3 & I2 & !I1 & I0 & !P1 & !P0;
- [RF1,RP1] := !I3 & I2 & !I1 & I0 & P1 & !P0;
- [ F2, P2] := !I3 & I2 & !I1 & I0 & !P2 & !P1 & !P0;
- [RF2,RP2] := !I3 & I2 & !I1 & I0 & P2 & !P1 & !P0;
- [ F3, P3] := !I3 & I2 & !I1 & I0 & !P3 & !P2 & !P1 & !P0;
- [RF3,RP3] := !I3 & I2 & !I1 & I0 & P3 & !P2 & !P1 & !P0;
-
- " Count Up
- [ F0, P0] := !I3 & !I2 & I1 & I0 & !P0;
- [RF0,RP0] := !I3 & !I2 & I1 & I0 & P0;
- [ F1, P1] := !I3 & !I2 & I1 & I0 & !P1 & P0;
- [RF1,RP1] := !I3 & !I2 & I1 & I0 & P1 & P0;
- [ F2, P2] := !I3 & !I2 & I1 & I0 & !P2 & P1 & P0;
- [RF2,RP2] := !I3 & !I2 & I1 & I0 & P2 & P1 & P0;
- [ F3, P3] := !I3 & !I2 & I1 & I0 & !P3 & P2 & P1 & P0;
- [RF3,RP3] := !I3 & !I2 & I1 & I0 & P3 & P2 & P1 & P0;
-
- " Shift Left
- [ F0, P0] := !I3 & I2 & !I1 & !I0 & P3;
- [RF0,RP0] := !I3 & I2 & !I1 & !I0 & !P3;
- [ F1, P1] := !I3 & I2 & !I1 & !I0 & P0;
- [RF1,RP1] := !I3 & I2 & !I1 & !I0 & !P0;
- [ F2, P2] := !I3 & I2 & !I1 & !I0 & P1;
- [RF2,RP2] := !I3 & I2 & !I1 & !I0 & !P1;
- [ F3, P3] := !I3 & I2 & !I1 & !I0 & P2;
- [RF3,RP3] := !I3 & I2 & !I1 & !I0 & !P2;
-
- " Shift Right
- [ F0, P0] := !I3 & !I2 & I1 & !I0 & P1;
- [RF0,RP0] := !I3 & !I2 & I1 & !I0 & !P1;
- [ F1, P1] := !I3 & !I2 & I1 & !I0 & P2;
- [RF1,RP1] := !I3 & !I2 & I1 & !I0 & !P2;
- [ F2, P2] := !I3 & !I2 & I1 & !I0 & P3;
- [RF2,RP2] := !I3 & !I2 & I1 & !I0 & !P3;
- [ F3, P3] := !I3 & !I2 & I1 & !I0 & P0;
- [RF3,RP3] := !I3 & !I2 & I1 & !I0 & !P0;
-
- " Clear
- [RF3,RF2,RF1,RF0, RP3,RP2,RP1,RP0] := I3;
-
- @page
- test_vectors
- ([Clk,OE,mode ] -> [count ,output])
- [ Ck, H,Clear] -> [ 0 , HiZ ]; "Power on clock
- [ Ck, L,Clear] -> [ 0 , 0 ];
- [ Ck, L,Up ] -> [ 1 , 1 ];
- [ Ck, L,Up ] -> [ 2 , 2 ];
- [ Ck, L,Left ] -> [ 4 , 4 ];
-
- test_vectors 'test shift right'
- ([Clk,OE,mode ] -> [count ,output])
- [ Ck, L,Clear] -> [ 0 , 0 ];
- [ Ck, L,Clear] -> [ 0 , 0 ];
- [ Ck, L,Down ] -> [ 15 , 15 ];
- [ Ck, L,Down ] -> [ 14 , 14 ];
- [ Ck, L,Right] -> [^b0111,^b0111];
- [ Ck, L,Right] -> [^b1011,^b1011];
- [ Ck, L,Right] -> [^b1101,^b1101];
- [ Ck, L,Right] -> [^b1110,^b1110];
-
- test_vectors 'test shift left'
- ([Clk,OE,mode ] -> [count ,output])
- [ Ck, L,Clear] -> [^b0000,^b0000];
- [ Ck, L,Up ] -> [^b0001,^b0001];
- [ Ck, L,Left ] -> [^b0010,^b0010];
- [ Ck, L,Left ] -> [^b0100,^b0100];
- [ Ck, L,Left ] -> [^b1000,^b1000];
- [ Ck, L,Left ] -> [^b0001,^b0001];
-
- test_vectors 'test up counter'
- ([Clk,OE,mode ] -> [count ,output])
- [ Ck, L,Clear] -> [ 0 , 0 ];
- [ Ck, L,Up ] -> [ 1 , 1 ];
- [ Ck, L,Up ] -> [ 2 , 2 ];
- [ Ck, L,Up ] -> [ 3 , 3 ];
- [ Ck, H,Up ] -> [ 4 , HiZ ];
- [ Ck, H,Up ] -> [ 5 , HiZ ];
- [ Ck, H,Up ] -> [ 6 , HiZ ];
- [ Ck, L,Up ] -> [ 7 , 7 ];
- [ Ck, L,Up ] -> [ 8 , 8 ];
- [ Ck, L,Up ] -> [ 9 , 9 ];
- [ Ck, L,Up ] -> [ 10 , 10 ];
- [ Ck, L,Up ] -> [ 11 , 11 ];
- [ Ck, L,Up ] -> [ 12 , 12 ];
- [ Ck, L,Up ] -> [ 13 , 13 ];
- [ Ck, L,Up ] -> [ 14 , 14 ];
- [ Ck, L,Up ] -> [ 15 , 15 ];
- [ Ck, L,Up ] -> [ 0 , 0 ];
- end unictr2
-
-