home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s199 / 1.img / UNICTR.ABL < prev    next >
Encoding:
Text File  |  1988-04-21  |  4.3 KB  |  159 lines

  1. module UNICTR
  2. title 'UNIVERSAL COUNTER/SHIFT REGISTER'
  3.  
  4. U13 device'F82S105';
  5. "ASSIGN PIN AND NODE NAMES
  6.    
  7. CLK      pin 1;
  8. I3      pin 6;  "clear
  9. I2      pin 7;  "down/left
  10. I1      pin 8;  "up/right
  11. I0      pin 9;  "count
  12. OE      pin 19; "output enable
  13.  
  14. F0      pin 18;  RF0 node 29;
  15. F1      pin 17;  RF1 node 30;
  16. F2      pin 16;  RF2 node 31;
  17. F3      pin 15;  RF3 node 32;
  18.  
  19.  
  20. "Internal state counter
  21.  
  22. P0     node 37;  RP0 node 43;
  23. P1     node 38;  RP1 node 44;
  24. P2     node 39;  RP2 node 45;
  25. P3     node 40;  RP3 node 46;
  26.  
  27.  
  28. "Define special constants
  29.  
  30. H,L,X,Z,Ck    = 1 , 0 ,.X.,.Z.,.C. ;
  31. Hiz        = [Z,Z,Z,Z];
  32.  
  33. "Define counter/shift modes
  34.  
  35. mode =[I3,I2,I1,I0];
  36. down =[ 0, 1, 0, 1];
  37. up   =[ 0, 0, 1, 1];
  38. clear=[ 1, X, X, X]; 
  39. left =[ 0, 1, 0, 0];
  40. right=[ 0, 0, 1, 0];
  41.  
  42. "Group register outputs into sets
  43.  
  44. count =[P3,P2,P1,P0];
  45. output=[F3,F2,F1,F0];
  46.  
  47.  
  48. equations
  49.  
  50. ENABLE output =!OE;
  51.  
  52.  
  53. "Count Down
  54.  
  55. [ F0, P0]:= !I3 &  I2 & !I1 &  I0 &                   !P0;
  56. [RF0,RP0]:= !I3 &  I2 & !I1 &  I0 &                    P0;
  57. [ F1, P1]:= !I3 &  I2 & !I1 &  I0 &             !P1 & !P0;
  58. [RF1,RP1]:= !I3 &  I2 & !I1 &  I0 &              P1 & !P0;
  59. [ F2, P2]:= !I3 &  I2 & !I1 &  I0 &       !P2 & !P1 & !P0;
  60. [RF2,RP2]:= !I3 &  I2 & !I1 &  I0 &        P2 & !P1 & !P0;
  61. [ F3, P3]:= !I3 &  I2 & !I1 &  I0 & !P3 & !P2 & !P1 & !P0;
  62. [RF3,RP3]:= !I3 &  I2 & !I1 &  I0 &  P3 & !P2 & !P1 & !P0;
  63.  
  64.  
  65. "Count Up
  66.  
  67. [ F0, P0]:= !I3 & !I2 &  I1 &  I0 &                   !P0;
  68. [RF0,RP0]:= !I3 & !I2 &  I1 &  I0 &                    P0;
  69. [ F1, P1]:= !I3 & !I2 &  I1 &  I0 &             !P1 &  P0;
  70. [RF1,RP1]:= !I3 & !I2 &  I1 &  I0 &              P1 &  P0;
  71. [ F2, P2]:= !I3 & !I2 &  I1 &  I0 &       !P2 &  P1 &  P0;
  72. [RF2,RP2]:= !I3 & !I2 &  I1 &  I0 &        P2 &  P1 &  P0;
  73. [ F3, P3]:= !I3 & !I2 &  I1 &  I0 & !P3 &  P2 &  P1 &  P0;
  74. [RF3,RP3]:= !I3 & !I2 &  I1 &  I0 &  P3 &  P2 &  P1 &  P0;
  75.  
  76.  
  77. "Shift Left
  78.  
  79. [ F0, P0]:= !I3 &  I2 & !I1 & !I0 &  P3;
  80. [RF0,RP0]:= !I3 &  I2 & !I1 & !I0 & !P3;
  81. [ F1, P1]:= !I3 &  I2 & !I1 & !I0 &                    P0;
  82. [RF1,RP1]:= !I3 &  I2 & !I1 & !I0 &                   !P0;
  83. [ F2, P2]:= !I3 &  I2 & !I1 & !I0 &              P1;
  84. [RF2,RP2]:= !I3 &  I2 & !I1 & !I0 &             !P1;
  85. [ F3, P3]:= !I3 &  I2 & !I1 & !I0 &        P2;
  86. [RF3,RP3]:= !I3 &  I2 & !I1 & !I0 &       !P2;
  87.  
  88. "Shift Right
  89.  
  90. [ F0, P0]:= !I3 & !I2 &  I1 & !I0 &              P1;
  91. [RF0,RP0]:= !I3 & !I2 &  I1 & !I0 &             !P1;
  92. [ F1, P1]:= !I3 & !I2 &  I1 & !I0 &        P2;
  93. [RF1,RP1]:= !I3 & !I2 &  I1 & !I0 &       !P2;
  94. [ F2, P2]:= !I3 & !I2 &  I1 & !I0 &  P3;
  95. [RF2,RP2]:= !I3 & !I2 &  I1 & !I0 & !P3;
  96. [ F3, P3]:= !I3 & !I2 &  I1 & !I0 &                    P0;
  97. [RF3,RP3]:= !I3 & !I2 &  I1 & !I0 &                   !P0;
  98.  
  99. "Clear
  100.  
  101. [RF3,RF2,RF1,RF0,RP3,RP2,RP1,RP0]:= I3;
  102.  
  103.  
  104.  
  105.  
  106. test_vectors
  107.  
  108. ([CLK, OE,mode ]->[count,output])
  109.  [ Ck,  H,clear]->[    0,   Hiz];        "power on colck
  110.  [ Ck,  L,clear]->[    0,     0];    
  111.  [ Ck,  L,   up]->[    1,     1];    
  112.  [ Ck,  L,   up]->[    2,     2];    
  113.  [ Ck,  L, left]->[    4,     4];    
  114.  
  115. test_vectors 'test shift right'
  116.  
  117. ([CLK, OE,mode ]->[ count,output])
  118.  [ Ck,  L,clear]->[     0,     0];        "power on colck
  119.  [ Ck,  L,clear]->[     0,     0];    
  120.  [ Ck,  L, down]->[    15,    15];    
  121.  [ Ck,  L, down]->[    14,    14];    
  122.  [ Ck,  L,right]->[^B0111,^B0111];    
  123.  [ Ck,  L,right]->[^B1011,^B1011];    
  124.  [ Ck,  L,right]->[^B1101,^B1101];    
  125.  [ Ck,  L,right]->[^B1110,^B1110];
  126.  
  127. test_vectors 'test shift left'
  128. ([CLK, OE,mode ]->[ count,output])
  129.  [ Ck,  L,clear]->[^B0000,^B0000];
  130.  [ Ck,  L,   up]->[^B0001,^B0001];
  131.  [ Ck,  L, left]->[^B0010,^B0010];
  132.  [ Ck,  L, left]->[^B0100,^B0100];
  133.  [ Ck,  L, left]->[^B1000,^B1000];
  134.  [ Ck,  L, left]->[^B0001,^B0001];
  135.                  
  136. test_vectors 'test up counter'
  137. ([CLK, OE,mode ]->[ count,output])
  138.  [ Ck,  L,clear]->[     0,     0];    
  139.  [ Ck,  L,   up]->[     1,     1];    
  140.  [ Ck,  L,   up]->[     2,     2];    
  141.  [ Ck,  L,   up]->[     3,     3];    
  142.  [ Ck,  H,   up]->[     4,   Hiz];    
  143.  [ Ck,  H,   up]->[     5,   Hiz];    
  144.  [ Ck,  H,   up]->[     6,   Hiz];    
  145.  [ Ck,  L,   up]->[     7,     7];    
  146.  [ Ck,  L,   up]->[     8,     8];    
  147.  [ Ck,  L,   up]->[     9,     9];    
  148.  [ Ck,  L,   up]->[    10,    10];    
  149.  [ Ck,  L,   up]->[    11,    11];    
  150.  [ Ck,  L,   up]->[    12,    12];    
  151.  [ Ck,  L,   up]->[    13,    13];    
  152.  [ Ck,  L,   up]->[    14,    14];    
  153.  [ Ck,  L,   up]->[    15,    15];    
  154.  [ Ck,  L,   up]->[     0,     0];    
  155.                
  156.  
  157. end UNICTR
  158.  
  159.