home *** CD-ROM | disk | FTP | other *** search
- module UNICTR
- title 'UNIVERSAL COUNTER/SHIFT REGISTER'
-
- U13 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];
- down =[ 0, 1, 0, 1];
- up =[ 0, 0, 1, 1];
- clear=[ 1, X, X, X];
- left =[ 0, 1, 0, 0];
- right=[ 0, 0, 1, 0];
-
- "Group register outputs into sets
-
- count =[P3,P2,P1,P0];
- output=[F3,F2,F1,F0];
-
-
- 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;
-
-
-
-
- test_vectors
-
- ([CLK, OE,mode ]->[count,output])
- [ Ck, H,clear]->[ 0, Hiz]; "power on colck
- [ 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]; "power on colck
- [ 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 UNICTR
-